Terminal coding agent · Windows · macOS · Linux
Axiom CLI
A terminal coding agent that can use Axiom's Architect / Builder / Critic council or an OpenCode-powered agent runtime — with OpenRouter and your own self-hosted Kestrel 1. Your files, shell, tests and Git stay on the computer where you run it.
PS> irm https://raw.githubusercontent.com/YoMosa2009/Axiom-CLI/main/install.ps1 | iex PS> axiom opencode install PS> axiom connect PS> axiom --engine opencode
- Latest release
- —
- Released
- —
- Last commit
- —
- License
- MIT
- GitHub stars
- —
The command-line sibling of Axiom.
Axiom CLI extracts and adapts the desktop app's coding-agent core into a standalone, cross-platform tool. The two are separate codebases with separate licenses — MIT here.
Two runtimes
Axiom's Architect / Builder / Critic council, or Axiom Code — Axiom's branded, pinned build of OpenCode, keeping its tools, commands and TUI behavior.
Runs where you run it
The TUI, tools, file edits, shell commands, tests and Git all execute locally. Only model requests travel to Kestrel 1, over HTTPS.
Bring any model path
Self-hosted Kestrel 1, OpenCode's account-free models, or OpenRouter — switch per task with a flag.
Keeps itself current
axiom update installs the latest release, and the next Axiom Code launch refreshes its managed runtime automatically.
Install
One command, any OS.
Both scripts detect your OS and architecture, download the matching release, and put axiom on your PATH. Releases are self-contained — no .NET install required.
For Axiom Code: install Node.js LTS first — Axiom uses its bundled npm client to install the pinned OpenCode runtime.
irm https://raw.githubusercontent.com/YoMosa2009/Axiom-CLI/main/install.ps1 | iex
curl -fsSL https://raw.githubusercontent.com/YoMosa2009/Axiom-CLI/main/install.sh | sh
Then pick how it thinks.
axiom opencode install axiom connect axiom --engine opencode
A one-off task in the current repository:
axiom code --engine opencode --yes "explain the failing test and fix it"
axiom connect asks for the Kestrel URL (press Enter to use https://ai.axiominference.work/v1) and a dedicated, revocable device key. Use a different key for each computer, and never reuse a browser key — it's saved in Axiom's encrypted local secret store.
Axiom Code runs locally, so it can use the files, tools, shell, tests and Git of the machine you launch it on.
axiom --model opencode/big-pickle axiom code --model opencode/big-pickle "add input validation to the signup form"
No account, API key or Kestrel connection required. Select an opencode/... model and Axiom starts OpenCode's built-in account-free provider.
Suggested: opencode/big-pickle, opencode/mimo-v2.5-free, opencode/ling-3.0-flash-fin-free, opencode/nemotron-3-ultra-free, opencode/nemotron-3.5-lightning-free. Newly available provider models can be passed directly as opencode/<model-id>.
axiom config # paste an OpenRouter API key (openrouter.ai/keys) axiom # full-window legacy Axiom TUI axiom code "add input validation to the signup form"
The legacy route uses the Architect / Builder / Critic council on an OpenRouter model. axiom config can also store a self-hosted endpoint and a Tavily key for reliable web_search — all encrypted at rest (DPAPI on Windows, an AES key-file on macOS/Linux).
Use axiom update any time to pull the latest release; the CLI also prints a one-line notice when a newer version exists.
Legacy engine
How the council works.
Three roles, one model. The whole task runs on a single model rather than silently switching mid-task, so each role can pick up exactly where the last one left off.
Architect
Reads your request — plus repo context in axiom code — and writes a short implementation plan.
Builder
Implements the plan — for coding tasks, as a structured patch proposal.
Critic
Reviews the result against your original request.
Bounded to two repair passes, then the best available output is kept. Council extras: severity policy, parallel explore, a user-in-the-loop Critic, post-merge checks and .axiom/acceptance.md.
Axiom Code × Kestrel 1
Your PC's GPU, from any machine.
--engine opencode keeps Kestrel 1 as the inference server while Axiom Code provides the agent runtime. Kestrel 1 runs on whatever machine you point it at — handy for using your own desktop as inference compute from a laptop.
Its /models picker offers both Kestrel 1 · OmniCoder-2-9B Q5_K_M and Kestrel 1 Pro · Gemma 4 12B IT, each with a 262,144-token context window. Selecting one securely switches the self-hosted server; only one model is loaded into VRAM at a time.
axiom --engine opencode G:\AxiomWork axiom G:\AxiomWork code --engine opencode "explain the failing test and fix it"
Long sessions stay usable.
Compaction is enabled for Kestrel sessions, so long agent runs don't run out of room:
- Service window
- 262,144 tokens
- Reserved for reply
- 16,384 tokens
- Compaction starts at
- 245,760-token input budget
- What it keeps
- Six newest user turns (up to 15,000 recent tokens); older bulky tool output is pruned
- Stall safeguard
- 15-minute no-output limit; no other fixed deadline
Commands.
axiom chat remains a supported alias for the default TUI. Bare axiom code uses Axiom Code; use --engine legacy to select the council explicitly.
| Command | What it does |
|---|---|
axiom [--model <id>] | Full-window TUI chat (default). / tools · @ lock folder · /help |
axiom config | Store your OpenRouter key, a self-hosted endpoint, and/or a Tavily key (encrypted at rest) |
axiom connect | Save Kestrel 1's HTTPS endpoint and this computer's revocable access key |
axiom code "<task>" | Axiom Code on the current directory, using the active Kestrel model |
axiom [path] --engine opencode | Axiom Code agent TUI in path, backed by Kestrel 1 |
axiom [path] code --engine opencode [--yes] [--json] "<task>" | One-off Axiom Code task in path |
axiom [path] --model opencode/big-pickle | Account-free OpenCode TUI |
axiom code --engine legacy [--model <id>] "<task>" | Architect → Builder → Critic council |
axiom connect openrouter | Replace an unreadable council credential through hidden local input |
axiom opencode install | Install or refresh Axiom Code (the pinned OpenCode runtime) for the current user |
axiom review [--plan] "<prompt>" | Read-only excerpt review of the tracked repository (see below) |
axiom update | Download and install the latest release |
Model aliases: eidos (Eidos 1, general-purpose reasoning) and hepha (Hepha 1, code-specialized) match the desktop app; kestral is your own self-hosted OpenAI-compatible endpoint, configured through axiom config (base URL, model id and API key).
A full-window TUI that behaves the same everywhere.
axiom paints its own interface on Windows, macOS and Linux, so the host terminal's scrollbar isn't part of the experience. Shell tools use PowerShell/pwsh on Windows and bash/sh elsewhere.
Fixed header, pinned prompt
Scrollable transcript (PgUp/PgDn, arrows, wheel), a Ctrl+K command palette, and Ctrl+Shift+M to cycle approval modes: auto, ask, plan.
Locked to your workspace
/workspace <path> or @ confines the agent to a folder — the sandbox cannot leave it. Secrets are redacted from output.
Nothing gets lost
Sessions auto-save. Use /sessions, /pick, /del and /resume to move between them.
Review before you accept
/checkpoint · /plan · /changes · /accept · /reject · /replay · /jobs · /watch · /sticky · /pr
Real engineering tools
str_replace / apply_patch / write_files, fetch_url, run_tests, find_symbol, plus /network and /policy controls.
Repo-aware
Repo map and retrieval, history compaction, Critic evidence rules, automatic diagnostics, /spec and /map.
Scoped source review — with honest coverage.
Two ways to have a model read a codebase, both built to report exactly what was and wasn't covered instead of pretending to full comprehension.
Automatic coverage in Axiom Code
Broad requests such as axiom code "Analyze this repository" schedule source reads inside the ordinary runtime: up to four 200-line ranges per model turn, continuing from the actual returned line boundary. Narrow requests containing only, just or limited to keep on-demand tool use.
The final coverage receipt reports supplied files, omissions and unread ranges. Limits are 10,000 inventory entries and 512 read ranges; failures, truncation and exhausted limits are reported as incomplete, never as full coverage.
Explicit excerpt review
axiom review --plan axiom review "Find correctness bugs"
A separate, read-only command: it previews a deterministic inventory of tracked source, then reviews 12,000-character excerpts against the current Kestrel model — each with a fresh request, no tools, a 2,048-token response cap and a three-minute limit. A JSON report is checkpointed after every pass; it records answers, hashes and omissions but never source excerpts or keys.
Coverage means source supplied, not verified comprehension. Independent excerpts can't establish cross-file correctness, and there is deliberately no generated final summary that could hide missed work. This mode doesn't edit files or run tests.
System requirements
- OS
- Windows (x64), macOS (x64 + arm64), Linux (x64 + arm64)
- Account
- None for OpenCode's listed free models; an OpenRouter key stays optional for the council
- Python tool
- System Python 3 on PATH
- Java tool
- A JDK (
javac/java) on PATH - .NET
- Not required — releases are self-contained
Build from source
git clone https://github.com/YoMosa2009/Axiom-CLI.git cd Axiom-CLI dotnet build dotnet run --project Axiom.Cli -- chat dotnet test
What's not in v1
- In-process local model inference. The CLI doesn't run a GGUF/llama.cpp model itself; pointing it at a self-hosted OpenAI-compatible endpoint is supported today (still a network call — just to a server you control).
- Visual/artifact rendering, KaTeX math, document ingestion. GUI-specific desktop features with no terminal equivalent yet.
- MCP connectors (GitHub / Google / Todoist integrations from the desktop app).
Looking for the graphical app? See Axiom for Windows.