AI & DevelopmentDeveloper Tools

LLM 0.32: Reasoning Traces and Server-Side Tools

Terminal window showing LLM CLI reasoning traces and Git-style conversation tree

Simon Willison shipped LLM 0.32 on August 4 and called it “the most significant new version since the initial launch.” That’s not a throwaway line. The CLI tool that lets you query any language model from your terminal — OpenAI, Anthropic, Google, Mistral, and 50-plus others through plugins — gets four meaningful upgrades in this release: visible reasoning traces that don’t break pipelines, server-side provider tools, OpenAI Responses API support for GPT-5.x models, and a Git-style content-addressable log store. If you’ve been sleeping on LLM CLI, this release is the right moment to take another look.

Reasoning Traces Now Stream Where They Belong: Stderr

This is the change you’ll notice immediately. When you run a reasoning-capable model, LLM 0.32 now shows the model’s thinking process in dim text on stderr while the actual response goes to stdout. That separation matters.

Before this release, reasoning traces were invisible — you got the final output with no window into how the model got there. Now you see the thought process in your terminal without polluting your pipeline:

# Reasoning streams to stderr (dimmed); clean output to stdout
llm prompt "explain this regex: ^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"

# Pipe the output safely — reasoning stays in terminal
llm prompt "write Python to flatten a nested dict" | python

# Don't want to see it? Suppress it.
llm prompt "write a bash one-liner to count files by extension" -R

The -R / --hide-reasoning flag works on both llm prompt and llm chat. For anyone who has wanted to debug why a model gave a strange answer, this is the feature that makes it possible without rearchitecting anything.

The Hidden Gem: Git-Style Logs

Most release coverage will focus on the reasoning traces. The content-addressable log store deserves equal attention.

Until now, LLM stored every response as a full JSON blob in SQLite. A 20-turn conversation got logged 20 times — the entire history repeated in each entry. For power users who log everything, that adds up fast.

LLM 0.32 rebuilds this with content-addressable hash IDs, modeled after Git objects. Each message gets stored once and referenced by hash. The result: no duplicate JSON, a smaller database, and the ability to represent forked conversations as a tree rather than a flat list.

A new message_tree SQL view renders each conversation thread as an indented outline. If you want to explore your conversation history directly:

# Find your LLM database path
llm logs path

# Open it and explore branches
sqlite3 $(llm logs path) "SELECT * FROM message_tree LIMIT 20;"

# Standard log commands still work
llm logs
llm logs --json

Existing data in the old responses table is untouched. New interactions write to the new tables. No migration headaches.

OpenAI Responses API and a Smarter Default Model

GPT-5.x reasoning models — including o1, o3, o4-mini, gpt-5, and the full gpt-5.1 through gpt-5.5 range — now route through OpenAI’s /v1/responses endpoint instead of /v1/chat/completions. This enables interleaved reasoning across tool calls, which the older endpoint doesn’t support properly.

LLM 0.32 also ships built-in support for the full GPT-5.6 family (Sol, Terra, Luna). More immediately: the default model changes from gpt-4o-mini to gpt-5.6-luna. Running llm "hello" out of the box now hits a meaningfully more capable model at a cost tier that’s still cheap. No config change required.

Server-Side Tools

LLM 0.32 adds support for server-side provider tools — built-in capabilities that the provider runs on its end, like OpenAI’s web search, code interpreter, and file search. Previously, “tools” in LLM meant client-side functions you define and execute yourself. Now, if a provider exposes a built-in tool, you can call it directly from the CLI without writing a handler.

Install and Upgrade

# Fresh install
pip install llm
# or
brew install llm
# or
uv tool install llm

# Upgrade from any previous version
pip install -U llm

One caveat if you rely on LLM plugins: the underlying OpenAI Python library was upgraded to version 1.0+. Most plugins continue to work, but any plugin that also depends on the OpenAI library may hit compatibility issues. Check the plugin’s release notes before upgrading in a production workflow. The full list of changes is in the official changelog.

The Bottom Line

LLM CLI fills a specific niche that nothing else covers quite as well: a single command-line interface for any LLM, with persistent queryable logs and a plugin system for every major provider. It’s not trying to be Claude Code or Cursor — it’s the tool you reach for when you want to ask a model something from the terminal, pipe the output somewhere, and have the interaction logged automatically.

Version 0.32 makes that use case significantly stronger. Reasoning traces mean you can actually understand what the model is doing. The new log store means your conversation history is manageable at scale. Read the full release announcement for the complete picture, then check the LLM docs to see what’s possible with plugins. If you’ve been using the tool for a while, upgrade now. If you haven’t tried it yet, this is the release worth starting with.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *