Skip to content

AI_APICallError: tool_use ids were found without tool_result blocks immediately after #1662

Closed

Description

@ShamanicArts

On claude pro - sonnet 4

AI_APICallError: messages.13:
`tool_use` ids were found without
`tool_result` blocks immediately
after:
toolu_01CfJCsh21fK1pAXsXWYJYBA,
toolu_01NoqnwsaxoK3AYM2FyrxmjN.
Each `tool_use` block must have a
corresponding `tool_result` block
in the next message.

happpens regularly . conversation cannot be continued without switching to a different model

https://opencode.ai/s/gkaS8vZY

ubuntu via WSL

Activity

  1. self-assigned this
    on Aug 7, 2025
  2. AnsgarH1 commented on Aug 18, 2025

    @AnsgarH1

    I also got the error on MacOS with OpenCode v0.5.5

  3. rekram1-node commented on Aug 18, 2025

    @rekram1-node
    Collaborator

    did this happen after an abort or something? Like you aborted a request then tried to continue convo?

  4. ShamanicArts commented on Aug 18, 2025

    @ShamanicArts
    Author

    did this happen after an abort or something? Like you aborted a request then tried to continue convo?

    this commonly seems to be a trigger, but is not the sole trigger. it can occur randomly. it can be mitigated by undoing to the message before the message which triggers this error

  5. esafak commented on Aug 29, 2025

    @esafak
    Contributor

    I am getting this error on 0.5.28 with opus 4.1 as the planning agent. I exited and restarted opencode and the problem persisted after resuming the session.

    I suspect there is 'corruption' in the history as I can also trigger this error by running /compact after it occurs.

  6. namchuai commented on Nov 21, 2025

    @namchuai

    I'm also faced this issue

    messages.453: `tool_use` ids were found without `tool_result` blocks immediately after: toolu_01BmQLHErsVFKDSd51CUnUXg. Each `tool_use` block must have a corresponding `tool_result` block in the next message.
    

    Edit 1:
    Switching other model (to Claude Opus 4.1) does not help.

  7. rekram1-node commented on Nov 21, 2025

    @rekram1-node
    Collaborator

    Yeah this is a bug with the anthropic api itself it sends back duplicate content or something and messes up the state of the client.

    We can fix it on our end its just a little messy reordering things all the time

  8. sawy3r commented on Dec 15, 2025

    @sawy3r

    I'm also facing this one, it's happening across at least Sonnet 4, Sonnet 4.5 and Opus 4.5. I'm seeing it when the agent reads a pdf file (in the same project). Once this happens it corrupts the conversation, I need to undo the prompt that caused it, and can then continue, but to no avail to read the PDF and get past that point. Switching to a non-Anthropic model of course enables it to proceed (as the error is being returned from the Anthropic API). I can then switch back to the Anthropic model and continue, so there is a workaround albeit not ideal!

    Running opencode binary version 1.0.157 on MacOS

  9. rekram1-node commented on Dec 16, 2025

    @rekram1-node
    Collaborator

    @sawy3r now that's interesting would u be able to share your session reproducing that?

    opencode export > session.json

  10. sawy3r commented on Dec 17, 2025

    @sawy3r

    @sawy3r now that's interesting would u be able to share your session reproducing that?

    opencode export > session.json

    Sure can!

    See attached, I've redacted it slightly and truncated the PDF base64 data that was included (I've also attached the PDF for your reference as well. It happens with any I try at the moment).
    I set this session up to attempt to replicate it, and it happened right away at the first prompt, where I asked the agent to read a PDF.

    sessionNew-redacted.json
    AI_APICallError_ tool_use ids were found without tool_result blocks immediately after · Issue #1662 · sst_opencode.pdf

  11. tagpro commented on Dec 20, 2025

    @tagpro

    ctrl+x u will undo the previous message. Undo until the error message disappears from the chat. This can happen when a message response was interrupted and the result from the message wasn't created. So, undo until chat history is at a good stage and then continue again.

  12. soapergem commented on Feb 6, 2026

    @soapergem

    I'm also getting this same error quite a lot lately, on Claude Sonnet 4.5

  13. drewesk commented on Feb 26, 2026

    @drewesk

    ctrl+x u will undo the previous message. Undo until the error message disappears from the chat. This can happen when a message response was interrupted and the result from the message wasn't created. So, undo until chat history is at a good stage and then continue again.

    thanks for saving my life @tagpro

  14. mmack commented on Mar 6, 2026

    @mmack

    same here

  15. ArchishmanSengupta commented on Mar 26, 2026

    @ArchishmanSengupta

    is this solved?

  16. liqiyuan3 commented on Apr 7, 2026

    @liqiyuan3

    Adding detailed diagnostics from my investigation:

    Root Cause

    When a tool call is interrupted (network timeout, proxy error, abort), OpenCode records the tool_use block but does NOT insert a corresponding tool_result block. This permanently corrupts the session — every subsequent message is rejected with the tool_use without tool_result validation error.

    Key Evidence

    The error fires 1-4ms after user_message, proving it's a pre-request validation failure, not a network issue:

    Compounding issue: session.error often fires with an empty error field, and the TUI shows zero feedback. The user sees a silent hang with no indication of what happened.

    Suggested Fix

    Always insert a synthetic tool_result with error status when a tool_use does not complete, regardless of the interruption cause. This maintains Claude API message format compliance and prevents permanent session corruption.

    Workaround

    I wrote a plugin that hooks session.error, scans all messages for orphaned tool_use blocks (pending/running state), and calls session.revert() to remove the broken message. Combined with tui.showToast() to surface the error. Happy to share if helpful.

    Environment

    • Windows 11, OpenCode latest (CLI + Desktop)
    • Provider: API proxy → AWS Bedrock → Claude Sonnet 4 / Opus 4
    • Frequency: Multiple times daily, especially in sessions with many tool calls
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions