LLM agents will happily produce a thousand lines of plausible Markdown describing work that doesn't compile, isn't tested, and contradicts a decision the same agent wrote down two files earlier. If you want to review their output without re-reading every paragraph, some of the work product has to be machine-checkable.
You also can't push everything into a schema. Intent, trade-offs, the alternative you rejected: that material dies in JSON. The interesting question is the boundary. What belongs in prose, what belongs in structure, and what falls out when you draw the line in the wrong place.
Here is what we landed on after running it for real, and what we had to add when flat files stopped scaling.
The split
Every unit of agent work produces three things:
Narrative. Markdown specs, designs, plans, notes. The human-readable record: intent, trade-offs, what was rejected, context a future reader needs.
Structure.…