Skip to content

subagent-driven-development: naming the implementer for fix-loop resume silently switches it to teammate mode, breaking automatic report delivery #2140

Description

@cunderw
  • I searched existing issues and this is not a duplicate

Environment (required)

Field Value
Superpowers version 6.2.0 (version the mechanism was confirmed on this session). Upgraded to 6.3.0 immediately after; based on the diff the root cause looks unaddressed there too, but that's inference — not independently re-reproduced on 6.3.0.
Harness (Claude Code, Cursor, etc.) Claude Code
Harness version 2.1.226
Your model + version Claude Sonnet 5 (claude-sonnet-5) — this is the model that ran the investigation and reproduced the general mechanism below. The original operational observation that prompted this (an SDD run appearing to hang) was made by the user in an earlier, separate session not captured in a transcript I have access to.
All plugins installed chrome-devtools-mcp, code-simplifier, commit-commands, dart-lsp@michelsciortino-marketplace, figma, firebase, gopls-lsp, lua-lsp, skill-creator, superpowers, swift-lsp, typescript-lsp
OS + shell macOS (Darwin 25.5.0), zsh

Is this a Superpowers issue or a platform issue?

  • I confirmed this issue does not occur without Superpowers installed

Deliberately unchecked, not overlooked: the underlying mechanism — giving an Agent call a name: (no TeamCreate involved) switches it into teammate mode, where completion arrives as a content-free idle_notification instead of an automatic report — is pure Claude Code platform behavior. It reproduces with zero Superpowers involvement (see the transcript below, which is an unrelated research-dispatch agent, not SDD). So the mechanism is not a Superpowers bug.

What I think is a Superpowers-actionable gap: subagent-driven-development's fix loop requires resuming the same implementer across rounds 1-3, which in practice means dispatching it with name: — and the skill's text never accounts for the platform behavior that choice triggers. The fix belongs in the skill's instructions (tell the orchestrator to expect and solicit the report), not in the platform.

What happened?

subagent-driven-development's "Dispatch the implementer" step says: "Record the implementer's agent identity from the dispatch result — fix-loop rounds 1-3 resume this agent." Making an agent resumable this way means dispatching it with name: set. In Claude Code, naming an Agent call — independent of TeamCreate — switches it into teammate mode: its completion is delivered as a content-free idle_notification, not the automatic final-text report a plain anonymous background Agent gets. It only reports anything once it explicitly calls SendMessage. The skill's "Handle the report" section ("Implementer subagents report one of four statuses. Handle each appropriately") is written as if the report just arrives — there's no instruction telling the orchestrator that a named/resumable implementer requires soliciting it explicitly.

v6.3.0's new "Waiting on dispatched subagents" section ("chase any that finished without reporting") is a reasonable general mitigation, but it's reactive polling advice — it doesn't name why this happens for SDD specifically, so a reader has no way to know the trigger is the resume requirement itself.

Steps to reproduce

  1. (Directly reproduced this session, not SDD-specific) Call the Agent tool with name: set and run_in_background: true, with no TeamCreate anywhere in the session. Wait for it to finish its assigned work.
  2. Observe that the caller receives an idle_notification teammate-message carrying no content — not the automatic full-report delivery a plain unnamed background Agent call produces on completion.
  3. Nothing further arrives until the caller explicitly SendMessages the agent asking it to report.
  4. (SDD-specific path, source-derived from SKILL.md, not independently re-run in a logged session) Run subagent-driven-development on a plan where a task's review fails, triggering a fix-loop round. Per the skill's own instructions, the implementer is dispatched in a way that allows it to be resumed by identity for rounds 1-3 — which in practice means naming it. The same idle/silent-completion behavior in steps 2-3 should apply to that implementer.

Expected behavior

Either: the skill explicitly tells the orchestrator that a named/resumable implementer will not report automatically and to solicit it via SendMessage right after dispatch — or the resume requirement is satisfied some other way that doesn't trigger teammate mode at all.

Actual behavior

The implementer (or, in the directly-reproduced general case, any named Agent) finishes its work and goes idle. Nothing is delivered to the orchestrator automatically. Following the skill's text as written, an orchestrator has no reason to expect this and simply waits — which is what "hangs."

Debug log or conversation transcript

Directly reproduced this session (unrelated research-dispatch agent, not SDD — demonstrating the general platform mechanism):

Another Claude session sent a message:
<teammate-message teammate_id="teams-terminal-research" color="blue">
{"type":"idle_notification","from":"teams-terminal-research","timestamp":"2026-08-13T04:13:19.525Z","idleReason":"available"}
</teammate-message>

No content, despite the agent having already completed its assigned task — confirmed only by explicitly sending it a follow-up SendMessage asking for its findings, which then produced the real report.

SDD-specific citation (not an independent repro — the exact line in the currently-installed SKILL.md that creates the requirement):

- Record the implementer's agent identity from the dispatch result —
  fix-loop rounds 1-3 resume this agent.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions