Blazing-fast coding agent
in your terminal.
A drop-in alternative to claude-code, written in C++26. 13.6 MB binary, millisecond cold start, sandboxed by default, SSH air-gap in one command, and runs inside Zed over ACP. Signs in with your existing Claude Pro/Max — or point it at OpenAI, Groq, OpenRouter, Cerebras, or a local Ollama model. No Node, Python, Electron, or npm install.
Install in one line
No Node, no Python, no npm install — just a single 13.6 MB static binary.
Size & cold-start are the Linux x86_64 build, measured on each deploy; other platforms vary — see the per-platform download sizes.
Speed
Native, not interpreted.
Measured on the same Arch box, same shell, same day. No JIT warmup, no require() graph to walk, no GC ticking while bytes stream in. Figures are the Linux x86_64 build — other platforms here.
| agentty (C++26) | claude-code (Node) | |
|---|---|---|
Cold-start --help | ~2 ms | ~150 ms |
--version | ~2 ms | ~60 ms |
| Binary on disk | 13.6 MB | 222 MB (+ Node runtime) |
| Install | curl | chmod +x | npm i -g + Node |
| GC pauses mid-stream | None | V8 GC |
Why agentty
Everything the official client does — and the things it doesn't.
Native speed
C++26, statically linked, posix_spawn everywhere. Spawns in microseconds, no GC pauses mid-stream, no warmup.
One static binary
13.6 MB. curl | chmod +x | run. No Node runtime, no npm install, no version drift between machines.
Any model
Claude by default via your Pro/Max subscription — or GPT, Groq, OpenRouter, Together, Cerebras, and local Ollama. Switch backends live with ^P. Providers →
Sandbox by default
Every shell and build call runs inside bwrap (Linux) / sandbox-exec (macOS). Workspace, system libs, and network stay reachable; ~/.ssh, /etc, and other projects are read-only. An approved bash call still can't cat ~/.ssh/id_rsa.
One-command SSH air-gap
agentty airgap user@host runs the agent on a box with no direct internet — your laptop relays the bytes over SOCKS5-over-SSH. TLS pins on the real upstreams end-to-end, so the network in between can't MITM you.
Learns your codebase
Agent Skills teach it your conventions from a SKILL.md; remember/forget give it durable cross-session memory. Teach it once, every thread knows. Skills →
Threads that persist
Every conversation is a saved thread you can reopen with ^J. Long threads compact automatically so you never blow the context window mid-task.
Isolated subagents
The task tool spawns a subagent with its own context window to burn through a self-contained job, then returns one condensed report — keeping your main thread focused.
Adjustable reasoning
Dial thinking effort per model from the picker — fast answers for small edits, deep reasoning for hard refactors, without leaving the thread.
Paste images
Drop a PNG, JPEG, GIF, or WebP path (or ^V from the clipboard) straight into the composer — screenshots, diagrams, and mockups go to the model inline.
Run code blocks
When a reply hands you shell commands, ^G runs one interactively on your real terminal — sudo prompts work, output streams live, ^C kills the command not agentty. Attach the captured output back to the composer with one key. The interface →
Mentions & palette
Type @ to mention a file, # to jump to a symbol, / to open the command palette (also ^K). The composer knows your project.
Permission profiles
Start in Ask — writes, shell, and network each prompt first. S-Tab cycles to Write (autonomous) or Minimal. Every effect is gated by a compile-time permission matrix. Profiles →
Workspace boundary
Filesystem tools refuse paths outside the launch directory. Opt out explicitly with --workspace /.
Inline render
Lives at the bottom of your terminal, preserves scrollback, never takes over the screen.
MCP, both ways
Serve agentty's tools to any MCP client with mcp-serve, or consume other MCP servers from a .agentty/mcp.json — their tools appear indistinguishable from native ones. MCP →
Runs inside Zed (ACP)
agentty acp speaks the Agent Client Protocol, so agentty becomes a first-class agent panel in Zed — streaming text, inline diffs, native permission prompts, session reload. Same engine as the TUI. Set it up →
Bring your own model
Claude by default. Any model on demand.
Sign in once with your Claude Pro/Max subscription, or point agentty at any OpenAI-compatible backend. Switch live mid-thread with ^P — no restart, no re-auth.
agentty | Claude via OAuth (Pro/Max) or API key — the default |
--provider openai | GPT and o-series on api.openai.com |
--provider groq | Llama/Mixtral on Groq LPUs — very fast |
--provider openrouter | Any model via openrouter.ai |
--provider together | Open models on together.ai |
--provider cerebras | Wafer-scale inference — very fast |
--provider ollama | Local models at localhost:11434 — no key, no cloud |
--provider host:port | Any raw OpenAI-compatible endpoint |
How it compares
The single-binary pick.
| agentty | claude-code | aider | |
|---|---|---|---|
| Language / runtime | C++26 — static binary | TypeScript / Node | Python |
| Footprint | 13.6 MB | npm + Node runtime | pip + Python runtime |
| Platforms | Linux · macOS · Windows | Linux · macOS · Windows | Linux · macOS · Windows |
| Air-gapped mode | Yes (SOCKS5/SSH) | No | No |
| Editor integration (ACP) | Yes (Zed) | Yes (Zed) | No |
| Auth | OAuth (Pro/Max) + API key | OAuth + API key | per-provider env vars |
| Models | Claude · GPT · Groq · OpenRouter · Ollama | Claude (Anthropic) | many providers |
Tools
A purpose-built widget for everything.
Diffs render as diffs, search groups by file, bash shows exit codes, todos become checklists. Every tool effect is gated by a compile-time permission matrix.
read · write · edit | File IO with atomic writes and diff rendering |
grep · glob · find_definition | Search and symbol lookup across the codebase |
bash · diagnostics | Sandboxed shell and build, with exit codes |
git_status · git_diff · git_log · git_commit | Version control, rendered natively |
web_fetch · web_search | Reach the web for docs and APIs |
skill · task · search_docs | On-demand skills, isolated subagents, and RAG over a knowledge corpus |
todo · remember · forget · wipe_memory | Planning and durable cross-session memory |
“No JIT warmup, norequire()graph to walk, no GC ticking while bytes stream in from the API. The redraw loop is apoll(2)over the model stream and your input fd — every keystroke lands on the next frame.”— from the design notes
Open source
Built in the open, MIT licensed.
Read the source
The reducer is one std::visit over a closed event sum; the view is a single Model → Element function; the permission matrix is a constexpr with static_asserts. Change a policy cell and the build breaks — not a test nobody runs.
Get involved
Bug reports, fixes, and well-scoped features are all welcome. Start with the contributing guide.
How to contribute →Ready in one line.
Linux, macOS & Windows · x86_64 & aarch64. The same line updates it.
curl -fsSL https://agentty.org/install.sh | sh