[BUG] Parallel Task calls: Claude states intent for 16 but only emits 1; stop_reason: null on all messages
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
When asking Claude to launch 16 parallel Task tool calls, Claude:
- States "Let me launch all 16 agents in parallel"
- Only emits 1 Task call instead of 16
- Session transcript shows
stop_reason: nullon all 32 assistant messages (should be "tool_use" or "end_turn") - The Task message shows
output_tokens: 1but contains a ~2000 token prompt (impossible)
The session transcript shows clear intent-execution mismatch: Claude said it would do 16 parallel Tasks but only generated 1.
What Should Happen?
- Claude should emit 16 Task calls in a single assistant message when asked
stop_reasonshould be "tool_use" when tool calls are presentoutput_tokensshould accurately reflect the actual output length
Error Messages/Logs
**Task message showing anomalous token count:**
{
"message": {
"content": [
{
"type": "tool_use",
"name": "Task",
"input": {
"subagent_type": "general-purpose",
"description": "Auth & access control audit",
"prompt": "[~2000 tokens of prompt content]"
}
}
],
"stop_reason": null,
"usage": {
"output_tokens": 1
}
}
}
**All assistant messages have null stop_reason:**
06:30:12 - stop_reason: null - content_types: ["thinking"]
06:30:12 - stop_reason: null - content_types: ["tool_use"]
06:30:18 - stop_reason: null - content_types: ["thinking"]
06:30:19 - stop_reason: null - content_types: ["text"]
[... 28 more messages, ALL with stop_reason: null ...]
Steps to Reproduce
- Create a workflow that requires 16 parallel Task calls
- Ask Claude to launch all 16 agents in parallel
- Observe: Claude states intent to launch 16 but only 1 Task appears
- Check session transcript:
- All
stop_reasonvalues arenull - The Task message shows
output_tokens: 1despite ~2000 token content
Session transcript location:~/.claude/projects/[project]/419e58d7-0445-4172-873e-18bee28c2d2a.jsonl
JQ commands to verify:
# Check stop reasons (all should NOT be null)
jq -r 'select(.type == "assistant") | .message.stop_reason' "$SESSION_FILE" | sort | uniq -c
# Check Task call details
jq 'select(.type == "assistant" and (.message.content[]? | select(.type == "tool_use" and .name == "Task"))) | .message.usage.output_tokens' "$SESSION_FILE"
# Verify only 1 Task was called
jq -s '[.[].message.content[]? | select(.type == "tool_use" and .name == "Task")] | length' "$SESSION_FILE"
# Returns: 1 (should be 16)
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.29
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Timeline of the session:
| Time (UTC) | Event |
|------------|-------|
| 06:30:09 | User asks to launch 16 parallel agents |
| 06:30:26-35 | Claude reads 19 files sequentially (not parallel) |
| 06:30:45 | Claude says "Let me launch all 16 agents in parallel" |
| 06:31:31 | Only 1 Task call emitted |
| 06:32:24 | User interrupts |
Key anomalies:
- Intent vs Execution Gap: Claude explicitly stated it would launch 16 agents in parallel, but only 1 Task appeared in the message
- Universal null stop_reason: Every assistant message in the session has
stop_reason: null— this is abnormal - Token count mismatch:
output_tokens: 1for a message containing ~2000 tokens of content
This could indicate:
- A streaming/logging bug where partial responses are logged
- Token counting error at the API level
- Response truncation without proper stop_reason
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗