# Spire guidance-text audit: size, filler, steering - Date: 2026-10-16 22:58 · Model: `claude-opus-5-5` · Branch audited: `main` (plus the `headless-forks` worktree for gremlins and the branch Athanor) - Scope: `plugins/spire/` skills (SKILL.md + references; no `templates/` dirs exist on main), agents, plugin CLAUDE.md, README. Also the injected `.claude/spire/project.md`. - Method: `wc -w` for size; tokens ≈ words × 1.3 (tables and code blocks tokenize worse, so real numbers run higher). I read every file in the load bundles in full and sampled the rest (svg references and parts of init only skimmed). Class percentages are estimates from reading, not measurements. - Findings and options only. Nothing here is a verdict. ## 1. Sizes ### Per file (main) | Group | File | Words | ≈ Tokens | |---|---|---:|---:| | **igor** | skills/igor/SKILL.md | 3473 | 4515 | | | references/mindset.md (`@`-included) | 348 | 452 | | | references/model-tiers.md | 713 | 927 | | | references/journal-template.md | 153 | 199 | | | references/project.md (blank template) | 351 | 456 | | | references/harness-notes.md (moved-stub) | 107 | 139 | | | agents/igor.md | 85 | 111 | | **implementation** | skills/implementation/SKILL.md | 1395 | 1814 | | | references/spawning-claude-code.md | 1172 | 1524 | | | references/models.md | 691 | 898 | | | references/superpowers.md | 461 | 599 | | | references/run-log.md | 410 | 533 | | **workpad** | skills/workpad/SKILL.md | 1768 | 2298 | | **project** | skills/project/SKILL.md | 45 | 59 | | | + injected `.claude/spire/project.md` (reliquary) | 216 | 281 | | **adepts** | skills/adepts/SKILL.md (+ roster output, ~6 words here) | 100 | 130 | | **research** | skills/research/SKILL.md | 1155 | 1502 | | | skills/research-tree/SKILL.md | 1213 | 1577 | | **svg** | SKILL.md + inline-svg.md + layout-legibility.md | 859 + 1318 + 757 | 3814 | | **other skills** | init | 1835 | 2386 | | | zathras | 1011 | 1314 | | | curator | 327 | 425 | | | knowledge | 319 | 415 | | **agents** | adept | 1431 | 1860 | | | athanor | 980 | 1274 | | | researcher | 450 | 585 | | | search | 396 | 515 | | | attacker | 326 | 424 | | | planner | 288 | 374 | | | reviewer | 276 | 359 | | | scout | 268 | 348 | | | zathras | 92 | 120 | | **misc** | plugin CLAUDE.md | 27 | 35 | | | README.md (not loaded by agents) | 353 | 459 | | **Total (main)** | | **24 953** | **≈ 32 400** | Branch worktree `headless-forks` for comparison: gremlins/SKILL.md **2052** (≈ 2670 tok), preamble.md 247, templates 463 (gremlin briefs, not Athanor reading), `where` injection ≈ 133. On the branch the Athanor's text also grows: athanor.md 980 → **1658**, implementation SKILL 1395 → 1474, spawning-claude-code 1172 → **3077**, run-log 410 → 552, models 691 → 854. Fixed overhead in every main session: skill descriptions ≈ 620 words and agent descriptions ≈ 630 words (≈ 1.6k tok). workpad (102), svg (114), research-tree (102) and athanor (127) have the longest descriptions. The repo CLAUDE.md (117 words) loads too. ### Load bundles (what one agent carries at start) "Preloaded" = frontmatter `skills:` plus `@`-includes plus CLAUDE.md. "+ mandated" = files the preloaded text tells the agent to read before it can do its job. I assumed the `@references/mindset.md` include expands inside a skill. Nobody has checked that. | Bundle | Preloaded | Words | + mandated reads | Words | ≈ Tokens (with mandated) | Agent-specific share | |---|---|---:|---|---:|---:|---:| | **Igor boot** | igor.md, igor SKILL, mindset, project (+project.md), adepts, workpad, repo CLAUDE.md | 6 152 | journal-template | **6 305** | **≈ 8 200** (+1.6k listings) | igor SKILL+mindset ≈ 61% | | **Athanor start (main)** | athanor.md, project, workpad, implementation, CLAUDE.md | 4 521 | spawning (impl:67 "Read … before dispatching"), run-log | **6 103** | **≈ 7 930** (+ models.md 691 → ≈ 8 830) | athanor.md 16% | | **Athanor start (branch)** | + gremlins, longer athanor/impl | 7 330 | spawning 3077, run-log 552 | **10 959** | **≈ 14 250** (+ models 854 → ≈ 15 360) | athanor+gremlins 34% | | **Planner** | planner.md, project, workpad, implementation, CLAUDE.md | 3 829 | — | 3 829 | **≈ 4 980** | 7.5% | | **Attacker** | attacker.md + same | 3 867 | — | 3 867 | **≈ 5 030** | 8.4% | | **Reviewer** | reviewer.md + same | 3 817 | — | 3 817 | **≈ 4 960** | 7.2% | | Adept (for reference) | adept.md, workpad, adepts, CLAUDE.md | 3 416 | adepts/CLAUDE.md + handoff (project data) | 3 416+ | ≈ 4 440+ | 42% | | Zathras (for reference) | zathras.md + skill, project, workpad, adepts | 3 349 | — | 3 349 | ≈ 4 350 | 33% | The bundles look like this: **workpad (1768 words) is preloaded into seven agents**, and **implementation (1395) is preloaded into planner, attacker and reviewer**. In each of those three, workpad plus implementation makes up ~83% of what the agent carries. Only 7–8% is its own job description. ## 2. Content classes Classes: **a** agent-specific operational instruction · **b** project/harness facts · **c** general knowledge the model has · **d** filler (persona, motivation, history, repetition, hedges, examples restating a rule) · **e** stale or contradicting. ### Overall split Weighted over all 24 953 words on main: **a 42% · b 22% · c 9% · d 23% · e 4%** (≈ 10.5k / 5.5k / 2.2k / 5.8k / 0.95k words). Per bundle (with mandated reads): - **Igor boot:** a 41 · b 16 · c 10 · d 30 · e 3 - **Athanor start (main):** a 41 · b 27 · c 10 · d 18 · e 4 - **Planner/attacker/reviewer:** a ~45 · b ~12 · c ~17 · d ~23 · e ~3. Much of the "a" is somebody else's job (the reviewer carries the attack procedure and the bug-hunting rules; the planner carries the phase-review rules). ### Per file (estimates) | File | a | b | c | d | e | Notes | |---|---:|---:|---:|---:|---:|---| | igor SKILL | 45 | 12 | 5 | 33 | 5 | Persona/voice 9–41 ≈ 544 words; delegation rule restated ~8×; three near-identical adept spawn templates (133–161, 164 words) | | mindset.md | 15 | 0 | 5 | 80 | 0 | Philosophy plus a note to future editors ("Protect them in any rewrite") | | model-tiers.md | 40 | 30 | 0 | 25 | 5 | Table near-duplicates igor SKILL 77–89 | | harness-notes.md | 0 | 0 | 0 | 90 | 10 | Moved-stub restating spawning rules | | journal-template | 60 | 10 | 0 | 30 | 0 | | | project skill + project.md | 40 / 85 | | | | 20 / 15 | project.md is stale (see e) | | adepts SKILL | 20 | 40 | 0 | 40 | 0 | 40-word developer HTML comment loaded into every boot | | workpad SKILL | 45 | 10 | 25 | 20 | 0 | Ticket context 48–68 ≈ 346 words; document-kind definitions | | implementation SKILL | 55 | 10 | 10 | 20 | 5 | Rationale paragraphs; Bugs section is generic | | spawning-claude-code | 10 | 75 | 0 | 10 | 5 | Good "b" content; history rows | | run-log | 70 | 10 | 0 | 20 | 0 | Field-heavy (see §4) | | models.md | 10 | 50 | 0 | 40 | 0 | Sources list, withdrawn notes | | superpowers.md | 30 | 40 | 0 | 25 | 5 | Only read on demand | | athanor.md | 55 | 10 | 0 | 25 | 10 | Furnace persona; stale fork step | | planner.md | 80 | 0 | 10 | 10 | 0 | Tightest file in the plugin | | attacker.md | 45 | 0 | 0 | 45 | 10 | ~70% restates implementation 24–34, which it also preloads | | reviewer.md | 40 | 0 | 0 | 55 | 5 | ~60% restates implementation 51–58 | | adept.md | 60 | 15 | 5 | 20 | 0 | Folder tree duplicates the scaffolded adepts/CLAUDE.md it reads at genesis | | researcher / search / scout | 20–40 | 0 | 30–50 | 15–30 | 0–5 | Tool lists, "start narrow" | | zathras SKILL | 25 | 25 | 0 | 40 | 10 | Persona plus a contradicting model rule | | research / research-tree | 35–50 | 0–5 | 20–25 | 25 | 5–10 | | | init / curator / knowledge / svg | mostly a+b | | | | | Human-triggered or on-demand, outside the bundles | ### (c) General knowledge: quotes - `agents/search.md:27-29`: "**Start narrow.** Use Grep with a specific symbol or pattern before broadening." / "**Read strategically.** Don't read entire large files" - `agents/researcher.md:31`: "**Synthesize, don't summarize.**"; `:41-42` "Use clear headings and short paragraphs" / "Lead with the answer" - `agents/researcher.md:13-18`, `search.md:12-17`, `scout.md:12-17`: tool lists that restate the frontmatter (`- Search code and files (Glob, Grep)` …) - `skills/research/SKILL.md:55-56`: explains what `WebFetch` and `WebSearch` do - `skills/workpad/SKILL.md:97-103`: textbook distinctions ("A brainstorm is divergent … A design is convergent") - `skills/research-tree/SKILL.md:44`: topological layering explained ("always one past its deepest prerequisite") - `skills/implementation/SKILL.md:63`: "**Explore before you focus.** Look one or two layers up from the symptom, skim recent commits …" - `skills/igor/SKILL.md:63`: "**Fearlessness means flagging misconceptions.** When the user has a factual error, say so directly." ### (d) Filler: quotes - `skills/igor/SKILL.md:9`: "Says \"yeth, marthter\" exactly zero times." - `skills/igor/SKILL.md:21`: "Every minute spent doing work yourself is a minute you are unavailable to the user. Your value is proportional to your presence." (again at `:65` and `mindset.md:27`) - `skills/igor/SKILL.md:23`: "This directive governs everything below. … If any instruction below seems to conflict with delegation, delegation wins." - `skills/igor/SKILL.md:34`: the furnace grammar rule ("never 'the Athanor is in the oven' or similar inversions"). The same metaphor repeats at `:91`, `athanor.md:4-6`, `athanor.md:21` ("You ARE the oven"), `zathras SKILL:15`, README:32 - `skills/igor/SKILL.md:36-41`: four example flourishes - `skills/igor/references/mindset.md:21-29`: "The five voice lines … Protect them in any rewrite". This is an editor instruction that loads into every Igor run - `skills/zathras/SKILL.md:13`: "Not Zathras the great leader, not Zathras the quiet one. This Zathras." and `:37-40` example lines - `plugins/spire/CLAUDE.md:1`: "a wizard's private workshop where knowledge accumulates" - `skills/implementation/SKILL.md:30`: "This step is what pays for dropping per-task review. … Without it, lean is just less review." (and again in `igor SKILL:99`) - `skills/igor/SKILL.md:93`: "(in spacecraft it overrode 4.6 pins in 184 of 184 spawns)". This is history inside a rule - `skills/research/SKILL.md:12-14`: the "core problem this solves" narrative - `skills/adepts/SKILL.md:7-10`: "Note: This skill uses Bash(bash:*) … a novel pattern. … Per harness design this should pre-approve" - `references/spawning-claude-code.md:51`: a row that says it "is not evidence for alias-over-pin" - `references/models.md:26`: withdrawn 4.6/Opus-5 notes kept in the active file - `agents/planner.md:33`, `attacker.md:39`, `reviewer.md:35`: "Do this yourself; do not dispatch further agents." None of these agents has the Agent tool in its `tools:`, so the sentence does nothing. The same goes for `search.md:21`: "You do not have the Agent tool. Do not attempt to use it. Do not suggest that work be delegated" - Gremlins (branch): 17 review-finding tags the model cannot resolve, such as "(P0.1)", "(M16)", "(N1)", "(Minor 13)", "(Phase 1 M3)", "(C4)". "N1" names two different things (`gremlins/SKILL.md:105` delta-section rule, `:111` orphan watchdog) ### (e) Stale or contradicting: quotes - `agents/athanor.md:32`: "A complex block in the area you just read can go to a fork of yourself" and `skills/implementation/SKILL.md:49` "**trunk and forks** … go to a fork of the builder". The goal decision of 2026-10-16 (`goals/headless-forks.md:47`) drops Agent-tool forks, and `spawning-claude-code.md:61` records the `fork` type as not offered. On main this tells the Athanor to use a path that is not there. The branch fixes it. - `skills/igor/SKILL.md:66`: "**Fork sparingly.** Forking yourself is a last resort." Same unavailable mechanism. - `skills/zathras/SKILL.md:74`: "**Model must be explicit.** Always pass `model` on `Agent` calls." This contradicts `igor SKILL:93` and `spawning:18` ("Pinned agents: omit `model`"). Passing the alias overrides the pins (184/184). - `skills/zathras/SKILL.md:70`: "Multi-file refactors, cross-cutting changes → Athanor" vs `model-tiers.md:22` "the `athanor` gets a reshaped build plan, never an unplanned build brief". - `skills/igor/SKILL.md:173`: "Give every dispatched agent an explicit output file path". `scout` and `search` have no Write tool. - `skills/igor/SKILL.md:99`: "Igor with user or Pinky" and "(trial since 0.2.2)". Pinky does not exist ("Pinky, when it exists", `spawning:54`). - `skills/igor/SKILL.md:43`: "If it loaded the blank template (the hint says 'run /spire:init')". `skills/project/SKILL.md` never loads the blank template. It echoes a one-line message, so `igor/references/project.md` (351 words) is unreachable through that path. - `.claude/spire/project.md` (injected into every bundle): the agent list "igor, athanor, adept, researcher, scout, search, zathras" has no planner/attacker/reviewer. There is no `## Build` section, though implementation:82 reads it. The field is called "Verification commands", not Gate/Tests. "Legacy: `plugins/g4b_ai/` still exists (… being phased out)". - `skills/research/SKILL.md:121`: "Which model to use — out of scope" right below its own model table (`:26-30`). Same at `research-tree:100`. - `agents/researcher.md`: three fetch caps, "at most 3–5" (`:23`), "1–3 key sources" (`:30`), "at most **5** … hard cap" (`:36`). - `skills/research/SKILL.md:59-63`: MCP server names (`@anthropic/fetch`, `markdownify`, `jina-reader`) that are not verified. - `skills/init/SKILL.md:219,226`: the adept template frontmatter has two `status:` keys (`generated` and `active`). - `skills/adepts/SKILL.md:9-10`: "should pre-approve the command at load time". The gremlins work found that `allowed-tools` did *not* pre-approve in a subagent (`gremlins/SKILL.md:27`, P0.8). - `athanor.md:60` and `implementation:87`: two paragraphs on superpowers, which the user no longer runs, loaded at every Athanor start to say it is "not part of the loop". ## 3. Duplication | Rule | Where (file:line) | Count | |---|---|---:| | Igor delegates / "work vs conversation" | igor SKILL 15–21, 29, 54, 65, 67, 186; mindset 19, 25–29; zathras 21 | ~9 | | Stamp the model id / check the stamp | igor 93; model-tiers 39; spawning 20; implementation 53, 68; run-log 9, 37; athanor 45; planner 34; attacker 40; reviewer 37 | 11 | | Pinned → omit `model`, unpinned → pass alias, no Fable | igor 93; model-tiers 35–40; spawning 18–19, 47–49; athanor 45; models.md 31; (contradicted: zathras 74) | 6 | | Leaf briefs "do this yourself; do not dispatch" | igor 181; harness-notes 12; spawning 21; implementation 67; athanor 46; zathras 74; model-tiers 33; research 111; planner/attacker/reviewer | 11 | | Gate between blocks, tests once per phase | igor 99; implementation 18, 41; athanor 33–34; attacker 32; init 72–73; project template 27–28 | 7 | | Review: answer every flag, hunt weakened checks / tests that cannot fail, list unplanned additions | igor 99; implementation 54–55; reviewer 22–24; athanor 34; run-log 54 | 5 | | One fix pass, re-check only Critical/Important, stop | igor 104–105, 177; implementation 19, 56–57; athanor 40; reviewer 29–31; superpowers 20 | 7 | | Separation of roles | igor 101; implementation 22; planner 15; attacker 15; reviewer 16; athanor 51; model-tiers 11–13 | 7 | | Attack checklist | implementation 26–28; attacker 19–25; igor 99 | 3 | | Code in a plan only where its form is the decision | implementation 34; planner 29; attacker 33; superpowers 21 | 4 | | Times from `date`, not feel | igor 174; implementation 76; run-log 7–8; journal-template 14 | 4 | | Agents write their own reports | igor 173; athanor 54; zathras 82; model-tiers 21 | 4 | | Goals read-only | igor 178; athanor 53; zathras 86 | 3 | | Notifications = turn ending | igor 180; harness-notes 9; spawning 22 | 3 | | Research agent tiers and fetch caps | research 26–32, 49; model-tiers 8–10; igor 79–81; researcher 23/30/36; search 38; scout 33 | 6+ | | Athanor furnace metaphor | igor 34, 91; athanor 4–6, 21; zathras 15; README 32 | 6 | | Adept folder tree | adept.md 114–131; init 181–198 (→ adepts/CLAUDE.md, read at genesis) | 2 | | Delegation table | igor 77–89; model-tiers 5–17; zathras 65–72 | 3 | Inside the planner/attacker/reviewer bundles, the agent body restates rules that are also in the preloaded implementation skill, so each agent reads the same rule twice per start. ## 4. Steering risk The user's earlier finding is that a single sentence steers Opus 5.5 strongly. These sentences most likely push toward over-building, over-verifying or audit-style notes. **Toward audit-style review and long notes** 1. `agents/reviewer.md:22`: "Answer **every** deviation and flag in the run log's handoff notes, one by one." This is reinforced at `implementation:54` and `igor SKILL:99` ("it answers every handoff flag"). Together with item 2, the review turns into a point-by-point audit, and its length follows the builder's flag count, not the risk. 2. `references/run-log.md:54`: "Flags for the reviewer: every deviation and every 'flagged for review' line above, one per bullet". `:41` invites "anything the reviewer should look at". Builders flag freely and reviewers answer each one. 3. `references/run-log.md:37-44`: eight fields per block (model, start/end `date`, done, deviations, flagged, left for later, expected broken, commits), plus a Tokens column, provisional status and "Not run / untested". The branch adds usage tables. Nothing caps the length. 4. `agents/reviewer.md:23`: "**Hunt** weakened checks … and tests that cannot fail". "Hunt" invites a search that keeps going until it finds something. **Toward over-building (scope)** 5. `agents/attacker.md:25`: "Missing function: a thing planned that does nothing, a path with no way back (onboarding without offboarding), error handling, security." This asks the attacker to add scope, against its own `:33` "Scope cut back to the goal". It is probably the strongest single scope-widener in the cycle. 6. `agents/attacker.md:23` / `implementation:26`: "consumers of changed semantics … other readers, stats, migrations, callers in other crates". Useful, but with no stopping rule. 7. `agents/planner.md:26`: "within a phase, **steps** with a completion criterion each". `models.md:17` already notes that 5.5 plans ran ~11× larger, yet planner.md has no size cap. 8. `research-tree:41`: "List every sub-topic you can think of, even ones that feel redundant." **Toward over-verifying** 9. `igor SKILL:93`: "check the stamped id before acting on the result; if it is not the intended model … re-dispatch". The stamping rule appears 11 times across the bundles (§3). 10. `athanor.md:34`: "read the fix's diff for loosened assertions or deleted checks before you report green". This is the reviewer's job, done a second time by the builder. The branch makes it a mechanical per-block grep (`git diff … | grep -c '^-.*assert'`). 11. `implementation:62-63`: "If you cannot write the failing test, keep investigating" plus four exploration acts before any bug fix ("Skip this for obvious bugs" helps). 12. `igor SKILL:187`: every wrap-up runs adept handoffs, accretion, and graduation candidates. `mindset`/`igor:61`: "**Best over fastest.**" pushes toward thoroughness over speed in general. 13. `adept.md:81`: refresh `handoff.md` after every state-changing consultation, plus journal entries and `search` dispatches ("Don't guess"). **Sentences that are missing (would push toward small and simple)** - No size limit for plans, build plans, run logs, review reports, session journals or the Athanor's deliverable. The only caps in the plugin are adept `handoff.md` ≤ ~40 lines, adept `CLAUDE.md` ≤ ~60 lines, docs split at ~200 lines, and trunk notes "a page". - No "the smallest change that meets the goal" or "prefer deleting to adding" for planner, attacker or builder. - No "happy path first; edge cases only where the plan names them." - No reviewer rule like "report findings only; do not list what you checked and found fine; an empty section is omitted." - No "flag only what you are unsure of; 'none' is the normal answer" for handoff notes. - No cap on tests added per block, and no "a test per behaviour the plan names, not per branch." - The attacker has no "cutting is the main job; adding a function needs the goal to require it." ## 5. Sweet-spot options Options for discussion, not decisions. The target sizes are rough and assume the content classes above. ### Igor boot (now ≈ 6.3k words / 8.2k tok) - **Option I-1, lean (≈ 2.2–2.6k words / ~3k tok).** Persona in two lines, one flourish rule, no examples. Delegation stated once with the line test (code, commands or artifacts → delegate). Drop mindset.md from boot and keep "Orienting is not deciding" as one bullet. One delegation table: delete model-tiers.md or turn it into the only table. One adept spawn template with a variant line. The cycle as stage list plus decision tree (~250 words), pointing to implementation for detail. Replace the workpad preload with a 150-word placement card (folders, `YYYY-MM-DD-hh-slug`, stage→folder), since Igor delegates the writing. Remove the history and Pinky. - **Option I-2, moderate (≈ 4k words / ~5.2k tok).** Keep the Voice section but cut it to ~150 words and keep workpad preloaded. Remove only the duplicates (delegation ×8, model rules, notification rules) and the stale fork and Pinky lines. - Either way: fix the injected project.md (agent list, a `## Build` section), drop the adepts dev comment, and fix the zathras model contradiction. ### Athanor start (main ≈ 6.1k words / 7.9k tok; branch ≈ 11k / 14.3k) - **Option A-1, lean core (main ≈ 1.8–2.2k words; branch ≈ 3.5–4k).** athanor.md at ~500 words: procedure plus keepers, no furnace description, no superpowers, no fork step. A "builder core" excerpt of implementation (~400 words: build-phase rules, deviation logging, project settings) instead of the whole skill. The run-log template cut to ~200 words: block row, a handoff note of Done / Deviations / Flags (default "none") / Commits, and a phase close. The spawning reference split into a ~250-word rules card (preloaded or mandated) and the claim tables on demand. No workpad preload, because the brief and the run-log template give the paths. On the branch: split gremlins into a core of ~800–1000 words (setup, the call sequence, waiting, failure → action) and an on-demand results/flags reference, and strip the finding IDs. - **Option A-2, keep structure (main ≈ 4k).** Keep the skills preloaded but delete the duplicates (stamp ×4, leaf ×3, fork, superpowers paragraph) and cap the run log ("a handoff note is at most 8 lines"). ### Planner / attacker / reviewer (now ≈ 3.8–3.9k words each, 7–8% their own) - **Option P-1, self-contained (≈ 500–800 words each).** Each agent body carries its whole procedure: planner as now, attacker as now minus "Missing function", reviewer as now. Add a ~200-word shared "cycle contract" (roles, gate/test cadence, severity grades, where outputs go), duplicated on purpose or put in a tiny `spire:cycle` skill. Preload neither workpad nor implementation, because the brief names the output path. That makes each start about 5–7× smaller. - **Option P-2, preload a slim implementation.** Shrink implementation itself to ~700 words (move Bugs, Context and Composition into references), keep the preload, and drop the agent-body restatements. - Either way, add size and simplicity sentences: planner "a plan fits in ~N lines; cut anything the goal does not need"; attacker "cutting is the main job; added scope needs the goal to require it"; reviewer "findings only; answer a handoff flag only when it hides a finding; no 'checked, fine' lines". ### Read-only agents (scout/search/researcher) - About 100–200 words each would do: the budget, the output form, the fetch cap (one number). Drop the tool lists and the "you do not have the Agent tool" paragraphs, which the tool restriction already enforces. ### Order of savings (rough, per start) 1. Stop preloading workpad where the brief gives the path: −1.8k words in each of 6 bundles. 2. Stop preloading full implementation into planner/attacker/reviewer: −1.4k words each. 3. Cut Igor persona, mindset and delegation repetition: −1.2 to −1.8k words at boot. 4. Split spawning and gremlins into a core card plus on-demand tables: −1 to −2.5k on the branch Athanor. 5. Remove stale and contradicting lines (fork, Pinky, zathras model rule, project.md): small in words, large in steering.