247 lines
24 KiB
Markdown
247 lines
24 KiB
Markdown
# 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.
|