StoryForge checks text in three layers:
| Layer | When | Mechanics | Who reacts |
|---|---|---|---|
| Before writing | when a chapter or scene starts | MCP tools deliver structured JSON briefs and pre-checks | chapter-writer, rolling-planner, the review skills |
| On save (hook) | on every Write, Edit and MultiEdit on draft.md and on character and person files |
exit code 2 reports the finding back to the model after the write, and the model has to fix it | PostToolUse hooks validate_chapter and validate_character |
| After the draft (skills) | called by you | Markdown reports and interactive corrections | you decide |
The checks are not an extra. A strong author profile alone does not keep books free of AI patterns. The gates are the second layer of protection.
| Gate | Layer | Skill or tool |
|---|---|---|
| Chapter Writing Brief | before writing | get_chapter_writing_brief |
| Tactical Setup Verifier | before writing | verify_tactical_setup |
| Pre-Scene Logic Audit | before every scene | chapter-writer, chapter-writer-memoir |
| Recent Chapter Timelines | before writing | get_recent_chapter_timelines |
| Review Brief | before the review | get_review_brief |
| Continuity Brief | before the continuity check | get_continuity_brief |
| Prose hook | on save | hooks/validate_chapter.py, tool validate_chapter |
| Character hook | on save | hooks/validate_character.py, see Character Anatomy |
| Chapter reviewer (33 points, chapter 1 with 13 extra points) | after the draft | chapter-reviewer, chapter-reviewer-memoir |
| Author check | after the draft | author-check |
| Chapter voice harvest | after the review | chapter-voice-harvest |
| Chapter humanizer | after the voice harvest | chapter-humanizer |
| Chapter proofreader | after the humanizer | chapter-proofreader |
| Chapter fixer | as needed | chapter-fixer |
| Voice checker (optional) | after the draft | voice-checker |
| Manuscript checker | whole book | manuscript-checker, manuscript-checker-memoir |
| Timeline validator | whole book | validate_timeline_consistency |
| Continuity checker | whole book | continuity-checker |
| Emotional truth pass | memoir chapters, before the review | emotional-truth-prompt |
| Memoir ethics gate | memoir, before export | memoir-ethics-checker, tool check_memoir_consent |
| Rules audit | as needed | rules-audit |
For a combined check there are run_quality_gates(book_slug) (all available checkers of a book in one result), validate_book_structure and run_pre_export_gates (see Technical Details).
Checker tools return a uniform result, usually under the key gate:
| Field | Content |
|---|---|
status |
PASS, WARN or FAIL |
reasons |
readable explanations |
findings |
structured findings with code, message, severity and location |
metadata |
counts, paths and other checker-specific extras |
When several gates are combined, FAIL beats WARN beats PASS.
Instead of many single read steps, an MCP tool delivers the data for a chapter as JSON. The principle behind it: data arrives as a brief, not as a prompt instruction.
get_chapter_writing_brief(book_slug, chapter_slug) is the main source of chapter-writer. The brief contains, among other things, the chapter and POV character, the story-time anchor, the time grids of recent chapters, the closing paragraphs of recent drafts, the characters present with profile, knowledge and tactical, inventory and state of the POV character, book rules, callbacks, banned phrases, the simile counts of recent chapters and the litmus questions from plot/tone.md. The tonal guidance from plot/tone.md includes, besides the litmus questions, the banned patterns as well (tone_banned_patterns), split into enforceable patterns and plain advisory notes. The full list and the error handling are under Technical Details.
Each component is protected separately. If one fails, it appears in errors and the brief still arrives with the remaining data.
Series context: If the book belongs to a series, each character in the brief carries a series_evolution field with the state from the series tracker (end state in the previous book, plan for the current book, development of relationships). The field is always present and null when there is no series context. More: Series Workflow.
verify_tactical_setup checks combat and travel scenes against the optional tactical block in character frontmatter. It warns when a protected character is at the rear or at the front of the group, when no protector is positioned or when the lead position does not fit movement_lead. It always returns questions for the writer as a checklist. The rules and the schema are under Technical Details.
Before every scene, chapter-writer in scene mode prints an audit block into the chat before prose lands in draft.md (in chapter mode once before the chapter). It is the counterweight to inventions under context pressure: for each category the model names the source in one sentence. If the source is silent, the gap is named and asked about, not bridged.
| Category | Source |
|---|---|
| Inventory of the POV character | pov_character_inventory in the brief |
| Geography | travel matrix in world/setting.md (memoir: research/sources.md), plot/timeline.md, recent time grids |
| Biography and relationships | character file (memoir: person file), canon brief |
| Voices in ensemble scenes | verbatim voice samples from the character file (memoir: ## Memory anchors) |
| Banned phrases and tics | banned_phrases in the brief, recurring_tics and donts of the author |
| Style principles | three fitting principles of the author, with example |
| Sensory plausibility | pov_character_state in the brief (clothing, injuries, altered states, perception limiters) |
| Scene arc | goal of the scene in the ## Scene Plan |
get_recent_chapter_timelines(book_slug, n) returns the time grids of the last N chapters that are at least at revision level. That anchors the context to established times and not to drafts. The continuity brief, by contrast, contains the grids of all chapters.
When a chapter is closed at Review or Final, chapter-writer extracts the POV character's end state (inventory, clothing, injuries, altered states, perception limiters), proposes it and, after your confirmation, saves it with update_character_snapshot into the series database (table character_snapshots). The character file stays unchanged. Later briefs read the snapshot as the most reliable source and otherwise fall back on timeline and draft heuristics.
get_review_brief(book_slug, chapter_slug) bundles for chapter-reviewer, among other things, the time grid of the chapter and its predecessor, the canonical calendar entries, the travel matrix, the canon facts including changed facts, tonal rules from plot/tone.md, active book rules and open callbacks. Banned patterns without backticks come along as plain advisory notes (banned_prose_unenforced) and never count as passed. For memoir, consent warnings are added. The chapter draft itself is deliberately not included, it is the content under review.
get_continuity_brief(book_slug) bundles for continuity-checker the canonical calendar, the travel matrix, the canon facts, the character index and the time grids of all chapters. In large books canon facts, calendar and grids are capped by size. The *_truncated fields show whether something is missing, and the checker says so in its report.
Two PostToolUse hooks run after every Write, Edit and MultiEdit, and a third hook secures rules from the chat at PreCompact. Alongside them, a hook called snapshot_draft quietly captures versions of fiction drafts on every write and edit; it is not a checker and never blocks. Structure, severities, example messages, linter_mode and the snapshot mechanics are described under Technical Details. The overview:
| Hook | Subject | Severity |
|---|---|---|
Prose (validate_chapter) |
book rules and tonal rules (plot/tone.md) in backticks |
block |
| author banlist (banned phrases, tics, don'ts) | block or warn | |
meta-narrative (for example Ch 5, callback, foreshadow) |
block | |
| relative time phrases against the story-time anchor | warn | |
| AI tells and global shape patterns | warn | |
| sentence-length variance | warn | |
| POV boundary (technical vocabulary the POV character does not know) | warn | |
Characters (validate_character) |
frontmatter, required fields (memoir person files skip role), recommended sections |
block and warn |
In strict mode (default) a block finding of the prose hook is reported back to the model with exit code 2 after the write, and the model has to fix it. In warn mode findings are only printed. The mode is per book and set as linter_mode in the frontmatter of the book CLAUDE.md. It affects only the prose hook: the character hook does not read linter_mode and always exits with code 2 on frontmatter blockers.
For the hook only what is in backticks in the book's rules counts:
| Notation | Meaning | Who reacts |
|---|---|---|
`phrase` |
hard pattern | prose hook (block) and manuscript checker |
*phrase* and "phrase" |
examples, replacements, hints | the manuscript checker also reads quotes after a ban cue, the hook does not |
For book rules the manuscript checker is deliberately more tolerant than the hook: soft findings can bear false alarms because you decide, hard blockers cannot.
Book rules live in the database. So that they really take effect, there is a check layer of tools and a skill:
| Tool | Purpose |
|---|---|
list_book_rules(book_slug) |
inventory of all rules with the patterns the scanner extracts |
lint_book_rules(book_slug) |
bulk check of all rules |
update_book_rule(book_slug, rule_match, new_text, validate) |
change or delete a rule, with re-check |
append_book_rule(book_slug, text, validate) |
create a new rule, with check |
The check uses the same pattern extractor as the manuscript checker. What it reports, the scanner would also silently lose:
| Code | When |
|---|---|
italic_examples_with_ban_cue |
ban cue plus examples in italics the scanner does not see. Use backticks. |
mixed_positive_negative_quotes |
ban cue plus several quotes, the scanner treats all of them as bans |
bracket_placeholder |
placeholder like [noun] in backtick text, read as a character class. Use \w+. |
scanner_extracts_nothing |
ban cue without backticks and without a quote, the rule is dead |
The same idea applies to author discoveries: write_author_discovery with validate=True attaches warnings and the extracted patterns to the response. There are two further codes, mixed_positive_negative_italics and bold_title_unscannable. Style principles deliberately produce no gap warnings because they are not scanned. The check never blocks, it only makes things visible.
/storyforge:rules-audit [book-slug] runs this interactively: scan, table of findings, a decision per finding (apply suggestion, edit manually, mark as narrative, skip), apply with re-check and a report. The skill never changes a rule without your confirmation. For books with quotation marks instead of backticks, the migration runs first (see Technical Details), then rules-audit for the remaining format problems.
/storyforge:chapter-reviewer <book> <chapter> checks a chapter against 33 numbered points and nine sub-points. The data comes from the review brief. For memoir there is chapter-reviewer-memoir.
| Category | Points | Content |
|---|---|---|
| Structure | 1 to 5 | opening hook, scene-sequel, chapter arc, ending, pacing |
| Craft | 6 to 10 | show don't tell, senses, specific details, dialogue, conflict |
| Voice | 11 to 15 | author voice, tone, vocabulary, sentence rhythm, dialogue voices |
| Continuity | 16 to 20 | canon, timeline, travel times, stale references, character facts |
| Tonal Consistency | 21 to 25 | only if plot/tone.md exists: dominant mode, warning signs, non-negotiable rules, litmus test, banned patterns |
| Intra-Day Timeline | 26 to 28 | time anchor, internal consistency, consistency with the previous chapter |
| Anti-AI | 29 to 33 | AI vocabulary, uniform structure, generic descriptions, named feelings, too-neat resolution |
Plus these sub-points:
| Sub-point | Checks |
|---|---|
| 9b | questions in dialogue ending with a period instead of a question mark (hard rule, every hit is FAIL, except deliberately marked flat delivery) |
| 10b | simile discipline: two-question test for every comparison, illogical, decorative, stacked and dead similes are flagged. Authors with a simile-rich style are judged more leniently. |
| 14b | phrase micro-echo: repetition of content words within a window of three sentences without rhetorical intent |
| 20a | POV knowledge boundary: three options: move into dialogue, reframe as lay observation or cut |
| 20b to 20f | plot logic: information leak, motivation break, causality inversion, world-rule violation, chapter promises |
The plot logic rests on analyze_plot_logic, see Technical Details. For 20f the chapter needs a ## Promises section in its README. chapter-writer fills it at the transition to Review. For older books /storyforge:backfill-promises adds it afterwards.
For chapter 1 a list of 13 points in three groups runs first:
Load-bearing points are 4, 5, 9, 10 and 13. A FAIL there turns the overall verdict into FAIL.
The verdict is PASS, WARN or FAIL:
The report names strengths, findings by weight (Critical, Recommended, Minor) and a suggestion for the next step, usually chapter-fixer. With the run, reviewer_pass_done is set in chapter.yaml so that next-step knows the progress.
/storyforge:author-check <book> <chapter> is the positive counterpart to the reviewer and manuscript checker, which only report negatives. The skill checks whether the author's style principles that fit the book's genres actually occur in the draft, and compares dialogue share, fragment share, single-sentence paragraphs and sentence length with the quantitative targets in the profile (otherwise with general defaults). The findings are hints and block nothing. The principles come from study-author and backfill-style-principles, see Author Profiles.
/storyforge:chapter-voice-harvest <book-slug> [chapter-slug] evaluates the logged review decisions from your corrections and turns confirmed voice patterns into style principles in the author profile. It runs after the review (and after the fixer or scene rewriter), before the humanizer, for fiction and memoir alike. It is a recommended but self-skipping step: if no pending feedback is logged, it says so in one line and ends.
Logging: chapter-writer, chapter-reviewer, chapter-fixer, chapter-scene-rewriter, chapter-humanizer and chapter-proofreader log checked decisions with log_review_feedback. The reviewer logs only what it executes itself, not what it hands off to the fixer. The humanizer logs findings it reworked and findings it discarded or deliberately kept, not replacements you simply approved. The proofreader logs only passages you explicitly confirm as intentional. Duplicate entries are ignored.
Classification: Before a candidate is promoted, every pending entry is classified against a closed vocabulary of dimensions and directions (reference/craft/voice-dimensions.md); two of the dimensions apply to memoir only. This is not the voice-checker's 7/8-dimension scoring, which remains unchanged and runs independently.
Candidates: get_voice_candidates requires weighted evidence of at least 3 from at least 2 chapters, with these weights:
source_skill |
Weight | When logged |
|---|---|---|
self_edit (your own edit) |
1.5 | only when you say so |
| writer, reviewer, fixer, rewriter | 1 | a checked decision |
| humanizer | 0.5 | a reworked or discarded finding |
| proofreader | 0.25 | an explicitly confirmed passage |
Opposite directions with overlapping scope are reported as a conflict, not as a candidate. The scope is the intersection of the genres of the evidence; empty means universal.
Decision: For each candidate you answer explicitly: Promote, Edit and promote, Already in profile, Keep watching or Discard. Only then does the skill write with write_author_discovery(section="style_principles") and a genre scope. Never into donts or recurring_tics, which feed the enforced banlist. Exception: donts only when you name a concrete phrase, and only for fiction.
Memoir: Memoir never stores raw text, only the classification (dimension, direction) and a one-sentence rule (at most 240 characters), without the names of real people from the book. Memoir feedback must already be classified when it is logged. Style principles from memoir books get genres="memoir" and no example; they apply only in the author's memoir books, not in their fiction books.
Your own edits: Only when you say so ("I changed the text") does get_self_edit_hunks read your changes to draft.md against the baseline, never automatically. This is fiction-only, and the baseline is valid per machine.
Technical details for the individual tools are under MCP Tools.
/storyforge:chapter-humanizer <book> <chapter> is the surgical remover of AI patterns. In the standard path it sits after chapter-reviewer and before chapter-proofreader. For each finding it makes a suggestion in the author's voice and writes to draft.md only after your approval.
Pre-scan: The tool scan_chapter_ai_tells searches by machine for catalog patterns, flagged vocabulary and author bans, applies the density rules per scene and measures dash density, repeated sentence openers (only from six in a row), invisible characters and rhythm. The result is a candidate list, not a verdict. The skill also reads the draft itself, because the tool does not recognize judgment patterns or literal versus figurative use.
Pass 1: elegant-abstraction patterns from section 11 of anti-ai-patterns.md, among others:
One word.)the words landed)the silence held)the word cost him)did not quite become, from the second hit per scene)trust his face)It wasn't X. It was Y.)Pass 2: flagged vocabulary from section 1 of the same catalog, only in figurative use, plus the author's donts.
Dashes in narration are only a tell at high density. The humanizer brings the chapter under the limit (adjustable with em_dash_per_1k_limit in the profile) and varies the replacements: comma, colon, restructured sentence, deletion, a full stop for at most a third. Parentheses are excluded as a replacement.
Flow:
apply 1, 2 / skip 3 / 4: shorter. Without an explicit decision nothing is written.check_replacement_text beforehand and must not change facts.humanizer_pass_done is set in chapter.yaml.The catalog pre-scan (pass 1 and pass 2) applies only to books written in English; for any other book language it returns only a warning, while author bans and tonal rules are still checked. Findings the humanizer reworked or discarded feed into the voice harvest as feedback; replacements you simply approved do not.
| voice-checker | chapter-humanizer | |
|---|---|---|
| Mode | diagnosis and score | surgical and interactive |
| Output | score 0 to 100, dimensions | numbered hit list with fixes |
Writes to draft.md |
no | yes, after approval |
| In the standard path | no, optional | yes |
/storyforge:chapter-proofreader checks spelling, grammar and punctuation in the book's language and explains in the author's mother tongue (native_language). It runs after the humanizer, for fiction and memoir. Only passages you explicitly confirm as intentional are logged as feedback.
/storyforge:voice-checker <book> [chapter] returns an authenticity score from 0 to 100. It is not a mandatory step but an overall check, for example before export or for critical chapters.
First the vocabulary scan runs as a hard gate: if a word from the AI-tell list hits in the flagged sense, the skill stops and outputs only the hit list with WARN (isolated hits) or FAIL (dense hits). Only after rewriting and a clean scan does the full report follow.
The full report scores seven dimensions, eight for memoir:
The verdict: PASS at a score of 70 or more, WARN from 50 to 69, FAIL below 50 or with systemic patterns that call for a rebuild.
/storyforge:chapter-fixer closes the gap between "a checker found something" and "it is fixed". chapter-writer only appends and would damage an existing draft. The fixer reads the flagged passage and replaces exactly that with the Edit tool.
Rules:
chapter-scene-rewriter.rules-audit.anonymization_leak is a pre-publication blocker and excluded from batch approval, as is book_rule_violation./storyforge:manuscript-checker <book> [--interactive] scans the whole book for problems that only show when reading from start to end. It runs at the end of the revision, after every chapter has gone through reviewer, humanizer and proofreader. For memoir there is manuscript-checker-memoir; each variant points to the other when the book category is wrong.
The tool scan_manuscript(book_slug) writes the report to research/manuscript-report.md and returns a gate: FAIL if there is a book_rule_violation finding whose rule documents no exception of its own. WARN for all other findings, PASS without findings.
| Category | Captures |
|---|---|
book_rule_violation |
violations of the book rules |
author_rule_violation |
violations of the author's donts |
author_vocab_violation |
hits of the author's flat banned phrases |
writing_discovery_violation |
hits of the author's recurring tics; a tic flagged [warn] counts as medium instead of high, a chapter at or under its declared Max N per chapter produces no finding |
global_shape_violation |
catalog patterns from section 11 (advisory, for every author) |
ai_tell_violation |
catalog vocabulary from section 1 (advisory, for every author) |
plot_hole |
causality inversions and promises never paid off |
cliche |
curated worn-out phrases |
question_as_statement |
question-word dialogue with a period instead of a question mark |
filter_word |
POV-distancing verbs per 1,000 words |
adverb_density |
-ly adverbs per 1,000 words |
sentence_repetition |
recurring phrases of 8 to 15 words across chapters |
snapshot |
static description blocks without action and dialogue (threshold five sentences, adjustable per book with snapshot_threshold under ## Linter Config) |
callback_dropped, callback_deferred |
registered callbacks that were never or not recently picked up |
simile, character_tell, blocking_tic, sensory, structural, signature_phrase |
cross-chapter repetitions |
book_rules_unreadable, callbacks_unreadable |
meta finding: rules or callbacks could not be read, so the category was not checked |
Report order: first the meta findings book_rules_unreadable and callbacks_unreadable, then book rules, then the author bans (author_rule_violation, author_vocab_violation, writing_discovery_violation), then the catalog tier (global_shape_violation, ai_tell_violation), then anonymization leaks, plot holes, clichés, then the rest by weight. A finding already covered by a hard author hit produces no additional catalog warning on the same line.
The thresholds for density categories (for example filter words and adverbs) are fixed in code, the details are in the report.
Only in manuscript-checker-memoir:
| Category | Captures |
|---|---|
anonymization_leak |
real name in the text although the profile lists the person as anonymized (pre-publication blocker) |
tidy_lesson_ending |
chapter ending with a moral summary instead of a moment |
reflective_platitude |
density of retrospective platitudes |
timeline_ambiguity |
density of temporal vagueness |
real_people_consistency |
inconsistent name form of the same person |
On its own, anonymization_leak raises the gate to WARN, not FAIL, but is marked in the headline as a privacy blocker. For memoir plot_hole runs only with causality_inversion.
With --interactive the skill goes through the heavy findings one by one, shows hits with context, proposes replacements and asks: apply all, adjust individually, skip or quit. It respects the author's style principles and tics, so deliberate quirks are not "corrected". Questions with a period ("Who.") are a legitimate style choice in small doses. For each hit there are two options: convert to a question mark (default) or keep the period and pair it with a narrative beat.
You register callbacks with /storyforge:register-callback. For the callback status alone there is verify_callbacks(book_slug), without the whole scan.
validate_timeline_consistency(book_slug) compares the chapters' time anchors and relative time phrases in the text with the event calendar in plot/timeline.md. It is the batch counterpart to the time-anchor hook, useful after several chapters and before the revision, especially in discovery writing.
For each chapter with a parsable ## Chapter Timeline it derives the date for phrases such as yesterday, tomorrow, last week, last night, this morning, tonight or an hour ago and compares it with the chapter's event. Deviations of more than zero days are reported. Chapters without a parsable block are listed under missing_anchors. If plot/timeline.md is missing, calendar_built is false and there are no findings. The result is also stored under {book}/reports/timeline-validation.json.
/storyforge:continuity-checker <book> checks the whole book against:
plot/timeline.md): temporal consistencyworld/setting.md): spatial consistency. Memoir has no matrix, spatial statements are checked for real-world plausibility.add_canon_fact): fact consistency, with a special eye on changed facts and chapters that still use the old versionTypical findings: a weekday that does not fit the timeline; a travel time shorter than in the matrix; an age that deviates from canon; a location description that drifts between chapters. The report is saved at research/continuity-report.md.
Reconstruction: If the timeline or travel matrix is missing, the skill proposes them from the drafts and writes them with the marker [RECONSTRUCTED] to plot/timeline.md and world/setting.md so you can verify them. This is the most common use for discovery writers. If calendar entries exist but were cut off by the size cap, the skill does not reconstruct, to avoid duplicates.
The tool get_current_story_anchor(book_slug, chapter_slug) returns the mapping of relative phrases to dates directly, see Technical Details.
Memoir books have two checks that do not exist for fiction.
/storyforge:emotional-truth-prompt checks a chapter draft for gaps in felt experience, places where the text is smooth but the experience is missing. It runs after the draft and before chapter-reviewer-memoir. The skill works through seven dimensions and returns questions and revision hints, never rewritten prose:
| Dimension | Checks |
|---|---|
| ET1 Implicit feeling | feelings the narrator does not say |
| ET2 Retrospective drift | the present narrator's knowledge seeps into the scene |
| ET3 Memory contradiction | suspiciously clean memory |
| ET4 Avoidance hedge | vague references, unnamed refusals |
| ET5 Thoroughness trap | detail without a link to feeling |
| ET6 Scene-or-summary error | pivots summarized, transitions dramatized |
| ET7 "I was wrong" | penance as spectacle, tidy redemption |
Verdicts: PASS (continue to the review), DEEPEN (work the flagged dimensions, then a second pass) and REWRITE (structural revision). For fiction books the skill points to chapter-reviewer.
/storyforge:memoir-ethics-checker has two passes.
Consent: The tool check_memoir_consent rates each person in people/ by consent_status and person_category:
consent_status |
Verdict |
|---|---|
confirmed-consent |
PASS |
not-required (public figure, deceased, fully anonymized) |
PASS |
pending |
WARN |
not-asking |
WARN |
| missing or unknown value | WARN |
refused |
FAIL |
A missing or unknown person_category turns a PASS into a WARN. Valid values are public-figure, private-living-person, deceased and anonymized-or-composite.
Defamation risk in the text: The skill reads the drafts and searches for four patterns for every person (regardless of consent status):
| Pattern | Content |
|---|---|
| D1 | claim about behavior or condition without a time scope ("He drank too much.") |
| D2 | reconstructed, damaging dialogue presented as fact |
| D3 | the person's thoughts stated as fact instead of impression ("She hated me.") |
| D4 | imputation of a crime, incompetence or sexual misconduct without verification |
The skill's verdict: EXPORT BLOCKED for a refused consent or a D4 finding, RESOLVE BEFORE EXPORT for WARN or D1 to D3, otherwise EXPORT CLEAR.
For memoir, export-engineer calls check_memoir_consent before the export. On FAIL it stops, on WARN it asks. The defamation scan belongs to the memoir-ethics-checker skill and does not run automatically.
chapter-writer loads the chapter writing brief and prints the pre-scene logic audit. For combat or travel scenes verify_tactical_setup runs.
The prose hook runs automatically on every Write and Edit.
/storyforge:chapter-reviewer (memoir: emotional-truth-prompt first)/storyforge:chapter-fixer if needed/storyforge:author-check/storyforge:chapter-voice-harvest (after the review and fixes, before the humanizer)/storyforge:chapter-humanizer/storyforge:chapter-proofreader/storyforge:voice-checker for critical chaptersvalidate_timeline_consistency/storyforge:continuity-checker/storyforge:manuscript-checker --interactive (memoir: manuscript-checker-memoir)/storyforge:sensitivity-reader for sensitive topics/storyforge:memoir-ethics-checkerFinal/storyforge:export-engineerCauses: the phrase is a backtick pattern in the book rules or in the author's donts or tics. Remove or change the entry. As an emergency measure, set linter_mode: warn in the frontmatter of the book CLAUDE.md. That applies to the whole book and cannot be set per pattern. See also Author Profiles.
The domain is listed in the character's knowledge block as none or layperson but should be competent. Move it there, or remove the knowledge block and the character is not checked. You can add your own domains as a file under reference/craft/knowledge-domains/.
Usually the author profile is too vague, there are no bans in the writing discoveries, the writing was not scene by scene, or no work was analyzed with study-author. Sharpen the profile, see Author Profiles.
That is normal for discovery books after the first draft and for long books. Concentrate on the heavy findings and leave the medium ones in the first pass.
The warning is a checklist, not a blocker: if the derived date is right, ignore it. linter_mode: warn does not switch it off, because that mode only demotes blockers to notices, and the hook prints the findings in warn mode as well (up to 10 lines). The warnings disappear only when the chapter README has no parsable ## Chapter Timeline section with a start time, or when the text contains no relative time phrases.
Example: the chapter says "three days later", the timeline "two days later". Check whether a day was counted as intra-day. Record the semantics, for example with /storyforge:register-callback and a rule ("timeline days are calendar days, not 24-hour blocks"), so that it is in the book rules.
The log is empty. Entries are only created by checked decisions in the reviewer, fixer, rewriter or writer, and, when you say so, by your own edits. Write a few chapters through the review round before you expect anything from the voice harvest.
The global AI-tell catalog (anti-ai-patterns.md) applies only to books written in English, see Technical Details. Book rules, author bans, tics and tonal rules still apply regardless.