LLM is a command-line tool and, at the same time, a Python library for working with large language
models, created by Simon Willison. It talks to models from several vendors — the release post for
version 0.26 names OpenAI, Anthropic and Gemini — and to local models served through Ollama, with
support for many of them supplied by plugins such as llm-anthropic, llm-gemini and llm-ollama.
Its author describes it as similar in shape to his other project, sqlite-utils, in being both a CLI
tool and a library.
Capabilities
The tool is installed with ordinary Python tooling (the release post suggests pip, pipx or uv),
stores API keys per vendor with llm keys set, has a configurable default model, and selects another
model with -m.
Version 0.26 added tool support, which its author calls the biggest new feature since he started the project. In that version:
--tool/-Texposes a named tool to the model and can be repeated; LLM ships simple demo tools such asllm_versionandllm_time.- Tool plugins add capabilities to whichever model is in use. The author’s first four are
llm-tools-simpleeval(simple expression evaluation, for example mathematics),llm-tools-quickjs(a sandboxed QuickJS JavaScript interpreter whose state persists between calls),llm-tools-sqlite(read-only SQL against a local SQLite database) andllm-tools-datasette(SQL queries against a remote Datasette instance). The Datasette plugin is what he calls a “toolbox”: a plugin holding several tools, configured through a constructor. --functionstakes a block of literal Python code and makes every function defined in it available to the model as a tool.--td(--tools-debug) prints each tool call and its response.- In the Python library,
model.chain()works likemodel.prompt()but executes the tool calls a response requests and prompts the model again with the results; anafter_callargument lets the caller observe each call. Tools can be sync or async functions, and when a model requests several async tools at once they run concurrently.
Adoption & Ecosystem
The project is extended mainly through plugins, and at the time of 0.26 its author said he was most excited about the potential of tool plugins, keeping a cookiecutter template for writing them and documenting how model plugins add tool support. He also named acting as a Model Context Protocol client as clearly on the agenda, so that MCP servers could serve as additional sources of tools. He presents the tool-support release as making LLM a way to build “agents” in the sense of tools in a loop (see AI Agent and Function calling); the release itself is described in Large Language Models can run tools in your terminal with LLM 0.26.