Simon Willison shipped LLM 0.32 on August 4, calling it the most significant release since the project launched. Alongside it came llm-anthropic 0.26. Read the changelogs side by side and a pattern emerges: the CLI tool built on the assumption that an LLM is a function from string to string is being rebuilt around the fact that it isn’t, and hasn’t been for a while.
Three shifts, one theme
The headline features look like a grab bag — visible reasoning traces, server-side provider tools, redesigned content-addressable SQLite logging, new models, and features unlocked by OpenAI’s Responses API. They aren’t unrelated. Each one is a place where the text-in/text-out abstraction sprang a leak.
Reasoning traces are the obvious case. When a model spends most of its compute in tokens you never see, a tool that only surfaces the final answer is hiding the expensive part. Surfacing traces turns debugging from guesswork into reading.
Server-side tools are the more consequential change. llm-anthropic 0.26 adds WebSearch, WebFetch, CodeExecution, and AnthropicMCP, exposed through LLM’s existing -T interface. The detail worth noticing is what was removed: the old -o web_search* options are gone, folded into -T WebSearch. That’s a deliberate collapse of two categories — “tools I run locally” and “capabilities the provider runs for me” — into one. From the user’s side, a tool is a tool. Where it executes is the provider’s business.
That’s the right call, and it isn’t free. Provider-executed tools mean network calls and code execution happening outside your machine, on terms you don’t fully set. Unifying the syntax makes that boundary less visible precisely when visibility matters. The convenience is real; so is the tradeoff.
The logging change is the sleeper
Content-addressable SQLite logs will get less attention than the model names, and probably matter more. LLM has always logged every prompt and response to a local database — an underrated feature in an ecosystem where most tooling treats interactions as ephemeral. Making that store content-addressable means identical content is stored once rather than duplicated across every conversation that touches it. For anyone whose logs run to hundreds of megabytes of repeated system prompts and re-pasted context, that’s the difference between an archive and a liability.
It also hints at where this is heading. Once storage is keyed by content, deduplication is the easy win; the harder, more interesting one is being able to ask what actually changed between two runs.
Small tool, real signal
The new Anthropic models — claude-fable-5, claude-sonnet-5, claude-opus-5 — are two lines in a changelog and the least interesting part of the release. Model names churn. Abstractions don’t, and when one moves in a tool this widely used, it’s usually because the ground moved first.
LLM is a single-maintainer CLI, not a platform. That’s exactly why it’s a useful instrument: it has no incentive to paper over an abstraction that stopped fitting. This release is a data point on how much of the work has migrated to the provider’s side of the wire — and 0.32 is what adapting to that looks like in practice.