LLM 0.33 adds combinable templates and reasoning summaries
The CLI builders script against jumps to OpenAI's 3.x client and unbreaks fresh installs; llm-openrouter 0.7 also gains Shell, WebFetch and WebSearch tools.

Copy markdown
Templates finally stack
Pass -t more than once and LLM now merges the templates, so you can layer a house-style system prompt over a separate model-and-params template instead of maintaining one bloated file. Reuse the same prompt fragments across projects.
Reasoning summaries on tap
Reasoning-capable models take a new reasoning_summary option set to auto, concise, or detailed, and llm logs breaks out server-side tool-call results in their own section — so you can see what the model actually did, not just its final answer.
The httpx break is patched
0.33 moves to the OpenAI Python 3.x client (httpx to httpx2) after 0.32.1 had to pin below 3.0 to keep fresh installs from breaking. Run pip install -U llm and the dependency conflict is gone.
Per-call keys for embeddings
Embedding commands now accept --key for per-call API-key resolution, and embed-multi reuses an existing collection's model config instead of re-guessing it. Cleaner multi-provider and multi-tenant embedding scripts.
llm-openrouter 0.7 adds server-side tools
The OpenRouter plugin gained reasoning traces plus Shell, WebFetch, and WebSearch server-side tools, so you can point LLM at hundreds of OpenRouter models and let them search or fetch without wiring the tools yourself.