Skill diet: the budget wins over the recursion

2026-10-01 · branch jack_20261001_skill_diet · source: hank-krac /doctor findings relayed by a peer session, decisions by Jack in this session

Problem

chain-of-command already caps fan-out (SMALL 4 / MEDIUM 8 / LARGE 16 agents, two review waves). The cap is buried, the dcr description still says "continues until all selected lenses pass clean", /dc spawns agents even for a one-file fix, and the always-loaded jacked-behaviors block pushes ten different follow-up commands. One branch on 2026-10-01 still ran 10 workflows, about 45 agents and four review waves. The skill listing is also over its budget, so Claude Code strips descriptions and skills such as the marketing pack never route.

Decisions (Jack, this session)

QuestionDecision
Retire recursive-10-10, coverage-matrix, swarm, swarm-research?Keep all. Slim them so they obey the tier budget.
Marketing pack defaultNot decided as "off". Jack's point: they never fired because routing never saw their descriptions. Fix the listing budget instead.
Ultracode vs tier budgetThe budget wins.
jacked-behaviors blockCompress every rule, and cut the suggestion nags for /techdebt, /retro, /audit-rules, /canary, /benchmark, /land-and-deploy and /blindspot.

Changes

#File(s)Change
Askills/dcr/SKILL.md + new references/large-tier.md, references/codex-engine.mdPut a BUDGET block first (tier table with agent budget, two-wave cap, convergence rule, ultracode subordinate). Move the persona pool, wild-card pool, pre-mortem pool and pre-mortem prompt into large-tier.md, read only at LARGE. Move the Codex dispatch detail into codex-engine.md, read only when the engine is codex. Rewrite the description so it no longer says "recursive ... until clean". Keep every contract the tests pin, and point the tests at the file the text now lives in.
Bskills/chain-of-command/SKILL.md, commands/dc.mdchain-of-command: open with the budget (tier, agents per tier, two waves, ultracode subordinate, incomplete is not clean), then the lanes. Remove duplicated text; this skill auto-loads every session. /dc: tier first; at SMALL the main loop runs the review inline with zero agents; MEDIUM gets one reviewer; LARGE gets the reviewer plus the pre-mortem. Multi-thread spawning stays inside the budget.
Ccoverage-matrix, recursive-10-10-product-hardening, commands/swarm.md, swarm-researchBind each fan-out to the chain-of-command budget. coverage-matrix: batch the per-role and per-domain streams into at most the tier budget. 10-10: one skeptical evaluator per verified batch, not per row. swarm: team size counts against the budget. swarm-research: the rebuttal round is done by the parent, and Phase 2 is one combined verify-and-attack agent below Major. Trim restated rationale.
Drules/jacked_behaviors.mdMain loop rewrites it: one sentence per rule plus its trigger. Nags cut per decision. Same rules, same meaning (no tightening, no loosening beyond Jack's call).
Eapi/routes/features.pyBug fix: the dashboard skill toggle copied only SKILL.md. On enable it now copies the whole skill tree (_copy_skill_tree). On disable it removes only a directory jacked owns (skill_removal_decision). Without this fix, dcr's new references/ folder, plus the existing sidecars of logo-forge, launch-post and night-shift, are lost on a dashboard toggle.
Fjacked skill descriptions + a testAfter the listing-budget research comes back: trim jacked-shipped descriptions to what routing needs, and add a test that caps their length against the real listing constraint.

Out of scope

~/.claude/CLAUDE.md is not edited by hand. The block updates when jacked installs from the new template. The Claude Code workflow-authoring text is built into Claude Code and is not jacked's. The onboard-hank-service YAML fix shipped separately as hank-codes-admin-webui #302pr.

Gates

Targeted tests per change, then one full uv run python -m pytest on the frozen tree. All shipped YAML frontmatter must parse. One consolidated review pass (MEDIUM tier: one reviewer). Then open a PR and stop; merge needs Jack.