hi is a verification-first coding agent. Point it at a model — local or remote — and it reads, writes, and edits files and runs shell commands until your tests pass.
# Install (needs a Rust toolchain):
./scripts/install.sh
# First run opens a provider wizard. Then:
hi "the tests in test_parser.py are failing — fix the parser"Interactive sessions open a full-screen TUI. Pass a prompt for one-shot. Piped stdin is folded in as context:
cargo test 2>&1 | hi "fix the failing tests"- Ask for an outcome, not a patch recipe.
- After edits, hi runs an auto-detected check pipeline (
cargo test,pytest,go test, …) or/verify <cmd>. - Failures go back to the model.
/undorestores the last turn.
In the TUI: Ctrl-K is the command palette (core commands first; type to search). /help is the same grouping. /tutorial is an eight-lesson tour, offered once on a fresh session.
| Job | Command |
|---|---|
| Finish line | /verify [cmd|off] |
| Take it back | /undo |
| See the diff | /diff or Ctrl-G |
| Resume work | hi resume / /sessions |
| Settings | /config |
--provider accepts openai (OpenRouter and any OpenAI-compatible URL), anthropic, pipenetwork, ollama, and xai. First-run hi or hi setup walks through all of them.
HI_API_KEY=sk-or-... hi -m anthropic/claude-sonnet-4 "add a --json flag"
PIPENETWORK_API_KEY=... hi --provider pipenetwork "…"
hi --provider ollama -m qwen2.5-coder "…"
XAI_API_KEY=xai-... hi --provider xai "…"Profiles live in ./hi.toml or ~/.config/hi/config.toml. /provider switches mid-session.
| Intent | Name | How |
|---|---|---|
| Several attempts at one task | Race | /race <task> — headless: hi --best-of N "…" |
| Several tasks at once | Fleet | /fleet (/dashboard is an alias) |
| Helpers inside a turn | Delegates | /delegate · explore is on by default |
| Work for a week | Goal | /goal <objective> |
| Keep watching | Watch | /loop, /watch, hi --loops-daemon |
| Project tickets | Tickets | Dashboard Board + hi tickets after /login pipenetwork |
| This machine | Local | /local (MLX) or --provider ollama |
Power commands (RSI, Diff Lab, traces, eval) are in /help platform and the handbook.
Interactive hi auto-submits Cargo mutation turns to POST /v1/tasks when Outcome is reachable (--tasks / --no-tasks override). Q&A stays on local chat. --rsi still exists as a fallback to /v1/rsi/runs when the tasks route is absent. Fail-open to local chat on tasks_unavailable, 401/404, missing key, or a missing RSI worker heartbeat.
Laptop loopback (dev-only unsandboxed worker):
ipop/scripts/rsi-dev-up.sh
# or: IPOP_ROOT=/path/to/ipop hi rsi upThen set:
[outcome]
mode = "auto"
base_url = "http://127.0.0.1:13000/v1"json_schema tasks can succeed without a sandbox. cargo_test / cargo_clippy / review need that worker plus a local hi. Cargo-backed code.change is not GA until a verified worker run.
Project tickets on the dashboard Board are a different unit of work than POST /v1/tasks. Pair a project (hi /login pipenetwork), then hi tickets in the repo to claim local tickets and run --goal --verify until the report passes. Sandbox tickets stay on the control plane (POST /v1/tasks plus server-side POST /v1/repairs).
Default is YOLO with a seatbelt: no nag prompts, a denylist for irreversible commands, checkpoints for /undo. Shell writes stay in the project on macOS (Seatbelt) and on Linux when pipe-wrap is available. HI_SANDBOX=off disables that. The status bar shows sandbox and undo. Tool results, web/research pages, browser output, and MCP payloads are treated as untrusted data, not instructions. Ask/Auto confirm browser and MCP use_tool; session standing grants are MCP server+tool only.
- Handbook — full CLI, TUI, loops, RSI, local GPU, eval
- Architecture — interactive agent vs RSI control plane
- Fleet
- Sandbox
- 0.2 migration
Homebrew formula (tap yourself or brew install --build-from-source): packaging/homebrew/hi.rb. Binary archives can follow; cargo install --path crates/hi-cli --locked is still the supported build.