hermit ★ Star on GitHub
█ █ █▀▀ █▀█ █▀▄▀█ █ ▀█▀
█▀█ ██▄ █▀▄ █ ▀ █ █  █ 

small, fast coding agent · v0.1.0

Everything a coding agent needs. None of the bloat.

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
Then get a free key at openrouter.ai/keys, export it as OPENROUTER_API_KEY, and run hermit in a project.
~/calc — hermit
❯ 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 ❯ 
~4 MB binary ~5 MB memory macOS arm64 · x86_64 Linux x86_64 · arm64, static MIT license

SYNOPSIS

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

VERIFICATION

It checks the code it writes.

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.

  1. EditThe model reads, searches and edits. Each change is shown as a diff.
  2. Checkhermit runs your build and tests.
  3. FixFailures go back to the model, and the loop runs again.

repeats until ✓ checks passed, or the attempts run out

If the project hashermit runs
Cargo.tomlcargo check --all-targets && cargo test
go.modgo build ./... && go test ./...
package.jsonnpm run build / tsc --noEmit, npm test
pyproject.toml, tests/python3 -m pytest -q -x
Makefile with test:make test

FEATURES

free models
Uses OpenRouter's free models out of the box and falls back to the next one when a model is rate-limited. Any OpenAI-compatible API works too, including a local Ollama.
/plan
Read-only investigation that ends in a concrete plan. You approve it, keep planning, or type feedback before anything changes.
explore
The model hands broad codebase searches to a read-only sub-agent with its own context, so your main conversation stays small.
ctrl+v
Paste a screenshot or drag in an image file. Turns with images go to a model that can read them.
todo list
Multi-step work is planned as a checklist and updated live as hermit works.
--resume
Every conversation is saved after each turn. Long ones are summarized by the model while the recent turns stay word for word.
text tools
Models without native tool calling still work, through text-based tool calls.
/undo
Reverts the last turn's edits. hermit stays inside the project folder and asks before running commands it doesn't know.

TOOLS

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

EXIT STATUS

In one-shot mode (-p) the exit code tells a script or CI job whether the work is done.

0
Done, and the checks pass.
2
Done, but the checks are still failing.

FILES

~/.config/hermit/config.toml
Global settings: model, fallback models, base URL, check command.
./.hermit.toml
Per-project settings. Loaded after the global file, then env vars, then CLI flags.
./HERMIT.md
Project facts the model saves with remember. Loaded into every session, along with AGENTS.md or CLAUDE.md.
~/.config/hermit/sessions/
Saved conversations, the latest 100.
# ~/.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"

SEE ALSO