Bring your own model
Ollama, LM Studio, vLLM, llama.cpp, or any hosted endpoint that speaks the OpenAI API. Declare it in one config file and it appears in the picker.
Claude has Claude Code. OpenAI has Codex. The models you can actually run — Qwen, DeepSeek, GLM, Llama, Mistral — have none. OpenCLI is theirs.
Version · other platforms on the download page
One protocol, not a list of integrations. Anything answering
/v1/chat/completions the way OpenAI does can be pointed at — these were
each asked for their model list, without a key, before they went on this page.
The whole list, with what each one is — including which of them give something away for free.
A terminal program, a desktop app, and a local web UI. All three run on your machine and talk to whichever model you point them at.
Ollama, LM Studio, vLLM, llama.cpp, or any hosted endpoint that speaks the OpenAI API. Declare it in one config file and it appears in the picker.
No built-in gateway, no telemetry account, no key baked into the binary. What it talks to is what you configured.
Commands and file writes are shown before they run, with a sandbox underneath. You choose how much it may do unattended.
A department is a directory with standing instructions. A bot is a chat inside one, with a job. A duty comes round on its own and asks you when it is stuck.
The agent reads files, runs commands and edits things. That is as true of a folder of invoices as it is of a repository — and most of the work people actually have is the first kind. Nine departments ship with sample data, so every one of these can be tried before it is set up.
Reconcile ledger.csv against statement.csv; chase what is overdue
Answer what came in; group questions by what they are really about
List every order still unshipped, and how long it has waited
Turn notes into a week of posts; group contacts by what they bought
Read applicants against a role; pull decisions and owners out of notes
Compare their draft against our terms, clause by clause, quoting both
Where studies agree, where they conflict, and why
What is recorded, and what a clinician should look at, quoted
Read a service and report what would give a wrong answer
Six more workflows ship as skills and work in any directory: reviewing a file of rows against its rules, reporting what changed over a week, triaging an inbox, comparing two drafts, turning a transcript into decisions and owners, and reading a set of records for what is worth checking.
The question nobody else answers. Calling tools is what separates a model that can do this from one that can only talk about it, and the model card never says.
One fixed task: a six-row invoice file with three planted problems — an amount over the limit with no purchase order, a blank amount, and a date with a month of 13 — and a file stating the three rules. A pass means all three found, each quoted against the rule it breaks, with the row number.
| Model | Runtime | Calls tools | Found 3/3 |
|---|---|---|---|
huihui-qwen3.8-27b |
Ollama, local | yes | yes |
This table is short because it only holds what has been run. Adding a row is the most useful contribution you can make, and it takes about five minutes. Negative results are worth as much as positive ones and are harder to come by — nobody posts about the model that did not work.
Said here rather than discovered later.
grepGiven a structured way to read a file, a model not trained towards agentic work will shell out anyway. That is a gap in the models, and no interface closes it.
No Apple or Microsoft certificate. Your operating system will warn you, and it is right to — it cannot tell who built them. The download page says what to do.
This is a local agent, not a server. Anything that must fire while the machine sleeps belongs in the operating system's scheduler.
The tokenizer belongs to the model, and this runs models it has never seen. Everything downstream of the count is approximate.
The sandbox's writable root is that directory — which is why a conversation opens in a workspace rather than your home folder, and why runs outside a department's directory are held until you allow the place by name.
Not a scorecard. These are different tools, and the row that matters is the first one.
| OpenCLI | Claude Code · Codex · Gemini CLI | Ollama · LM Studio | |
|---|---|---|---|
| Which models | Any OpenAI-compatible endpoint | Their own vendor's | Any local one — but as a runtime, not an agent |
| Reads and edits your files | Yes | Yes | No — it is a chat window |
| Runs commands, unattended if you allow it | Yes | Yes | No |
| Where your files go | The endpoint you configured, and nowhere else | The vendor | Nowhere |
| Works offline | Yes, with a local model | No | Yes |
| Cost | Free; you pay for inference, or nothing if it is local | Per seat or per token | Free |
One thing worth saying plainly: a small local model is not as good at this as a frontier one. The interface is the same; the reasoning is not. OpenCLI is built so that choice is yours to make per task, not made for you — and if the frontier model is the right answer today, point it there. It speaks the same API.
macOS and Linux:
curl -fsSL https://opencli.ai/install.sh | sh
Then point it at a model. A local Ollama, for example, needs nothing but this in
~/.opencli/config.toml:
[model_providers.ollama] name = "Ollama" base_url = "http://localhost:11434/v1" wire_api = "chat" [[models]] slug = "qwen3-coder" model = "qwen3-coder:30b" provider = "ollama" context_window = 32768