█ █ █▀▀ █▀█ █▀▄▀█ █ ▀█▀ █▀█ ██▄ █▀▄ █ ▀ █ █ █
small, fast coding agent · v0.1.0
Most coding agents ship a whole runtime. hermit is one ~4 MB Rust binary using ~5 MB of memory, with tool calling, plan mode, sub-agents, images, memory and resumable sessions built in.
curl -fsSL https://raw.githubusercontent.com/Dhanush-K-Gowda/hermit-code/main/install.sh | sh
OPENROUTER_API_KEY, and run hermit in a project.
❯ fix the failing test ● Grep fn add └ 1 match● Edit src/lib.rs └ src/lib.rs +1 -1 -pub fn add(a: i32, b: i32) -> i32 { a - b } +pub fn add(a: i32, b: i32) -> i32 { a + b }● Run cargo test --quiet └ exit code 0◆ Fixed `add`: it subtracted instead of adding. Tests pass.● Verify cargo check --all-targets && cargo test ✓ checks passed── 5 steps · 876 tokens · 8.9s ❯
hermit # interactive session hermit -p "make the failing tests pass" # one-shot hermit --plan -p "how would you add auth?" hermit -c # continue the latest session here hermit --resume <id> # resume a session from any folder hermit -m google/gemma-4-31b-it:free # pick a model hermit --yolo # don't ask before running commands
Whenever a turn changes files, hermit detects your project's check command and runs it. If anything fails, the output goes back to the model, up to max_fix_attempts rounds.
repeats until ✓ checks passed, or the attempts run out
| If the project has | hermit runs |
|---|---|
Cargo.toml | cargo check --all-targets && cargo test |
go.mod | go build ./... && go test ./... |
package.json | npm run build / tsc --noEmit, npm test |
pyproject.toml, tests/ | python3 -m pytest -q -x |
Makefile with test: | make test |
What the model can call. Plan mode and explore only get the read-only ones, shown brighter.
read_filelist_dirglobgrep
write_fileedit_filerun_commandtodo_writerememberexplore
In one-shot mode (-p) the exit code tells a script or CI job whether the work is done.
remember. Loaded into every session, along with AGENTS.md or CLAUDE.md.# ~/.config/hermit/config.toml (optional) model = "poolside/laguna-s-2.1:free" verify_cmd = "cargo test" allow_commands = ["make test"] # base_url = "http://localhost:11434/v1"