The file tools are the everyday value — the contents never enter your main model's context, and the saving is measured on each call rather than advertised as a headline the maintainers say they cannot defend. Council is the more interesting idea: several backends answer the same prompt and all the answers come back, because where two models disagree is usually where the real problem is.
A router between your MCP client and any OpenAI-compatible backend, local or cloud. File work is done by a backend model and only its conclusions come back. Which backend handles a call is decided in four ordered tiers: an explicitly named one, a learned preference, a rules match, then the first healthy backend in the chain.
- analyze_file and explore — the backend reads the file or searches the codebase, and you get findings and file:line evidence
- modify_file, which applies a natural-language edit and returns the diff rather than the file
- batch_analyze and batch_modify across a glob, with a content filter to narrow the set first
- generate_file to write code from a spec
- ask for a single routed question, with auto or forced backend selection
- council — one prompt to several backends, every answer returned unaveraged, in parallel, in sequence, as a debate or as a fallback chain
- dual_iterate for a generate-review-fix loop between two backends, and parallel_agents for a decomposed TDD run
- spawn_subagent for a specialised role, review and refactor for quality passes
- check_backend_health, get_analytics, backup_restore and write_files_atomic
- A tokens_saved figure on each file call, measured from the characters actually read against the characters actually returned
Node.js 18 or newer, and a clone — there is no published package. It starts and lists every tool with no keys at all; you need a backend only when you call one, which can be a local OpenAI-compatible server on a common port or a single cloud key such as NVIDIA_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY or GROQ_API_KEY. Register it with an absolute path to the server file, because not every client honours a working directory. A backend you name explicitly gets one attempt and does not cascade — that is deliberate, so a pinned lane never quietly spends credit somewhere else.
Build from source — clone the repository and build it, then point your client at the binary
