claude-jr

A coding agent for the terminal, in a 3 MB binary.

claude-jr, or Claude Junior, does what Claude Code does: it reads your code, edits files and runs commands, asking before anything changes. It is written in Rust with no runtime, so it starts in 5 ms and sits in 2 MB of memory.

curl -fsSL https://claudejr.iwhitebird.com/install | sh

Linux and macOS, on x86 and ARM; on Windows, inside WSL. Then run claudejr and paste an Anthropic API key.

Small enough not to notice

There is no Node or Python to install and nothing running in the background. A whole working session, including the commands it runs, fits in a 16 MB container on a twentieth of a CPU core.

3.2 MBone static binary
2 MBmemory when idle
5 msto start
0 msCPU while it waits
claude-jrClaude Codepi
Install size3.2 MB324.5 MB109.0 MB
Memory, idle2.0 MB135.0 MB141.1 MB
Memory, working2.5 MB270.2 MB137.5 MB
Startup5 ms167 ms~260 ms
Its own CPU, 20 tool calls30 ms1,150 ms580 ms

All three run against the same fake API, so the model's time isn't counted; how it's measured.

And it gets the work done

SWE-bench Verified gives an agent real GitHub issues from projects like Django, sympy and scikit-learn, and checks its fix with the projects' own hidden tests.

88%

of a random sample of 100 tasks resolved with Claude Sonnet 5.5, one attempt each, at about five cents a task. With Claude Opus 5.5, 45 of 50 (90%).

What's in it

Subagents
Side tasks go to agents that work in parallel and report back.
Permission modes
From asking about everything to an auto mode where a small model reviews each command. shift tab switches.
A sandbox
With --sandbox on Linux it can only write to your project; keys, sockets and the rest of your home stay out of reach.
Rewind and resume
Go back to before any message with its file changes undone. Every session is saved as it goes.
Skills and MCP
Reads your .claude/skills and talks to MCP servers, local or remote.
Images and the web
Drag in a screenshot, and it can search and fetch pages when the task needs them.
A stash
ctrl s puts a half-written message aside while you send another.
Scripting
claudejr -p "…" runs one prompt, with JSON output and a spending limit for CI.

Using it

claudejrstart in this folder
claudejr -ccontinue the last conversation
claudejr -p "explain main.rs"one prompt, then exit
claudejr --sandboxonly write inside this folder
claudejr --updateget the newest release
/every command, inside it