design(bin): research had a fan-out design its allowed-tools never permitted #116
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
plugins/bin/.apm/skills/research/SKILL.mddeclaredallowed-tools: WebSearch, WebFetch, Read, Write, mcp__context7__resolve-library-id, mcp__context7__query-docswhile steps 4 and 5 instructed the agent to "spawn one subagent per URL". No tool in that list spawns anything.Because
WebFetchis granted the skill never hard-failed — it silently degraded to serial orchestrator fetches. Three things then quietly stopped meaning anything:This predates the ADR-0020 retrofit — it is identical in the pre-retrofit file. The #99 wave-3 pass resolved it conservatively, rewriting steps 4 and 5 as honest serial
WebFetchreads with the page cap as a real budget, and deleting the now-vacuous Gotcha. No tool was added, because tool names differ across this package's three targets (claude,copilot,codex) and guessing one is worse than an honest serial procedure.Why this still needs a decision
The fan-out was not only about concurrency. It was summarisation before return: each subagent reduced a page to notes, and only the notes came back. Serially, up to fifteen fetched documentation pages accumulate raw in the orchestrator's own context — and that same context then has to hold all of them while writing seven topic files. That is precisely the failure the fan-out existed to prevent.
The retrofit mitigated it as far as prose can: steps 4 and 5 now instruct reducing each page to notes before the next fetch. That is a real mitigation, not a fix — it depends on the agent's compliance rather than on context isolation.
What is missing
Confirmed while resolving this: no skill in the 39-skill corpus declares a subagent-spawning tool. There is no house precedent to copy and no established answer to:
claude,copilot, andcodex, andallowed-toolsis a flat list with no per-target form.plugins/*/.apm/agents/) which delegates to skills, matching the delegation-discipline split inCONTEXT.md. Under that readingresearch's fan-out was always misplaced and the serial rewrite is the correct end state, not a stopgap.Option 2 looks more likely to be right, which is another reason not to have guessed a tool name.
Files
plugins/bin/.apm/skills/research/SKILL.md— steps 4-5, now serialCONTEXT.md— "Delegation discipline", the agent/skill split this turns onRelated
Found during #99 wave 3. See also #115 (a dead flag in a bundled validator) — same shape: a declared capability that never did anything, invisible because the failure was silent.
Claude referenced this issue2026-09-21 07:20:14 +00:00