LLM 0.32 puts reasoning on stderr and tools on the server
Sending reasoning to stderr sounds like a trivial choice. It is the reason the whole thing still composes in a shell.

Published
July 24, 2026
Reading time
2 minutes
Perspective
Engineering
Topics
tooling · reasoning · open-source
Simon Willison released LLM 0.32 on 4 August 2026, calling it "the most significant new version of LLM since the initial launch."
Three changes stand out, and one of them is a design decision worth copying.
Reasoning on stderr
The model's reasoning goes to standard error. The answer goes to standard output.
That single choice is what keeps the tool composable. You can pipe the output into another command and get the answer, not a transcript — while still watching the reasoning scroll past in your terminal.
llm "think about the best thing about pelicans"
Anything that mixed both into stdout would break every pipeline it appeared in. This is old Unix discipline applied correctly to a new kind of program, and most AI tooling gets it wrong.
Server-side tools
Tools now execute on the provider's servers rather than locally:
llm --tool CodeInterpreter 'Show current python and SQLite versions'
with WebSearch available across both OpenAI and Anthropic models.
The trade is real and worth being deliberate about. You lose local control over what runs, and gain not having to sandbox a code interpreter yourself — which, given what we have learned this week about evaluation environments reaching real systems, is not a trivial thing to hand off.
Content-addressable logging
Multi-turn conversations previously logged duplicate JSON on every turn. 0.32 introduces "a content-addressable message store, modeled after Git."
Unglamorous and exactly right. Anyone who has run a long extraction job and watched the log outgrow the corpus will recognise the problem.
Willison's own read
An LLM agent runs tools in a loop to achieve a goal
— now, he notes, established enough to use the term without hedging. And on the release itself: LLM "is beginning to look very agent-shaped," able to "mix and match different tools from different sources with different models all as a one-liner."
That composability is the actual argument for a CLI over an app. A one-liner goes in a script; a script goes in cron; the whole thing becomes reproducible in a way a chat session never is.
The caveat on reasoning traces
A trace is not necessarily the computation. Models can produce plausible post-hoc rationales that do not reflect what drove the answer, and this is well documented.
Use traces as evidence — strong when they name a specific factual error you can check independently, weak when they narrate a chain you cannot. The failure mode is a confident trace attached to a wrong answer.
Continue reading