Interrupted Agent (subagent) dispatches return no partial-progress report — parent cannot distinguish "never ran" from "ran 19 minutes, stopped mid-action"
Environment
- Claude Code 2.1.223, macOS 15 (Darwin 25.5.0), terminal CLI
- Multi-agent orchestration: a driver session dispatching
Agenttool subagents (custom agent type, Sonnet)
What happens
When the user interrupts (Esc) while a foreground Agent dispatch is running — or rejects a permission prompt raised by one of the subagent's own tool calls — the parent session receives only a bare string as the tool result:
[Request interrupted by user for tool use], orThe user doesn't want to proceed with this tool use. The tool use was rejected …
Nothing else. No indication of how long the subagent ran, how many tool calls it made, or what it was doing when stopped.
Why this matters (real incident, 2026-08-05)
A driver dispatched a coder subagent that worked for 19 minutes (builds, file edits) before the user interrupted it. A second dispatch worked ~4.5 minutes and was interrupted at the exact moment it invoked a test tool that launched a GUI app onto the user's screen (that hijack is why the user hit Esc).
From the parent's viewpoint, both results were indistinguishable from "the dispatch never started". The driver — asked by the user "did you just launch that app?" — checked its envelopes, saw two interruptions, and honestly denied having launched anything, while the user was looking at the full-screen app one of those subagents had launched. The information needed to answer truthfully existed on disk (the subagent transcripts under ~/.claude/projects/<slug>/<session>/subagents/agent-*.jsonl) but was absent from the envelope.
Transcript evidence (timestamps from the on-disk .jsonl files):
| dispatch | subagent ran | last transcript row | "interrupted" envelope in parent |
|---|---|---|---|
| coder #1 | 20:36:39 → 20:55:13 | 20:55:13.155Z | 20:55:13.161Z |
| coder #2 | 22:46:05 → 22:50:45 | 22:50:45.631Z | 22:50:45.634Z (mid test_macos call) |
So the interrupt semantics themselves are correct (the agents did stop — this is not #83392, where a rejected dispatch keeps running). The defect is purely in reporting.
Expected
The interrupted/rejected result for an Agent dispatch should carry a minimal partial-progress summary, e.g.:
Interrupted by user after 19m 12s. The subagent made 21 tool calls (last:mcp__XcodeBuildMCP__test_macos); transcript:…/subagents/agent-a9d5….jsonl.
Duration + tool-call count + last action + transcript path would let a parent answer "what just happened?" truthfully, decide whether to re-dispatch with the partial work as context, and never mistake "stopped mid-action" for "never ran".
Related (checked before filing)
- #83392 — rejected foreground Agent call still runs and writes files (different: there the agent doesn't stop; here it stops but reports nothing)
- #70958 — subagent API 401 surfaced as "Request interrupted by user" (same envelope-opacity family, different trigger)
🤖 Generated with Claude Code
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗