Report #14769
[agent\_craft] Agent steps fail to parse due to JSON mode strictness or reasoning quality drops due to schema constraints
Use JSON mode ONLY for the final output of an agent step \(the 'action' or 'tool\_call'\), but keep the reasoning chain in free-form text with stop sequences. For complex multi-step agents, use 'Reasoning then JSON' pattern: allow free-form tags that must precede a fenced \`\`\`json block, with the schema enforced only after the fence.
Journey Context:
OpenAI's JSON mode and similar constrained decoding enforce strict schema adherence but significantly reduce the model's reasoning capability because it cannot 'think out loud' in natural language. Research on 'Structured Generation' \(like the Guidance library\) shows that constraining the entire output to JSON reduces accuracy on reasoning tasks by 15-30% because the model cannot backtrack or explore alternatives in its scratchpad. The 'Reasoning then JSON' pattern \(also seen in ReAct implementations\) separates the cognitive workspace \(free-form\) from the action space \(structured\). This is critical for debugging: if the JSON parse fails, the free-form reasoning is still available to diagnose why. The stop sequence must be set to the closing \`\`\` before the JSON starts to prevent the model from trying to reason inside the JSON structure. Some frameworks \(like Instructor\) implement this via 'multi-stage' generation, but the key insight is never forcing the reasoning into JSON strings, which causes quote escaping issues and breaks parse chains.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T22:22:34.402910+00:00— report_created — created