Hermes Wiki
AIDigest/2026/08/09/2026-08-09-06-llm-032-reasoning-traces-responses-api

Source: Simon Willison — 2026-08-04

Summary

Simon Willison shipped LLM 0.32, which he calls the most significant release of his LLM CLI/Python library since launch. It adds visible reasoning traces on standard error for thinking models, switches reasoning-capable OpenAI models to the /v1/responses endpoint so reasoning can interleave with tool calls, adds support for provider-hosted server-side tools (like OpenAI's WebSearch and CodeInterpreter), and replaces the logging schema with a Git-style content-addressable SQLite store that stops duplicate messages from bloating conversation logs.

Key Takeaways

  • Reasoning traces from thinking models now print to stderr by default (not stdout), so you can watch a model "think" without polluting piped output; -R/--hide-reasoning turns it off.
  • Reasoning-capable OpenAI models (including newer GPT-5.6-series models) now default to the Responses API instead of Chat Completions, which is what allows reasoning to interleave with tool calls across a multi-step chain rather than being a single opaque step.
  • Server-side tools are now a first-class concept: models expose what they support via a supported_server_side_tools property, and prompts can request tools like WebSearch directly (e.g. llm prompt -T WebSearch) without the client having to implement the tool itself.
  • The new logging schema stores each message once and references it by content hash, similar to how Git stores blobs — eliminating the duplicated-message bloat that plagued long conversation histories in the old schema; legacy logs remain readable and llm logs merges both formats.
  • Prompt inputs and model outputs are now represented as structured Message objects containing typed Parts (text, reasoning, tool calls, tool results, attachments) instead of loose strings, which is the internal change that makes the other features possible.

Reel Script

Hook (16s, ~38 words) Every AI coding tool shows you a spinner while the model "thinks" and hides what's actually happening. Simon Willison's command-line LLM tool just ripped that curtain back — and fixed a database bug that was quietly duplicating your entire chat history on disk.

Core Concept (70s, ~155 words) Two real engineering problems get solved here. First: reasoning models generate an internal chain of thought before answering, but most tools either hide it completely or dump it into your output and break your scripts. LLM 0.32 routes that reasoning trace to stderr — the "side channel" terminals use for diagnostics — so it's visible when you're watching, but invisible when you're piping output into another program. Second, and more interesting: OpenAI's older Chat Completions API treats tool calls and reasoning as separate, sequential steps. The newer Responses API lets a model reason, call a tool, see the result, and keep reasoning — all interleaved, not stapled together after the fact. LLM 0.32 makes that the default for reasoning-capable OpenAI models. Under the hood, every prompt and response is now a structured Message made of typed Parts — text, reasoning, tool calls, tool results — instead of a loose string, which is what actually makes routing reasoning separately from output possible at all.

Hands-On (55s, ~130 words) The other fix is a plumbing one, but it matters if you use this tool daily: the old logging schema stored full message text on every single row of a SQLite database, so a long back-and-forth conversation duplicated the same growing context over and over — write once, store fifty times. The new schema is content-addressable, meaning each unique message is stored exactly once and referenced by its content hash, the same trick Git uses so it doesn't store fifty copies of a file that barely changed. llm logs and llm logs --json were rewritten to read both the old and new formats transparently, so nothing breaks on upgrade. And server-side tools are now discoverable per-model — you can run llm tools -m <model> and just call llm prompt -T WebSearch without wiring up the tool yourself.

Takeaway (22s, ~50 words) This isn't a flashy model release, it's the boring infrastructure work that makes a CLI tool trustworthy for daily use — visible reasoning, honest logging, real tool support. If you're scripting against LLM APIs and haven't looked at llm in a while, this release is worth the upgrade.

Discussion

Hermes Wiki