[BUG] Opus 4.7 tool calls fail with "The model's tool call could not be parsed (retry also failed)" since 2026-05-20
Preflight Checklist
- [x] I have searched existing issues and this is not a duplicate
- [x] I am filing a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Opus 4.7 assistant turns end with stop_reason: tool_use, but the response body contains no tool_use block — only thinking and text blocks. Claude Code injects Your tool call was malformed and could not be parsed. Please retry.; the retried response again contains no tool_use block, and the turn ends with:
The model's tool call could not be parsed (retry also failed).
The thinking-block signatures decode to a protobuf model-name field. Two distinct values appear: claude-opus-4-7 (a 15-byte length-prefixed string) and claude-quoll-v7-hr-fast-ab-high-p (a 33-byte length-prefixed string). This value changed by date. The table below is a full (not sampled) decode of every Opus 4.7 assistant response that has a thinking-block signature; 0 entries failed to decode:
| Date | claude-opus-4-7 | claude-quoll-v7-hr-fast-ab-high-p | retry also failed events | Please retry events |
|---|---|---|---|---|
| 05-19 | 174 (100%) | 0 | 0 | 0 |
| 05-20 | 8 | 45 | 0 | 4 |
| 05-21 | 0 | 491 (100%) | 29 | 70 |
Every malformed (no tool_use block) response decodes to claude-quoll-v7-hr-fast-ab-high-p.
The usage_speed field is standard for every Opus 4.7 response in this period, including all malformed ones. Across the entire local transcript DB (73,830 messages), the count of responses with usage_speed=fast is 0. /fast is unavailable on this account (no usage credits).
What Should Happen?
A response with stop_reason: tool_use must contain a tool_use block. Opus 4.7 tool calls produced no retry also failed events while the signature model-name value was claude-opus-4-7 (through 05-19).
Error Messages/Logs
# Injected by Claude Code after the response with no tool_use block:
Your tool call was malformed and could not be parsed. Please retry.
# Shown after the retried response again has no tool_use block:
The model's tool call could not be parsed (retry also failed).
Malformed assistant message shape (from decoded transcripts):
stop_reason=tool_use- content blocks =
thinking+textonly (notool_useblock) - thinking-block signature model-name field =
claude-quoll-v7-hr-fast-ab-high-p usage_speed=standard
Steps to Reproduce
- Use model = Claude Opus 4.7 (signature model-name field
claude-quoll-v7-hr-fast-ab-high-pas of 2026-05-21). - Run tasks that require multiple tool calls with extended thinking (file edits, bash, searches).
- The assistant intermittently returns
stop_reason: tool_usewith notool_useblock, which ends the turn withThe model's tool call could not be parsed (retry also failed).
On 2026-05-21 this produced 70 Please retry events and 29 retry also failed events. All 29 retry also failed events originate from Opus 4.7 responses; 0 originate from Sonnet 4.6 responses in the same period.
Claude Model
Opus (Claude Opus 4.7; signature model-name field claude-quoll-v7-hr-fast-ab-high-p)
Is this a regression?
Yes — it worked before.
Last Working Version
retry also failed events: 0 through 05-19, 0 on 05-20, 29 on 05-21. While the signature model-name value was claude-opus-4-7 (through 05-19) there were 0 such events. Claude Code was upgraded from 2.1.145 to 2.1.146 on 2026-05-21.
Claude Code Version
2.1.146
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
zsh
Additional Information
- Per-date signature model-name value (full decode),
usage_speed, and recorded failure events:
| Date | Opus 4.7 model-name value (decoded) | usage_speed | retry also failed | Please retry |
|---|---|---|---|---|
| 05-19 | claude-opus-4-7 (174/174) | standard | 0 | 0 |
| 05-20 | claude-opus-4-7 (8) + claude-quoll-v7-hr-fast-ab-high-p (45) | standard | 0 | 4 |
| 05-21 | claude-quoll-v7-hr-fast-ab-high-p (491/491) | standard | 29 | 70 |
- Decoding detail: the model name is a length-prefixed protobuf string field (
0x32, length0x0f=15 forclaude-opus-4-7;0x32, length0x21=33 forclaude-quoll-v7-hr-fast-ab-high-p). A trailing8seen in naivestringsoutput (e.g....-high-p8,claude-opus-4-78) is the next field's tag byte0x38, not part of the model name. - The 29
retry also failedevents on 05-21 by cwd: 18 across three same worktrees (14 + 3 + 1) and 11 in one more workspace; all are Opus 4.7 responses. usage_speedisstandardfor all responses;usage_speed=fastcount in the DB is 0;/fastis unavailable (no usage credits).- The internal meaning of the
claude-quoll-v7-hr-fast-ab-high-pvalue is not determinable from client-side data. - An exact malformed rate cannot be derived from the local transcript export:
tool_useblocks are not consistently persisted in the export (responses on 05-18/05-19, which had 0 failures, also show absenttool_useblocks in the export). Only Claude Code's recordedPlease retry/retry also failedevents are cited above.
5 Comments
Ref: https://github.com/anthropics/claude-code/issues/49747#issuecomment-4505052019
This issue is likely a duplicate of https://github.com/anthropics/claude-code/issues/49747#issuecomment-4505052019
Since this issue has already been closed as a duplicate, I'm recording this purely as a memo.
/compact.---Title (if new issue): [BUG] Regression: "tool call could not be parsed (retry also failed)" still occurs on Opus 4.8 + Claude
Code 2.1.158 (cf #61133)
Body:
▎ #61133 was closed (it covered Opus 4.7 / CC 2.1.146), but the identical failure signature still reproduces on Opus 4.8 +
▎ Claude Code 2.1.158 (macOS, effort level max).
▎
▎ Evidence from a local session transcript (~/.claude/projects/.../<session>.jsonl):
▎ - Failed turns — assistant message has stop_reason: "tool_use" but content blocks = ["thinking"] only; no tool_use block
▎ present (and no text block). The harness finds no tool call → injects "Your tool call was malformed... Please retry." →
▎ retries once → same broken shape → surfaces "The model's tool call could not be parsed (retry also failed)." Reproduced 8
▎ times in a single session.
▎ - Successful turns — same stop_reason: "tool_use" but content blocks include an actual tool_use block.
▎ - message.model = claude-opus-4-8 on both failed and successful turns (the transcript does not persist the internal routing
▎ signature, so I can't confirm the claude-quoll-* model-name correlation noted in #61133).
▎ - Correlation: every failed turn began with a thinking block; tool-use turns without a thinking block (and one
▎ thinking+text+tool_use turn) all succeeded — consistent with the tool_use block being dropped after the thinking block
▎ (interleaved thinking + tool use).
▎
▎ Env: Claude Code 2.1.158, model claude-opus-4-8, macOS (Darwin 25.5.0), effort level max.
▎
▎ Please consider reopening / investigating this as a regression.
---
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.