The workshop · Edition No. 7 · 1 Sep 2026

simonw/llm

A command-line tool for sending text to language models, with every exchange logged locally.

← The workshopRead the whole edition →
llm: a model on the command line. Pipes text in and prints the answer.

12.5k stars · Apache-2.0 · 0.35 (2026-09-07) · Track this in Rising ↗

Command-line pipe to any model, with every prompt and response logged to a queryable SQLite file.

Verified27 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive100

Last code pushed 21 Oct 2026, 6 days before this check.

Releases85

Latest release 0.36 on 22 Sep 2026.

Maturity70

Public since April 2023, a little over 3 years.

Adoption82

12,676 stars and 1,067 forks.

Activity85

161 commits and 57 new issues in the last 90 days.

Community80

85 contributors. 39 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence Apache-2.0 | [llm.datasette.io](https://: permissive: use it for anything, keep the noticeSetup effort 1 of 5Payoff 4 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 7.

▶Repo detailsthe review · specs · pros & cons · install

What it does

You install one command and give it an API key per provider. Text arrives on standard input or as an argument, and the answer comes back on standard output, which means it composes with ordinary shell tools. Every prompt and response is written to a local SQLite file, and llm logs searches it. Saved templates turn a prompt you spent an hour refining into a named command. Fragments let long reference texts be attached and reused, schemas make a model return structured records rather than prose, and tools let a model call functions you define. It talks to the major hosted providers, and plugins add more, including models running on the same machine. It also computes and stores embeddings, which are numeric representations of text used for similarity search. What it does not do is manage spending, run a server or balance across providers, which is where a gateway belongs instead.

Why it matters

Who it suits. Anyone with a large pile of text and one question to ask of all of it: extracting complaints from nine thousand comments, classifying support threads, summarising four hundred transcripts. It also suits anyone who wants a prompt saved as a reusable command, and anyone who wants the record of what was asked to still exist in three months. Skip it for conversational work, where a chat interface is simply better.

Verdict. Worth installing the first time there are more than about fifty files to process, and before that it will feel redundant. The two features that earn their place beyond bulk are the saved templates and the log: the log turns throwaway work into something that can be queried in SQL afterwards. The caution is cost, because a loop over four hundred files is a real bill — pick a cheap model as the default and cap the spend before the first large run. Edition 5 covered BerriAI/litellm, which is the right tool for that cap when several people or several programs share one budget. Version 0.36 of 22 September 2026 is current; the project moves quickly, so pin the version and use the part you need. One note for anyone reading it from a mirror: the GitHub releases page and PyPI agree on 0.36, while the ungh.cc mirror was still showing 0.35 on the day of this refresh.

Stars12.5k
LicenceApache-2.0
Latest0.35 (2026-09-07)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Summary (Key Points)from the README
Key features
  • Many model providers: Connects to OpenAI, Anthropic's Claude, Google's Gemini, Qwen, Gemma, Kimi, DeepSeek, Mistral and "dozens of other" models, both remote and locally installed.
  • Command-line prompts: Runs prompts from the terminal, starts interactive chats with `llm chat`, and supports continuing conversations.
  • SQLite logging: Stores prompts and responses in SQLite, with search, filtering and browsing through Datasette.
  • Embeddings: Generates and stores embeddings, organises them into collections and retrieves similar items.
  • Structured extraction: Extracts structured content from text and images using JSON schemas.
  • Tool use: Lets models execute tools, with tool functions that can be sync or async.
  • Attachments and fragments: Runs prompts against images, audio and video, and feeds video in as a sequence of JPEG frames (LLM 0.25).
  • OpenAI-compatible endpoints: Works with any OpenAI-compatible Chat Completions endpoint, such as LM Studio, and can run without a prior install via `uvx`.
  • Plugin system: Adds models, embedding models, tools, template loaders and fragment loaders through plugin hooks.
  • Python library: Offers prompt execution, conversations, async models and streaming responses from Python code.
Ways to install
Platform or methodWhat it needsEffort
pipPython with pipOne command
HomebrewHomebrew (the README points to a warning note)One command
pipxpipxOne command
uvuvOne command
uvxuv; runs without a separate install, for example against an OpenAI-compatible endpointOne command
Important
  • Homebrew caveat: The README flags a warning note for the Homebrew route and includes a section titled "A note about Homebrew and PyTorch", so read it before choosing that method.
  • API keys: Remote providers need their own keys, which can be stored with `llm keys` or passed with `--key` or environment variables.
  • Plugins are required for many providers: Gemini, Anthropic, Ollama and other local or remote models each need a separate plugin install.
  • Local models: Running models on your own machine requires a plugin such as Ollama and enough local hardware to run the chosen model; the README does not give hardware figures.
  • Logging by default: Prompts and responses are logged to SQLite, and the README has a section on turning this logging on and off.
  • Pre-release version mentioned: The news section highlights LLM 0.32a0, an alpha release described as a major backwards-compatible refactor.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
1 / 5
Payoff
4 / 5
Good
  • Apache-2.0 and shaped like a Unix tool, so it composes with cat, xargs and a loop.
  • Every prompt and response is logged to SQLite, which makes past work searchable.
  • Reusable templates, structured output, fragments and a large plugin ecosystem, including local models.
Watch for
  • It calls paid services, and a loop over hundreds of files is a real bill with no built-in cap.
  • The plugin ecosystem moves quickly; pin a version rather than tracking the newest.
  • It overlaps whatever coding assistant is already installed, so the value only appears at volume.
Install
python3 -m venv venv
source venv/bin/activate
pip install llm
llm keys set anthropic
Screenshots
simonw/llm: GitHub preview card

On Stack Radar: Build & Ship › Developer Environments › Terminal Tools.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.