
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.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 21 Oct 2026, 6 days before this check.
Latest release 0.36 on 22 Sep 2026.
Public since April 2023, a little over 3 years.
12,676 stars and 1,067 forks.
161 commits and 57 new issues in the last 90 days.
85 contributors. 39 pull requests merged in 90 days.
No security policy file says how to report a problem. No published security advisories.
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.
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 method | What it needs | Effort |
|---|---|---|
| pip | Python with pip | One command |
| Homebrew | Homebrew (the README points to a warning note) | One command |
| pipx | pipx | One command |
| uv | uv | One command |
| uvx | uv; runs without a separate install, for example against an OpenAI-compatible endpoint | One 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.
- Apache-2.0 and shaped like a Unix tool, so it composes with
cat,xargsand 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.
- 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.
python3 -m venv venv source venv/bin/activate pip install llm llm keys set anthropic
