β οΈ Why this isn't "7 skills + 10 files." Blindly applying fork-pattern to all 7 parallel-agent skills would have been a false optimization β 6 of them are intentionally fork-ineligible (per-agent
model= override or worktree isolation). Checking eligibility first is the whole point.
π΄ fork-pattern eligibility β what the audit actually found
| skill | verdict | why |
|---|---|---|
review-pr | ELIGIBLE β (fixed) | 6 agents, no model=, no worktree β CC forks off the lead's cached prefix (~60% cut) |
verify | ineligible | passes model=MODEL_OVERRIDE per agent on --model |
cover | ineligible | model=MODEL_OVERRIDE + manual pre-created worktree |
implement | ineligible | EnterWorktree isolation + --model |
fix-issue | ineligible | Phase-4 agents use isolation: "worktree" to edit files |
assess | conditional | passes model=MODEL_OVERRIDE when --model set |
audit-full | n/a | single-context; only spawns are isolated refuters |
β 1 real fix (review-pr gets a fork-eligibility note + a "don't add model=/worktree" guard). The rest stay as-is by design β documenting that prevents a future "why isn't this forked?" churn.
π₯ shutdown_request β TeamDelete β what was actually stale
| location | was | now |
|---|---|---|
implement/β¦/agent-phases.md | "shutdown_request to all teammates + TeamDelete" | TeamDelete() only (it shuts down teammates; CC discourages shutdown_request) |
review-pr/β¦/agent-prompts-agent-teams.md | bad-example comment "# Missing shutdown_request calls!" | "# No teardown β needs TeamDelete()" (its Correct block was already right) |
explore/test-cases.json | eval fixture: "Sends shutdown_request messagesβ¦" | "Tears down with TeamDelete()β¦" (fixture matches current pattern) |
β The other ~7 files that mention shutdown_request were already warning against it β not stale. Left untouched.
The rule (for both)
fork: parallel agents with no model= and no worktree β CC shares the cached prefix. Adding either breaks it. Β· teardown: TeamDelete() gracefully stops all teammates β never originate shutdown_request.