From 972e1f6e5904e84c9974fe67797fea76799ccf91 Mon Sep 17 00:00:00 2001 From: Raymond Ware Date: Fri, 23 Oct 2026 09:55:53 -0700 Subject: [PATCH 1/2] chore(agents): use model tier aliases instead of pinned IDs Agents pinned claude-opus-4-8, claude-sonnet-4-6, and claude-haiku-4-5, which fall behind each model release. Tier aliases resolve to the newest model in each tier. Each agent keeps its tier, docs drop the 4.8 version label, and validation now rejects pinned model IDs. --- CLAUDE.md | 4 ++-- README.md | 2 +- agents/ai-ism-critic.md | 2 +- agents/anti-pattern-selector.md | 2 +- agents/cliche-detector.md | 2 +- agents/conductor.md | 2 +- agents/critique-synthesizer.md | 2 +- agents/cross-persona-audit.md | 2 +- agents/dialogue-specialist.md | 2 +- agents/draft-implementer.md | 2 +- agents/external-judge.md | 2 +- agents/pacing-critic.md | 2 +- agents/research-scout.md | 2 +- agents/rhythm-critic.md | 2 +- agents/rhythm-specialist.md | 2 +- agents/structure-specialist.md | 2 +- agents/vocabulary-specialist.md | 2 +- agents/voice-critic.md | 2 +- agents/voice-implementer.md | 2 +- agents/voice-specialist.md | 2 +- skills/scribe/SKILL.md | 6 +++--- tools/validate_plugin.py | 4 ++++ 22 files changed, 28 insertions(+), 24 deletions(-) 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..c75addc 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ 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) +### Orchestration (Opus) `conductor` `anti-pattern-selector` `critique-synthesizer` ## 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"]) From 0e5204d73f60e508301bb9c0d109325bdc62098d Mon Sep 17 00:00:00 2001 From: Raymond Ware Date: Fri, 23 Oct 2026 09:59:19 -0700 Subject: [PATCH 2/2] docs(readme): list anti-pattern-selector under Sonnet The selector runs on Sonnet but was grouped under the Opus orchestration heading. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c75addc..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) -`conductor` `anti-pattern-selector` `critique-synthesizer` +### Orchestration +`conductor` `critique-synthesizer` (Opus), `anti-pattern-selector` (Sonnet) ## Contributing