LLM#
A CLI tool and Python library for interacting with OpenAI, Anthropic’s Claude, Google’s Gemini, Qwen, Gemma, Kimi, DeepSeek, Mistral, and dozens of other Large Language Models, both via remote APIs and with models that can be installed and run on your own machine.
Watch Language models on the command-line on YouTube for a demo or read the accompanying detailed notes.
With LLM you can:
… and much, much more
Quick start#
First, install LLM using pip or Homebrew or pipx or uv:
pip install llm
Or with Homebrew (see warning note):
brew install llm
Or with pipx:
pipx install llm
Or with uv
uv tool install llm
Use LLM to run prompts or start chats against an arbitrary OpenAI-compatible Chat Completions endpoint, such as LM Studio. With uvx, you can do this without installing LLM first:
uvx llm openai endpoint http://localhost:1234/v1 \
-m google/gemma-4-12b \
"What is the capital of France?"
uvx llm openai endpoint http://localhost:1234/v1 \
-m google/gemma-4-12b \
--chat
Add --key your-api-key if the endpoint requires authentication. See Run against an endpoint without configuring it for more options.
If you have an OpenAI API key key you can run this:
# Paste your OpenAI API key into this
llm keys set openai
# Run a prompt (with the default gpt-5.6-luna model)
llm "Ten fun names for a pet pelican"
# Extract text from an image
llm "extract text" -a scanned-document.jpg
# Use a system prompt against a file
cat myfile.py | llm -s "Explain this code"
Run prompts against Gemini or Anthropic with their respective plugins:
llm install llm-gemini
llm keys set gemini
# Paste Gemini API key here
llm -m gemini-3.5-flash 'Tell me fun facts about Mountain View'
llm install llm-anthropic
llm keys set anthropic
# Paste Anthropic API key here
llm -m claude-sonnet-5 'Impress me with wild facts about turnips'
You can also install a plugin to access models that can run on your local device. If you use Ollama:
# Install the plugin
llm install llm-ollama
# Download and run a prompt against the Orca Mini 7B model
ollama pull llama3.2:latest
llm -m llama3.2:latest 'What is the capital of France?'
To start an interactive chat with a model, use llm chat:
llm chat -m gpt-4.1
Chatting with gpt-4.1
Type 'exit' or 'quit' to exit
Type '!multi' to enter multiple lines, then '!end' to finish
Type '!edit' to open your default editor and modify the prompt.
Type '!fragment <my_fragment> [<another_fragment> ...]' to insert one or more fragments
> Tell me a joke about a pelican
Why don't pelicans like to tip waiters?
Because they always have a big bill!
Project news#
29th April 2026: LLM 0.32a0 is a major backwards-compatible refactor
11th August 2025: LLM 0.27, the annotated release notes: GPT-5 and improved tool calling
27th May 2025: Large Language Models can run tools in your terminal with LLM 0.26
5th May 2025: Feed a video to a vision LLM as a sequence of JPEG frames on the CLI (also LLM 0.25)
7th April 2025: Long context support in LLM 0.24 using fragments and template plugins
28th February 2025: Structured data extraction from unstructured content using LLM schemas
17th February 2025: LLM 0.22, the annotated release notes
29th October 2024: You can now run prompts against images, audio and video in your terminal using LLM
26th January 2024: LLM 0.13: The annotated release notes
12th September 2023: Build an image search engine with llm-clip, chat with models with llm chat
4th September 2023: LLM now provides tools for working with embeddings
12th July 2023: The LLM CLI tool now supports self-hosted language models via plugins
18th May 2023: llm, ttok and strip-tags—CLI tools for working with ChatGPT and other LLMs
4th April 2023: The original announcement of the llm CLI tool
For everything else, see the llm tag on my blog.
Contents#
- Setup
- Usage
- OpenAI models
- Other models
- Tools
- Schemas
- Templates
- Fragments
- Model aliases
- Embeddings
- Plugins
- Installing plugins
- Plugin directory
- Plugin hooks
- Developing a model plugin
- The initial structure of the plugin
- Installing your plugin to try it out
- Building the Markov chain
- Executing the Markov chain
- Adding that to the plugin
- Understanding execute()
- Prompts and responses are logged to the database
- Adding options
- Distributing your plugin
- GitHub repositories
- Publishing plugins to PyPI
- Adding metadata
- What to do if it breaks
- Advanced model plugins
- Tip: lazily load expensive dependencies
- Models that accept API keys
- Async models
- Supporting schemas
- Supporting tools
- Supporting server-side tools
- Attachments for multi-modal models
- Structured messages and streaming events
- Condensing logged payloads with json_replacements
- Consuming prompt.messages in build_messages
- Restoring opaque metadata on subsequent requests
- Tracking token usage
- Tracking resolved model names
- LLM_RAISE_ERRORS
- Utility functions for plugins
- Python API
- Logging to SQLite
- Related tools
- CLI reference
- llm –help
- llm prompt –help
- llm chat –help
- llm keys –help
- llm logs –help
- llm models –help
- llm templates –help
- llm schemas –help
- llm tools –help
- llm aliases –help
- llm fragments –help
- llm plugins –help
- llm install –help
- llm uninstall –help
- llm embed –help
- llm embed-multi –help
- llm similar –help
- llm embed-models –help
- llm collections –help
- llm openai –help
- llm –help
- Contributing