AIToday
Large Language ModelsAI Business & IndustrySimon Willison's WeblogPublished: Aug 5, 2026, 10:00 JST5 min read

LLM 0.32 adds reasoning traces, server tools, new logging

LLM 0.32 adds reasoning traces, server tools, new logging

Key takeaway

  • LLM 0.32, released on August 4, 2026, is the largest update to the open-source LLM toolkit since its launch.

  • The new version adds visible reasoning traces from AI models, integrates server-side tools (like code execution and web search) from OpenAI and Anthropic, and overhauls the Python API to better reflect how language models actually process requests.

  • The changes address real developer friction: tools no longer need separate management, and a new content-addressable logging system prevents duplicate message JSON when building multi-turn interactions—crucial for building agent-like systems that loop over tools to achieve goals.

3 Key Points

  1. What happened

    Simon Willison released LLM 0.32, the largest update since the project's launch. The CLI now displays reasoning traces from reasoning models, supports GPT-5.6 as the default model (GPT-5.6 Luna), and integrates server-side tools from OpenAI (CodeInterpreter, WebSearch) and Anthropic (WebSearch, WebFetch, CodeExecution, AnthropicMCP). The Python API now accepts a model.prompt(messages=[]) parameter and exposes stream_events() to handle mixed response types (reasoning, text, tool calls, images).

  2. Why it matters

    The update bridges the gap between how LLMs actually work (request-per-turn with full message history) and how developers have been coding against them. Server-side tools eliminate the need to manage code execution or search separately—the model can call them directly as part of a single API request. The new logging uses a content-addressable store (modeled after Git) to avoid duplicate JSON when message sequences are appended across turns, making audit trails leaner for production systems.

  3. What to watch

    The llm-anthropic plugin (now at 0.26) adds support for the Claude 5 family, and llm-gemini, llm-openrouter, and llm-mistral updates are coming soon. Existing plugins will continue to work, but model-providing plugins need upgrading to 0.32 to use the new streaming events system. The release notes, including detailed guides for plugin implementation with Structured messages and streaming events, are published on the project's documentation.

In Depth

Read the full story

Simon Willison released LLM 0.32 on August 4, 2026, marking the most significant update to the project since its launch. The release centers on five areas: visible reasoning traces, server-side tools, a redesigned logging system, new models, and an overhauled Python API.

For command-line users, running LLM against reasoning models now displays their reasoning traces to standard error (the intermediate "thinking" steps), so they don't clutter the standard output piped to other tools. Users can suppress this with the -R/--hide-reasoning flag. The CLI now includes GPT-5.6 out of the box, with GPT-5.6 Luna set as the default for the llm "prompt" command. More significantly, LLM can invoke server-side tools provided by cloud platforms. OpenAI exposes CodeInterpreter and WebSearch as server-side tools; users can now run prompts like `llm --tool CodeInterpreter 'Show current python and SQLite versions'` without managing the execution environment themselves. The llm-anthropic plugin (version 0.26) adds WebSearch, WebFetch, CodeExecution, and AnthropicMCP, the last of which allows Anthropic's Claude to execute Model Context Protocol calls against external services (for example, querying a Datasette instance) within a single API interaction.

The Python API received a major redesign. Previously, developers had to create a conversation object and send messages one at a time—an abstraction that obscured how language models actually work, where each request includes the full message history. The new release introduces model.prompt(messages=[]) to work with complete message sequences directly, accepting helper functions like system(), user(), and assistant() to construct the message list. Additionally, LLM now exposes stream_events() to handle the diverse outputs modern models produce: reasoning text, output strings, tool calls, and image attachments. Developers can iterate over events and handle each type separately—for instance, printing reasoning in brackets while streaming regular text to stdout.

These changes enabled a new plugin, llm-chat-completions-server, which implements the OpenAI chat completions API as a local server. Users can install it, run `llm chat-completions-server --port 9000`, and then invoke prompts against that server using the new llm openai endpoint command. This approach pairs well with the llm openai endpoint tool, which lets users run one-off prompts against any OpenAI-compatible endpoint (such as Gemma 4 12B running locally in LM Studio) without persisting logs.

Logging was redesigned around a content-addressable message store inspired by Git. Instead of repeating full message JSON on every turn, the system stores unique messages by hash and references them by pointer, sharply reducing storage overhead for long conversation histories. The llm logs and llm logs --json commands automatically convert this internal format back into standard JSON for easy consumption.

Willison updated several plugins: llm-anthropic now supports the Claude 5 family plus the new server-side tools, and llm-gemini, llm-openrouter, and llm-mistral updates are forthcoming. Existing plugins remain compatible, though model-providing plugins must upgrade to 0.32 to use the streaming events system. Documentation includes guides for implementing plugins with Structured messages and streaming events.

Willison noted that the release blurs the line between a CLI toolkit and an agent framework. Many of the lower-level tool changes were driven by the needs of Datasette Agent, a system that runs tools in a loop to achieve goals. The new ability to pause tool chains for human approval and resume from stored message history supports this use case. With a CLI that can mix models, tools from different sources, and a Python library powerful enough to build systems like Datasette Agent and llm-coding-agent, LLM is "beginning to look very agent-shaped." Willison suggested the next version might bake the agent concept into the core library, though he is still exploring what that would entail.

Context & Analysis

LLM 0.32 represents a shift in how the toolkit models the developer experience around language models. The earlier abstraction—where users created a conversation and sent messages one at a time—hid the true nature of LLMs: each request carries a complete message history. As models evolved to return mixed response types (reasoning, text, tool calls, images), that abstraction became a bottleneck. The new model.prompt(messages=[]) parameter and stream_events() method expose this reality directly, giving developers fine-grained control over how they handle each chunk of output.

The integration of server-side tools is equally significant. Rather than forcing developers to manage code execution or search as separate concerns, tools like OpenAI's CodeInterpreter and Anthropic's MCP integration let models call them directly within a single API roundtrip. For developers building systems that loop tools to achieve goals—what Willison now calls "agents"—this eliminates orchestration overhead.

The content-addressable logging system deserves attention for production use. By storing only unique message fragments and referencing them by hash (like Git), the new schema drastically reduces duplicate JSON when messages are appended across turns. This matters for systems like Datasette Agent that maintain long conversation histories and need auditable logs.

FAQ

What is the default model in LLM 0.32?
The default model used with llm "prompt" is now GPT-5.6 Luna, described as inexpensive but capable.
What server-side tools are available?
OpenAI provides CodeInterpreter and WebSearch. The llm-anthropic plugin adds WebSearch, WebFetch, CodeExecution, and AnthropicMCP, which allows Claude to execute MCP (Model Context Protocol) calls against external services as part of a single request.
Do existing LLM plugins need to be updated?
Existing plugins will continue to work, but plugins that provide extra models need to be upgraded to 0.32 to participate in the new streaming events system.
Simon Willison's WeblogRead Original Article

Get the latest Large Language Models news every morning

AI-summarized, only the topics you pick — one digest a day via Email, Slack, or Discord.

Free · takes 30 seconds · unsubscribe anytime

Ask AI

Ask AI anything about this article. Q&As are published on this page for other readers too.

Related Articles

Next articleWhite House keeps AI vetting framework secret from public

The AI news that matters, in one minute each morning.

Sign up free