rune

A coding agent in one 5.45 MiB binary.

Native Rust, sandboxed, and model agnostic. Startup work budgets are enforced in CI, and every rule it applies names the file that set it.

$brew install aadixc0de/tap/rune

5.45 MiB binary  /  5 ms version work ceiling  /  Apache-2.0

This is Rune, running in the page.

The same Rust as the binary, compiled to WebAssembly: the turn loop, the tools, and the permission rules, in one module. The files live in the tab. Watch it fix a bug, then type your own request.

rune ~/tally
/help commands
scripted | ask | ctx 0% | ~/tally

The binary runs commands in a real sandboxed shell; a tab cannot start programs, so here commands run in a small shell over the same files. The permission prompt is the harness asking, and the turn waits for your answer.

Small on purpose, and held there.

Each of these is enforced by a test or a build step, not a promise.

A budget, not an aspiration
Every pull request checks an 8 MiB binary size ceiling and startup work ceilings of 5 ms for --version and 8 ms for --help. Work uses the baseline-subtracted minimum-of-31, clamped to zero: the baseline is system true on Unix and an empty Rust executable on Windows. If no baseline is available, the budget fails because startup work ceilings cannot be enforced. Budget output also reports raw process latency minimum, median and p95. It assembles the system prompt from the checkout and checks it against a 6 KiB per-turn ceiling. The build fails when a ceiling is crossed.
Commands run in a sandbox
Seatbelt on macOS, bubblewrap on Linux. Writes stay in the workspace, credential files cannot be read, and rune doctor says what your machine enforces.
Every decision names its source
A limit, a rule, a setting: rune permissions and rune config --explain answer which file decided, rather than restating the value.
Steer a turn while it runs
Type while the model works and the correction reaches it at the next step. Escape twice cancels, and the session carries on.
Any model, no account
Anthropic, OpenAI, OpenCode, or any OpenAI-compatible endpoint, hosted or on your machine. No telemetry. --offline blocks provider and web requests, skips remote MCP checks and restricts sandboxed shell networking. Local MCP and unsandboxed commands can still use the network.
One harness, several hosts
The terminal, rune ask in a script, an editor over the Agent Client Protocol, a Rust library, and the tab above.

Start in three commands.

A fresh install has no provider, so connect lists them and asks for what it needs.

$ brew install aadixc0de/tap/rune   # or cargo install, see above
$ rune connect                      # choose a provider and paste its key
$ rune                              # start a session in this directory