Coding agents and dev tools · Edition No. 7 · 1 Sep 2026

simonw/llm

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

← Coding agents and dev toolsRead the whole edition →

12.5k stars · Apache-2.0 · 0.35 (2026-09-07)

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

Repo detailsthe review · specs · pros & cons · install

What it is

A command-line tool for talking to language models. You pipe text in, get text out, and every exchange is logged to a local SQLite file you can search afterwards. It speaks to the major hosted providers and, through plugins, to local models; it supports saved prompt templates, fragments, schemas for structured output, and embeddings.

Why it matters

You already have Claude Code, so the case for this is narrow and specific: bulk. Claude Code is a conversation; this is a pipe. When entry 05 hands you nine thousand comments across forty videos, the useful shape is cat comments.jsonl | llm -s "extract every distinct complaint about the tool being explained" run over each file in a loop, not forty chat sessions. The same applies to the Edition 6 corpora — every competitor article trafilatura pulled down, every transcript, every Reddit thread. Two features earn their place beyond that. Saved templates mean the prompt you spent an hour refining — "summarise this transcript as a video outline in English and Russian" — becomes a named command you reuse for a year. And the SQLite log means the work is queryable: three months from now you can ask which titles you generated in July, and get an answer. It is also a very fast way to prototype a Grasppy prompt before writing any FastAPI code, and it sits naturally behind LiteLLM from Edition 5 when you want the spend capped.

Stars12.5k
LicenceApache-2.0
Latest0.35 (2026-09-07)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Setup effort
1 / 5
Payoff
4 / 5
Good
  • Apache-2.0 and Unix-shaped: it composes with cat, xargs and a for loop, which is exactly what bulk work needs
  • Every prompt and response logged to SQLite — your research becomes searchable instead of scrolling back through chats
  • Reusable prompt templates and a large plugin ecosystem, including local models when a job is too big to pay for
Watch for
  • It calls paid APIs, and a loop over four hundred files is a real bill. Set a budget and a cheap model as the default before the first big run — this is precisely the argument for LiteLLM
  • It overlaps Claude Code enough that it will feel redundant until the first time you have four hundred files, at which point it will not
  • The plugin surface is large and moves quickly; pin the version and use the small part you need
Install
source venv/bin/activate
pip install llm
llm keys set anthropic
cat comments.json | llm -m claude-sonnet-4-5 \
  -s "List every distinct complaint or unanswered question, with a count."

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.