diff --git a/CLAUDE.md b/CLAUDE.md index 7e4ecd9..f27c65e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,12 +24,12 @@ scribe/ - Anti-patterns at repo root (not nested in skills/) because many agents read them - Specialists use Haiku (fast, cheap, constrained output) - Implementation agents use Sonnet (code generation) -- Conductor, voice-critic, and critique-synthesizer use Opus 4.8 (complex judgment, synthesis) +- Conductor, voice-critic, and critique-synthesizer use Opus (complex judgment, synthesis) - Conductor never writes or critiques - only coordinates ## Adding a New Agent -1. Create `agents/your-agent.md` with YAML frontmatter (name, model, description) +1. Create `agents/your-agent.md` with YAML frontmatter (name, model, description). Set `model` to a tier alias (`haiku`, `sonnet`, `opus`), never a pinned model ID 2. Reference files using `${CLAUDE_PLUGIN_ROOT}/path/to/file` 3. Define clear inputs, outputs, and constraints 4. If the agent participates in the pipeline, update `skills/scribe/references/orchestration/pipeline.md` diff --git a/README.md b/README.md index fed1b99..82ff039 100644 --- a/README.md +++ b/README.md @@ -110,8 +110,8 @@ Scribe ships with anti-patterns across three files: ### Critics (parallel ensemble) `rhythm-critic` `voice-critic` `cliche-detector` `ai-ism-critic` `pacing-critic` -### Orchestration (Opus 4.8) -`conductor` `anti-pattern-selector` `critique-synthesizer` +### Orchestration +`conductor` `critique-synthesizer` (Opus), `anti-pattern-selector` (Sonnet) ## Contributing diff --git a/agents/ai-ism-critic.md b/agents/ai-ism-critic.md index cc63a05..99c2d78 100644 --- a/agents/ai-ism-critic.md +++ b/agents/ai-ism-critic.md @@ -1,6 +1,6 @@ --- name: ai-ism-critic -model: claude-haiku-4-5 +model: haiku description: Detects the specific lexical and structural fingerprints of AI-generated prose. The most direct AI-default detection critic. Reads only assigned subset slice tagged ai-isms/ai-tell/ai-canary. Produces a 0-25 score and an itemized list of fingerprint hits. --- diff --git a/agents/anti-pattern-selector.md b/agents/anti-pattern-selector.md index 7e3feef..733edbb 100644 --- a/agents/anti-pattern-selector.md +++ b/agents/anti-pattern-selector.md @@ -1,6 +1,6 @@ --- name: anti-pattern-selector -model: claude-sonnet-4-6 +model: sonnet description: Selects a varied subset of anti-patterns for the current scribe run. Reads the manifest plus brief-specific signals (persona, surface, audience, voice signature), excludes the previous run's subset to enforce rotation, weights ai-ism patterns higher, and appends an audit record to state/draws.jsonl. Spawned first in every pipeline. Never writes or critiques. Output is the subset that downstream agents must use. --- diff --git a/agents/cliche-detector.md b/agents/cliche-detector.md index 1d0e27c..9f90f78 100644 --- a/agents/cliche-detector.md +++ b/agents/cliche-detector.md @@ -1,6 +1,6 @@ --- name: cliche-detector -model: claude-haiku-4-5 +model: haiku description: Detects cliches, manufactured aphorisms, dead metaphors, and content-marketing-blog phrasings. Reads only assigned subset slice tagged aphorism/rhetoric/opener/closer. Produces a 0-25 score and findings with replacement suggestions. --- diff --git a/agents/conductor.md b/agents/conductor.md index f4f28e5..8eaf240 100644 --- a/agents/conductor.md +++ b/agents/conductor.md @@ -1,6 +1,6 @@ --- name: conductor -model: claude-opus-4-8 +model: opus description: Pipeline orchestrator for scribe writing workflows. Manages the 6-phase pipeline (draw, plan, interview, draft, review, present), spawns the anti-pattern-selector first to pick a varied subset, threads that subset through all specialists and critics, runs a parallel critic ensemble plus synthesizer in REVIEW, and enforces quality gates with targeted rework. Does NOT write, edit, or critique. Coordinates only. --- diff --git a/agents/critique-synthesizer.md b/agents/critique-synthesizer.md index fa3f6d6..2cef8c9 100644 --- a/agents/critique-synthesizer.md +++ b/agents/critique-synthesizer.md @@ -1,6 +1,6 @@ --- name: critique-synthesizer -model: claude-opus-4-8 +model: opus description: Merges parallel critic outputs (rhythm, voice, cliche, ai-ism, pacing) into a single consensus report with a 0-100 Sameness Score. Deduplicates findings across critics. Routes targeted rework to the right specialist. Does NOT critique on its own — synthesizes only. --- diff --git a/agents/cross-persona-audit.md b/agents/cross-persona-audit.md index 056847e..d415686 100644 --- a/agents/cross-persona-audit.md +++ b/agents/cross-persona-audit.md @@ -1,6 +1,6 @@ --- name: cross-persona-audit -model: claude-sonnet-4-6 +model: sonnet description: Audits the 5 scribe persona definitions for structural divergence. Detects dimensions where two or more personas would produce indistinguishable prose. Flags overlap, produces a pairwise divergence matrix. Run when persona files are modified or when a new persona is added. --- diff --git a/agents/dialogue-specialist.md b/agents/dialogue-specialist.md index 6402009..29d718b 100644 --- a/agents/dialogue-specialist.md +++ b/agents/dialogue-specialist.md @@ -1,6 +1,6 @@ --- name: dialogue-specialist -model: claude-haiku-4-5 +model: haiku description: Plans dialogue beats — speech rhythm, dialogue tag discipline, register per character. Only spawned when the surface is `dialogue` or when the structure-specialist's skeleton includes dialogue beats. Outputs a dialogue spec the draft-implementer follows. --- diff --git a/agents/draft-implementer.md b/agents/draft-implementer.md index 7c89f31..20e0540 100644 --- a/agents/draft-implementer.md +++ b/agents/draft-implementer.md @@ -1,6 +1,6 @@ --- name: draft-implementer -model: claude-sonnet-4-6 +model: sonnet description: The first writer in the pipeline. Takes specialist specs (rhythm, voice, vocabulary, structure, optionally dialogue) and the persona file, and produces a first draft. Reads only the assigned subset of anti-patterns. Does NOT critique. Does NOT revise its own output. --- diff --git a/agents/external-judge.md b/agents/external-judge.md index d18fcd8..b903540 100644 --- a/agents/external-judge.md +++ b/agents/external-judge.md @@ -1,6 +1,6 @@ --- name: external-judge -model: claude-sonnet-4-6 +model: sonnet description: Independent Sameness scorer for prose. Reads prose only — no access to specialists' outputs, the synthesizer's findings, or the critic ensemble's reasoning. Used when an external validation harness needs an unbiased second opinion. Outputs JSON with score and indicators_hit. --- diff --git a/agents/pacing-critic.md b/agents/pacing-critic.md index ed4338b..a126d20 100644 --- a/agents/pacing-critic.md +++ b/agents/pacing-critic.md @@ -1,6 +1,6 @@ --- name: pacing-critic -model: claude-haiku-4-5 +model: haiku description: Audits chapter and essay pacing — how the passage opens, how it transitions between scenes, where the thesis lands, how it closes. Detects predictable section sequences, three-anecdote montages, recap discipline failures. Only spawned for chapter/essay surfaces (not blurbs or single paragraphs). 0-25 score. --- diff --git a/agents/research-scout.md b/agents/research-scout.md index e25d973..ff2229b 100644 --- a/agents/research-scout.md +++ b/agents/research-scout.md @@ -1,6 +1,6 @@ --- name: research-scout -model: claude-sonnet-4-6 +model: sonnet description: Mines Reddit, Hacker News, X/Twitter, Substack, writing communities, and editor blogs for emerging AI-default writing patterns. Requires 2+ independent complaints per pattern. Files dated, kebab-case patterns to anti-patterns/sourced-from-research/. Opens PRs only — never pushes to main. --- diff --git a/agents/rhythm-critic.md b/agents/rhythm-critic.md index 191a624..d5a9e12 100644 --- a/agents/rhythm-critic.md +++ b/agents/rhythm-critic.md @@ -1,6 +1,6 @@ --- name: rhythm-critic -model: claude-haiku-4-5 +model: haiku description: Audits prose rhythm — sentence-length variance, paragraph-length variance, em-dash density, tricolon usage, single-sentence-paragraph presence. Reads only the assigned subset slice tagged rhythm/paragraph/pacing. Produces a per-dimension score (0-25) and specific findings. --- diff --git a/agents/rhythm-specialist.md b/agents/rhythm-specialist.md index 655a9fa..8dc4961 100644 --- a/agents/rhythm-specialist.md +++ b/agents/rhythm-specialist.md @@ -1,6 +1,6 @@ --- name: rhythm-specialist -model: claude-haiku-4-5 +model: haiku description: Defines the sentence-length distribution, paragraph rhythm, and pacing targets for a scribe writing run. Reads the persona file and the user's brief; outputs a rhythm spec the draft-implementer must hit. Does NOT write prose. Does NOT read outside the assigned subset. --- diff --git a/agents/structure-specialist.md b/agents/structure-specialist.md index 065c5a7..21812e0 100644 --- a/agents/structure-specialist.md +++ b/agents/structure-specialist.md @@ -1,6 +1,6 @@ --- name: structure-specialist -model: claude-haiku-4-5 +model: haiku description: Plans the macro-structure of the passage — paragraph order, section breaks, how the surface opens and closes. Reads the rhythm/voice/vocabulary specialists' outputs and the persona file. Outputs a paragraph-by-paragraph skeleton the draft-implementer fills in. --- diff --git a/agents/vocabulary-specialist.md b/agents/vocabulary-specialist.md index 7791e60..f7c3fde 100644 --- a/agents/vocabulary-specialist.md +++ b/agents/vocabulary-specialist.md @@ -1,6 +1,6 @@ --- name: vocabulary-specialist -model: claude-haiku-4-5 +model: haiku description: Builds the vocabulary register list for a scribe writing run — required vocabulary categories, banned words, target specificity. Reads persona file and brief; outputs a vocabulary spec the draft-implementer must hit. --- diff --git a/agents/voice-critic.md b/agents/voice-critic.md index 379fb35..3f7b719 100644 --- a/agents/voice-critic.md +++ b/agents/voice-critic.md @@ -1,6 +1,6 @@ --- name: voice-critic -model: claude-opus-4-8 +model: opus description: Audits voice consistency, register, point-of-view discipline, and authorial stance. Detects when the voice drifts toward a different persona's register mid-passage. Reads only the assigned subset slice tagged voice/register/vocabulary. Produces a 0-25 score and findings. --- diff --git a/agents/voice-implementer.md b/agents/voice-implementer.md index 00a2a8c..b858fe7 100644 --- a/agents/voice-implementer.md +++ b/agents/voice-implementer.md @@ -1,6 +1,6 @@ --- name: voice-implementer -model: claude-sonnet-4-6 +model: sonnet description: Second-pass writer. Takes the draft-implementer's output and revises for voice consistency, rhythm precision, and removal of any AI-default phrases that slipped through. Does NOT critique scores. Outputs revised prose only. --- diff --git a/agents/voice-specialist.md b/agents/voice-specialist.md index a9749fa..e49ca95 100644 --- a/agents/voice-specialist.md +++ b/agents/voice-specialist.md @@ -1,6 +1,6 @@ --- name: voice-specialist -model: claude-haiku-4-5 +model: haiku description: Defines the voice register, tense, point-of-view, and authorial stance for a scribe writing run. Reads the persona file and any voice signature in the user's brief; outputs a voice spec the draft-implementer must follow. Does NOT write prose. --- diff --git a/skills/scribe/SKILL.md b/skills/scribe/SKILL.md index 045fba8..8db6a48 100644 --- a/skills/scribe/SKILL.md +++ b/skills/scribe/SKILL.md @@ -75,9 +75,9 @@ The `anti-pattern-selector` agent enforces all four. Runs first in every command | Agent | Model | Role | |---|---|---| -| `conductor` | Opus 4.8 | Pipeline orchestrator. Manages state, spawns specialists, enforces quality gates. | +| `conductor` | Opus | Pipeline orchestrator. Manages state, spawns specialists, enforces quality gates. | | `anti-pattern-selector` | Sonnet | Picks the varied subset for this run, writes the audit log. Runs first in every pipeline. | -| `critique-synthesizer` | Opus 4.8 | Merges parallel critic outputs, deduplicates, computes consensus 0-100 Sameness Score. | +| `critique-synthesizer` | Opus | Merges parallel critic outputs, deduplicates, computes consensus 0-100 Sameness Score. | ### Planning Specialists (read-only, produce specs) @@ -101,7 +101,7 @@ The `anti-pattern-selector` agent enforces all four. Runs first in every command | Agent | Model | Role | |---|---|---| | `rhythm-critic` | Haiku | Sentence/paragraph variance, em-dash density, tricolons. 0-25 | -| `voice-critic` | Opus 4.8 | Voice consistency, vocabulary register, marketing-verb detection. 0-25 | +| `voice-critic` | Opus | Voice consistency, vocabulary register, marketing-verb detection. 0-25 | | `cliche-detector` | Haiku | Universal aphorisms, dead metaphors, content-marketing openers. 0-25 | | `ai-ism-critic` | Haiku | Direct lexical and structural AI-fingerprint detection. 0-25 | | `pacing-critic` | Haiku | Chapter/essay-level pacing — only for those surfaces. 0-25 | diff --git a/tools/validate_plugin.py b/tools/validate_plugin.py index 1a70398..6002fe8 100644 --- a/tools/validate_plugin.py +++ b/tools/validate_plugin.py @@ -98,6 +98,10 @@ def validate_agents_and_commands() -> None: for key in ["name", "model", "description"]: if not fm.get(key): fail(f"{path.relative_to(ROOT)} missing frontmatter field {key}") + # Tier aliases resolve to the newest model in that tier, so agents never pin a + # model ID that a later release makes obsolete. + if fm["model"] not in {"haiku", "sonnet", "opus", "inherit"}: + fail(f"{path.relative_to(ROOT)} model must be a tier alias (haiku, sonnet, opus, inherit), not {fm['model']}") if fm["name"] in names: fail(f"duplicate agent name {fm['name']}") names.add(fm["name"])