▄ ▄ ▄ ▄ ▄ ▄ ▄
█ █ █ █ █▀▀▀█▀▀▄
▀█▀ ▄▄█ █ █ █
whip — a fast coding-agent harness in Go
An LLM tool-use loop (bash / read / write / edit / task), an interactive bubbletea session, and provider-routable models. One binary, no runtime, config you can read.
- Agent harnesses should be FAST — literally as fast as possible. whip is built in Go around that constraint: parallel tool calls, streaming everything, nothing between you and the model but a loop.
- Defaults across other harnesses suck. They all have awesome patterns, but none of them bring them all together. whip cherry-picks the best ideas from pi, opencode, codex, and exo into one opinionated harness (see docs/roadmap.md — every feature cites its source).
- Go is great for networking-heavy applications, and harnesses do a whole lot of networking. whip leans on channels where the TypeScript reference designs hand-roll promises — per-path file locks and background subagents collapse into primitives the compiler checks (docs/concurrency.md).
- whip is focused on a future where open-source models are the preferred models. Keeping up with those models is hard — whip brings you an opinion on what model you should be using: live discovery from every provider's catalog, new models surfaced in the picker, a fast default that tracks the frontier.
curl -fsSL https://raw.githubusercontent.com/context-labs/whip/main/install.sh | shChecksum-verified prebuilt binaries (Linux/macOS, x64/arm64). Or from source (Go ≥ 1.27):
go install github.com/context-labs/whip/cmd/whip@latestThen whip and you're in. Defaults to inference.net models — any
OpenAI-compatible endpoint works as a provider. One command wires up
OpenRouter's whole catalog (/model lists every model, no per-model
config):
whip auth openrouter # masked key prompt — or /auth openrouter in-sessionTo update to the latest release later, run whip update — it re-runs the
install script above.
/context-doctor audit what a fresh session injects, in tokens
/goal <text> work until done
/model pick a model — type to filter (new) entries come from the
provider catalog, no config needed
Drop a .mcp.json in your repo and MCP servers just appear (/mcp to see
them). ctrl+c once interrupts; twice quits.
The full setup, config reference, MCP, browser/computer-use, and how everything works: docs/README.md.
Highlights:
- docs/architecture.md — the moving parts, keystroke to tool call
- docs/agent-loop.md — one loop, one function
- docs/concurrency.md — channels where others use promises
- docs/features.md — full feature map, linked to code and tests
- docs/roadmap.md — shipped vs. next, sources cited