feat: add subagent-model-reconciliation skill#1496
Conversation
When the orchestrator runs on a top-tier model, subagents dispatched
without an explicit `model:` parameter often silently inherit it. That
is almost never what implementer/reviewer/Explore subagents need —
mid-tier work was getting top-tier inference for no quality gain.
Verified gap (against superpowers 5.1.0 plugin cache):
$ grep -rE "subagent_type|model:|sonnet|haiku|opus" skills/
(no matches — zero of 14 SKILL.md files pin a model)
Adds a new shared skill, `subagent-model-reconciliation`, that fires
after planning is complete and before the first subagent dispatch:
1. Detect the orchestrator's current model.
2. If it's the provider's top tier, look up the current mid-tier
for that provider at decision time (web search / provider docs)
rather than relying on training-data memory — model lineups shift.
3. If the mid-tier differs from the orchestrator's model, confirm
with the user before dispatching.
4. Cache the answer for the rest of the plan execution.
5. Pass `model:` explicitly on every dispatch.
Provider-agnostic by design: the skill prose names categories
(top-tier / mid-tier) and describes the lookup, but never hardcodes
"sonnet" / "gpt-5" / "flash" etc. Dispatch examples use the placeholder
`<mid-tier model for current provider>`.
Wires the new skill into the three flows that fan out to subagents:
- subagent-driven-development — adds a "Reconciliation Before First
Dispatch" subsection under Model Selection; updates implementer /
spec-reviewer / code-quality-reviewer prompt templates to carry
a `model:` field.
- dispatching-parallel-agents — references reconciliation before the
parallel fan-out example; updates the example to show `model:` on
each Task call.
- executing-plans — adds a Step 2 reconciliation gate (only when the
plan dispatches subagents; inline-only execution skips it).
- requesting-code-review — notes that code review is mid-tier work
and should pass `model:` explicitly.
README's Skills Library entry added.
Open questions for upstream:
- Should reconciliation be its own skill (current proposal) or
inlined into each executor skill? Shared skill reduces duplication
but adds one more skill to the library; library notes the
maintainer prefers tight surface area.
- Harnesses that don't expose per-dispatch model selection currently
get a "stop and surface to the user" instruction. Is that right?
|
I like the direction of this PR. Preventing subagents from silently inheriting the main/orchestrator model is exactly the problem I’m trying to solve in my own workflow. My current approach is to define role-specific subagents instead of relying only on model reconciliation at dispatch time. For example, I use separate agents such as Then, when the main agent runs
I think this approach is flexible because the model choice becomes part of the agent definition, not just something selected dynamically during dispatch. It also makes it easier to tune permissions per role, such as giving the implementer write access while keeping reviewers read-only. A simpler option for users who do not want to create multiple agents would be to define a single So there may be two useful patterns to support or document:
Both avoid the same issue: subagents should not accidentally inherit the expensive model used by the main agent. |
What problem are you trying to solve?
When an orchestrator runs on a top-tier model (Opus on Claude, the flagship reasoning model on OpenAI/Codex, Pro on Gemini, etc.), subagents dispatched by the existing executor skills frequently inherit that same top-tier model. Implementer / spec-reviewer / code-quality-reviewer /
Exploresubagents are mid-tier-appropriate roles, so this burns top-tier inference on rote work — slow and expensive, with no quality gain.The gap is that none of the existing executor skills pin a model on dispatch. Verified against superpowers 5.1.0:
Concretely: an Opus orchestrator running
subagent-driven-developmentwill dispatch implementer subagents that also run on Opus unless the orchestrator manually addsmodel:on every dispatch. None of the skills tell it to do that.What does this PR change?
Adds a new shared skill,
subagent-model-reconciliation, that fires once after planning is complete and before the first subagent dispatch. It detects the orchestrator's current model, looks up the current mid-tier model for the provider at decision time, asks the user to confirm, caches the answer for the rest of the plan run, and pinsmodel:on every subsequent dispatch. The three executor skills (subagent-driven-development,dispatching-parallel-agents,executing-plans) andrequesting-code-revieware updated to invoke this step; the dispatch example indispatching-parallel-agentsand the prompt templates insubagent-driven-developmentare updated to showmodel:on each Task call.Is this change appropriate for the core library?
I think so — it is general-purpose, not project-specific, and not third-party. It applies to every Superpowers user whose harness supports per-dispatch model selection (Claude Code, Codex, Copilot CLI, etc.) and whose orchestrator runs on the provider's top tier. That's a large fraction of real usage. It is not a new domain skill or workflow tool integration; it is plumbing that closes a default-inheritance gap in the existing executor skills. The README contributing notes mention the project doesn't generally accept new skills, so I'd be equally happy to inline the reconciliation behavior into each executor skill if that's preferred — see "What alternatives did you consider?" below.
What alternatives did you consider?
model: "sonnet". Rejected — Superpowers ships across providers and provider lineups shift fast. The skill instead names categories (top-tier / mid-tier) and instructs the agent to look up the current name at decision time, with the dispatch examples using a placeholder (<mid-tier model for current provider>) rather than a literal name.model:themselves. Rejected because the gap is silent: the orchestrator only notices after the bill arrives. The discipline needs to live in the skill prose.Does this PR contain multiple unrelated changes?
No — single concern: subagent model selection. The README entry, the new skill, and the executor-skill updates are all part of wiring this one behavior in. I have not touched the Red Flags tables, rationalizations, or "human partner" language.
Existing PRs
Environment tested
New harness support
Not applicable — no harness added.
Evaluation
Honest disclosure: this PR is opened in DRAFT and has not been adversarially eval'd yet. I'm publishing it now to get maintainer feedback on the approach (shared skill vs. inlined; provider-agnostic prose vs. concrete examples) before investing in the full pressure-test cycle that
writing-skillscalls for. Specifically:requesting-code-review.If the approach looks right, I'll add the eval evidence before this leaves draft. If the approach is wrong, the eval work would be wasted on the wrong design.
Open questions for upstream maintainers:
writing-plans(so the plan itself records the chosen model)? Currently it fires only from the executor skills.Rigor
superpowers:writing-skillsand completed adversarial pressure testing — NOT YET, see Evaluation above. Will complete before leaving draft.Human review