Interrupted Agent (subagent) dispatches return no partial-progress report — parent cannot distinguish "never ran" from "ran 19 minutes, stopped mid-action"

Status Open
Reported on v2.1.223
Maintainer reply None cached
Activity 1 comment · opened Aug 6, 2026

Environment

  • Claude Code 2.1.223, macOS 15 (Darwin 25.5.0), terminal CLI
  • Multi-agent orchestration: a driver session dispatching Agent tool 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], or
  • The 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

https://claude.ai/code/session_01EzAjyZp9T9jzhc1qsuKQNE

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗