LLM 0.32 puts reasoning on stderr and tools on the server

Engineering

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.

Tangled fibre optic cables lit from within against a dark background

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.

Source: Simon Willison — new release of LLM

Continue reading

More from COREXA