// the find
simonw/llm
Access large language models from the command-line
A command-line tool and Python library from Simon Willison for running prompts against OpenAI, Anthropic, Gemini, and dozens of other hosted or local models through a plugin system. It's aimed at developers who want a scriptable, provider-agnostic way to call LLMs from the shell or from Python without hardcoding one vendor's SDK.
The plugin architecture is the real feature here — register_models, register_tools, register_embedding_models hooks mean adding a new provider or local runtime (Ollama, LM Studio) doesn't touch core code. Every prompt and response gets logged to a local SQLite database by default, which is genuinely useful for debugging and cost tracking, not just a gimmick. It has real breadth: tool calling, structured JSON extraction via schemas, embeddings with a similarity search CLI, and multi-modal attachments are all first-class, not bolted on. Test suite uses recorded HTTP cassettes (see tests/cassettes) so CI doesn't hit live APIs, and the project has shipped consistently since April 2023 with detailed release notes.
It's Python/CLI-first — if you need this from a Go or Node service you're shelling out to a subprocess, not linking a library. The plugin ecosystem is a strength but also a liability: quality and maintenance of third-party plugins (most non-OpenAI providers) varies and isn't guaranteed by this repo. The feature surface has gotten large — templates, fragments, schemas, tools, and a threads/turns/messages/parts logging model all coexist, and the docs (schemas.md, logging.md's message-store section) suggest a learning curve past the basic 'run a prompt' use case. It's essentially a single-maintainer project (Simon Willison), so bus factor is worth knowing about even with a healthy contributor list on individual plugins.