Workflow tool: run reports 'completed' with no degradation signal when most agents die on session rate limit (15/22 dead → silently null)
Environment
Claude Code CLI on Linux, model claude-fable-5, Workflow tool (multi-agent orchestration), 2026-07-10.
What happened
An adversarial-review workflow spawned 22 agents (4 finders + 18 verifiers). Partway through, the
account hit its session limit: every in-flight verifier's transcript ends with
"You've hit your session limit · resets 7:30pm" and those agent() calls resolved to null
(documented behavior). The workflow then ran to completion and the harness surfaced a normal
"Dynamic workflow … completed" notification.
Net effect: the orchestrating session received a "completed" review in which 15 of 18
verification agents never ran — findings passed through unverified with zero indication of
degradation. The journal (journal.jsonl) shows 22 started events but only 7 result events;
the dead agents get no terminal journal event at all (no error/aborted record), so even
forensic reconstruction has to open individual agent-*.jsonl transcripts to discover the cause.
Why this matters
null-on-terminal-error is fine per-call, but the RUN-level contract is misleading: "completed"
with a majority-dead agent fleet is a silent-degradation false success. Scripts that.filter(Boolean) (the documented pattern) actively hide the loss.
Suggested fix (any of, ideally all)
- Completion notification includes an agent casualty summary when any agent died on a terminal
API error: "completed (DEGRADED: 15/22 agents failed — rate limit)".
- Journal writes a terminal event (
{"type":"error","agentId":…,"reason":"rate_limit"}) for
every started-but-dead agent, so started events always pair with a terminal record.
- Expose the count programmatically in the workflow result envelope (e.g.
agents_failed: 15)
so orchestrators can gate on it, and/or pause-and-resume the run when the limit resets instead
of burning the remaining stages.
Repro sketch
Run a workflow with ~20 parallel agent() calls near a session-limit boundary; observe the
completion notification and journal once the limit trips mid-run.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗