Blazing-fast Claude
in your terminal.

A drop-in alternative to claude-code, written in C++26. 9.4 MB binary, millisecond cold start, sandboxed by default, SSH air-gap in one command. Signs in with your existing Claude Pro/Max — no Node, Python, Electron, or npm install.

Install in one line

$

No Node, no Python, no npm install — just a single 9.4 MB static binary.

9.4 MB
Single static binary
~2 ms
Cold start
0
Runtime dependencies
C++26
Native, no GC

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 disk9.4 MB222 MB (+ Node runtime)
Installcurl | chmod +xnpm i -g + Node
GC pauses mid-streamNoneV8 GC

Why agentty

Four things the official client doesn't try to do.

Native speed

C++26, statically linked, posix_spawn everywhere. Spawns in microseconds, no GC pauses mid-stream, no warmup.

📦

One static binary

9.4 MB. curl | chmod +x | run. No Node runtime, no npm install, no version drift between machines.

🛡️

Sandbox by default

Every shell and build call runs inside bwrap (Linux) / sandbox-exec (macOS) / job objects (Windows). An approved bash call still can't read ~/.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 bytes over SOCKS5-over-SSH.

📐

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.

How it compares

The single-binary pick.

agenttyclaude-codeaider
Language / runtimeC++26 — static binaryTypeScript / NodePython
Footprint~9 MBnpm + Node runtimepip + Python runtime
PlatformsLinux · macOS · WindowsLinux · macOS · WindowsLinux · macOS · Windows
Air-gapped modeYes (SOCKS5/SSH)NoNo
AuthOAuth (Pro/Max) + API keyOAuth + API keyper-provider env vars
ModelsClaude (Anthropic)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 · editFile IO with atomic writes and diff rendering
grep · glob · find_definitionSearch and symbol lookup across the codebase
bash · diagnosticsSandboxed shell and build, with exit codes
git_status · git_diff · git_log · git_commitVersion control, rendered natively
web_fetch · web_searchReach the web for docs and APIs
todo · remember · forgetPlanning and durable cross-session memory

Full tool reference →

“No JIT warmup, no require() graph to walk, no GC ticking while bytes stream in from the API. The redraw loop is a poll(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

One std::visit reducer, a single render function, and a permission matrix you can audit. It reads like a single function.

Browse the repo →

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