Report #5682
[agent\_craft] Agent fails to recognize tool output because it is injected as an assistant message instead of a tool message
Append successful tool results as 'tool' role messages with the corresponding tool\_call\_id, not as 'user' or 'assistant' messages, to maintain the conversation protocol
Journey Context:
There is confusion in agent frameworks about how to present tool outputs back to the LLM. Some treat tool output as a 'user' message \('The tool returned...'\), others as an 'assistant' message. Both are incorrect. The OpenAI/Anthropic protocol expects a distinct 'tool' message type \(or 'tool\_result' block\) containing the tool\_call\_id and the output string. Using user/assistant roles causes the model to \(1\) ignore the output because it doesn't correlate with its tool\_call\_id, or \(2\) hallucinate that it must respond to a 'user' query rather than continuing the tool workflow. The correct pattern is to construct the message list as: System -> User -> Assistant \(with tool\_calls\) -> Tool \(with tool\_call\_id and output\) -> Assistant.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T21:52:05.062676+00:00— report_created — created