Zaru CLI: what it does and how to install it, from its README
Also in: Español, Português, 日本語, Deutsch, Français, 한국어, 简体中文, Italiano, हिन्दी
Disclosure: Zaru is built by 100monkeys AI, Inc., so read this guide as a maker's account. It was drafted by one of our AI agents from the zaru-cli README on its main branch, read on 28 October 2026, and reviewed by the company. Every command below is copied from that README. Where the README does not answer a question, we say so rather than fill it in.
The README in one line: "Zaru is an AI assistant that works in your terminal. You give it a task, it asks a language model, and it runs the tools the model asks for: it reads and edits files, runs commands and fetches web pages, asking your permission first." Every step goes into a plain-text transcript you can read with cat.
Know what stage it is at
The README is direct about it: "It is pre-alpha: there are no releases and no packages, you build it from source, and commands, files and settings can change without notice." It is open source under Apache-2.0. It is also not a sandbox: "Zaru acts on your machine with your user account's permissions." Read the Safety section of the README before you point it at anything you care about.
Step 1. Check the requirements
- Linux. It "does not build on Windows", and macOS "is not tested".
- Rust 1.98.1, pinned in
rust-toolchain.toml;rustupinstalls it on the first build. - A C compiler (
cc) and network access to crates.io for the first build. - A model: a Google Gemini API key, an Ollama server, or any server with an OpenAI-compatible chat completions API.
Step 2. Build and install
git clone https://github.com/100monkeys-ai/zaru-cli.git
cd zaru-cli
cargo install --path crates/zaru-cli --locked
This puts zaru in ~/.cargo/bin. Run zaru --version to check that it runs.
Step 3. Choose a model
"Zaru has no default model." You create ~/.zaru/config.toml yourself. For Gemini, store the key (it is read from standard input: paste it, press Enter, then Ctrl-D) and name the model:
zaru providers keys add gemini
[model]
default = "gemini-3.6-flash"
Stored keys are encrypted with a key kept in the operating system's keyring. On a machine with no keyring, such as a server, WSL or a container, set ZARU_CREDENTIAL_KEY to 64 lower-case hexadecimal characters and keep that value, because "without it, the keys you stored cannot be read again." For Ollama no key is needed: set kind = "ollama" under [provider.default], and Zaru connects to http://localhost:11434. For an OpenAI-compatible server, set kind = "openai-compatible" and its endpoint, plus context_tokens if the server's model list does not give the window.
Step 4. Run a task
zaru "read src/main.rs and tell me what it does"
Run it from the directory you want it to work in. It prints the not-a-sandbox warning, each tool call with what it did, the answer, the tokens "counted by the provider", and a note about validators. zaru with no arguments opens an interactive session instead; zaru --continue reopens the last one in the current directory.
Step 5. Answer the permission prompts
Before a file write, an edit, a command or a web fetch, Zaru shows what the call will do and asks [y/N/a ...]. y allows it once, a allows that exact call for the session, and N, Enter or Esc says no while the task goes on. Ctrl-C stops the whole task. A fetch shows the whole URL, "because a URL can carry data off your machine". With no terminal to ask on, the call is refused. The mode is ask by default; allow skips what is on your allowlist, and yolo asks nothing, which the README says to use "only for a directory and a task you trust entirely."
Step 6. Read the transcript
zaru sessions list
cat ~/.zaru/sessions/<id>/transcript.jsonl
One JSON object per line: your task, each model reply and the tool calls it asked for, whether each call was allowed, what it returned "exactly as the model was given it", and the answer. Stored keys and tokens are replaced with a marker before anything is written.
Step 7. Add a validator
zaru init writes an example ./zaru.toml. A validator is a command that checks the model's work:
[[validator]]
name = "test"
run = "cargo test"
expect = "exit-zero"
With validators declared, a task becomes a loop: the model changes something, the validators run, and a failure goes back to the model, until all pass or runtime.max_iterations is reached. Validators run only after you approve them, and you are asked again when they change; "the permission mode does not skip it."
What it does not do yet
- Only three provider kinds work:
gemini,ollamaandopenai-compatible. "anthropicandaegisare recognised but have no client." - The
containedandlinkedruntime tiers "can be selected but are not built yet": tool calls run directly on your machine at every tier. zaru learnedandzaru inboxare placeholders.
What the README leaves open
- When the first release or package will come. The README says only that there are none.
- How the CLI's sessions relate to the web app's conversations at ask.myzaru.com. The README covers a Carbon Forge connection (
zaru notes tokens add) but not the web app. - Which other Gemini model names work. The README shows one.
Related guides
- What Zaru shows you about every step it takes, and how to stop one, the same idea in the web app.
- Zaru FAQ
Want Zaru without building anything? The web app is free: "Your name and email. That is all it asks."