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.
- Apache-2.0 and Unix-shaped: it composes with
cat,xargsand aforloop, 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
- 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
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."