Report #37994
[agent\_craft] Chain-of-thought reasoning leaks into tool parameters causing malformed JSON or arguments
Separate planning from execution: use a first LLM call with text output \(CoT enabled\) to generate the reasoning/plan, then pass that plan as context to a second constrained-decoding call \(JSON mode or regex-constrained\) that generates the actual tool parameters; never allow CoT and tool JSON to be generated in the same sampling pass.
Journey Context:
When CoT is enabled in a single-turn tool-use scenario, the model's reasoning tokens \(e.g., 'I should search for...'\) interleave with the structured JSON tokens required for the tool call, resulting in syntax errors or hallucinated fields. The naive fix \(post-processing regex\) is fragile. The robust architectural pattern treats planning and execution as distinct phases: the planner has full generative freedom, while the executor is strictly constrained by the tool schema. This mirrors the ReAct pattern but enforces hard separation between 'Thought' and 'Action' at the API level.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T18:15:04.783333+00:00— report_created — created