Coding agents
Archis is an MCP server. You keep the coding agent you already use; it stops reading files and starts asking the index.
Supported coding agents
Twelve coding agents. Seven are verified end to end — registered, handshaking, listing tools, and answering a live call — on the CLI version current at the last conformance run. Two have not been through one yet: Antigravity is built from the vendor's documented CLI, and Cursor from an integration session against the editor itself. Pi is the one harness Archis does not reach over MCP at all, because Pi has no MCP client: Archis arrives there as the briefing and the skill instead. JetBrains Air, added since, is measured on macOS and not yet on Linux.
| Harness | Vendor | Id | How Archis registers |
|---|---|---|---|
| JetBrains Air | JetBrains | air (or jetbrains-air) | JSON merge into ~/Library/Application Support/JetBrains/Air/mcp.json |
| Claude Code | Anthropic | claude | claude mcp add |
| Codex CLI | OpenAI | codex | codex mcp add |
| Gemini CLI | gemini | gemini mcp add | |
| Antigravity | antigravity (or agy) | agy mcp add | |
| Cursor | Anysphere | cursor | JSON merge into ~/.cursor/mcp.json, with absolute paths |
| VS Code | Microsoft | vscode (or copilot) (or code) | JSON merge into ~/Library/Application Support/Code/User/mcp.json, with absolute paths |
| OpenCode | Anomaly | opencode | JSON merge into ~/.config/opencode/opencode.jsonc |
| Goose | Block | goose | YAML merge into ~/.config/goose/config.yaml |
| Amp CLI | Sourcegraph | amp | amp mcp add |
| Factory Droid | Factory | droid | droid mcp add |
| Pi | Earendil Works | pi | not an MCP client — briefing and skill only |
A vendor command is always preferred over editing a file: the vendor owns its own config schema, so Archis never has to track it. The MCP harnesses with no scriptable command are edited directly — backed up to <file>.chi-backup first, written through a temporary file and an atomic rename, with every unrelated key preserved.
Connecting
Bare, chi agents reports every harness it knows: whether its CLI is on this machine, whether Archis's tools are registered with it, whether the hooks are installed, and whether it has been briefed.
With no id, on arranges every harness it found. With an id, only that one. The flags narrow it further when you want one piece — the registration but not the briefing, say — and chi agents off reverses any install Archis performed, leaving every file otherwise as it was.
What a connection touches
Every file chi agents on can write for a harness, global and per repository, who writes it and the command that takes it back out. Pick an agent; the URL follows, so this is a page you can send to somebody. The same answer, for the machine you are on rather than in general, is chi config; chi config --catalog prints this table in the terminal.
Claude Code · claude · Anthropic · install: npm i -g @anthropic-ai/claude-code
| Scope | What | Where | Written by | Undo |
|---|---|---|---|---|
| Your home | MCP registration | ~/.claude.json | claude mcp add --scope user chi -- chi-mcpThe vendor's own command and the vendor's own file, at the location its documentation gives. Archis never opens it. | chi agents off claude --mcp |
| Your home | Hooks (8 events) | ~/.claude/settings.json | Archis, as entries under hooks; existing entries are keptSessionStart → chi hook sessionPostToolUse → chi hook recordPreToolUse → chi hook adviseUserPromptSubmit → chi hook remindPreToolUse → chi hook bindPreToolUse → chi hook gatePreCompact → chi hook compactStop → chi hook summarize | chi agents off claude --hooks |
| Your home | Permission entry | ~/.claude/settings.json | Archis, one permissions.allow entry (mcp__chi) so its tools run without a prompt | chi eject --machine |
| This repository | Hooks and permission entry | ./.claude/settings.json | Archis, only with --project (or the "team defaults" step of chi init) — the file is committed, so it is never the default | chi agents off claude --hooks --project |
| Your home | Briefing | ~/.claude/CLAUDE.md | Archis, as one attributable block (<!-- chi:begin --> … <!-- chi:end -->)The original is kept beside it as .chi-backup. Several harnesses read the same file; the block is written once. | chi agents off claude --brief |
| This repository | Briefing | ./CLAUDE.md | Archis, as one attributable block (<!-- chi:begin --> … <!-- chi:end -->), only with --project — usually committed | chi agents off claude --brief --project |
| Your home | Skill | ~/.claude/skills/chi/SKILL.md | Archis, a SKILL.md it stamps and refreshes; a file it did not write is never overwrittenClaude Code reads skills at startup — restart it for this to take effect | chi skill uninstall --global |
| This repository | Skill | ./.claude/skills/chi/SKILL.md | chi skill install, only when asked | chi skill uninstall |
"Your home" means the files under your own account — ~/ — which apply to every repository you open and are never committed. "This repository" means files at the repository root, which usually are; nothing is written there unless you ask with --project.
What Archis keeps for itself
Independent of the agent, Archis keeps its own state in two places: a directory per machine, and .chi/ at the root of each repository it has indexed. Nothing in either is sent anywhere; the privacy page has the boundary.
| Platform | State directory |
|---|---|
| macOS | ~/Library/Application Support/chi |
| Linux | $XDG_STATE_HOME/chi, or ~/.local/state/chi |
| Windows | %APPDATA%\chi |
| Any | $CHI_STATE_DIR, when set, overrides all three |
| In the state directory | What it is | Undo |
|---|---|---|
repositories.json | which repositories Archis has indexed on this machine — paths and timestamps | chi eject --all |
registrations.json | what was registered with each agent, so an old registration can say so | chi agents off --mcp |
agents.json | which coding agents have appeared here, and what Archis did about each | chi eject --machine |
setup.json | the answers given to the setup wizard's machine-wide questions | delete by hand |
advice-strict | strict mode for the advice hook is on | chi agents advice off |
telemetry.json | the usage-statistics decision and an anonymous install id | chi telemetry off |
telemetry-queue.jsonl | usage events waiting to be sent, as coarse buckets — `chi telemetry preview` prints them | chi telemetry off |
telemetry-flushed | when the queue was last sent | chi telemetry off |
update-check.json | the last update check's answer, so the daily notice asks the server once | delete by hand |
license.json | the signed-in account and its cached entitlement | chi auth logout |
update.json | release channel, automatic-update setting and the last check | chi update --auto off |
licence-notice.json | when each licence notice was last shown, so none repeats | delete by hand |
| In a repository | What it is | Undo |
|---|---|---|
.chi/chi-graph.db | the knowledge graph — rebuilt by `chi index` | chi eject |
.chi/graph | the knowledge graph in its CAVS form — rebuilt by `chi index` | chi eject |
.chi/chi-session.db | session memory — the one thing `chi index` cannot rebuild | chi eject (kept with --keep-sessions) |
.chi/setup.json | the answers given to the setup wizard's per-repository questions | chi eject |
.chi/release.json | which release set this repository up, so a newer one can say what it adds | chi eject |
.git/info/exclude | one `/.chi/` line under Archis's comment — never `.gitignore` | chi eject |
.chignore | indexing rules; Archis's managed block, and the file if nothing else is in it | chi eject |
.git/info/exclude rather than .gitignore, on purpose: it does the same job without Archis modifying a file you have committed. And any file Archis edits in place — an instructions file, a harness's JSON or YAML config — is copied first to <file>.chi-backup, once, and the copy is yours.
Generated from chi 0.52.0.
Telling the model
The most expensive mistake with Archis is a connection that works. Registering the tools puts them in front of the model. It does not tell the model they are there, and a model that was never told goes on reading files — the tools sit unused and the session costs exactly what it always did.
There are three channels, in descending order of how much Archis controls them, and no harness has all three:
| Channel | How reliable | What it is |
|---|---|---|
| MCP handshake | Every harness | The server describes itself and its tools when the agent connects. Always present, but a tool description competes with everything else in the prompt. |
| Session hook | Claude Code | Archis speaks at the start of a session, and before the agent reaches for its own file tools. The most reliable channel, because it does not depend on the model reading a file. |
| Instructions file | Every harness | A short briefing in the file the harness already reads — CLAUDE.md, AGENTS.md, GEMINI.md, .goosehints — at project or user scope. |
chi agents on uses every channel the harness supports. chi agents advice reports whether Archis is speaking up before an agent reaches for its own file tools, which is the single check worth running if the numbers are not moving.
The tools
Nine tools, and the shape of them is the product: the plural ones exist so that one call answers a question that would otherwise be ten. A turn re-sends the whole conversation, so the number of calls, not the size of any answer, is what a session costs. Start with chi_context: it takes the task in words and returns what the change needs.
| Tool | Answers |
|---|---|
chi_context | The first call for a task: describe the job in words and get the files and symbols it touches, their outlines and the exact source a change needs, in one answer. |
project_overview | What this repository is: its files, symbols, relations and languages. |
search | Ranked lookup over symbol names and signatures, filterable by kind and file. |
contains | Whether exact text appears, in which files, how often and on which lines, comments and string literals included. |
get_files | Many files at once, as an outline (every declaration, its kind and span, plus imports) or as the bytes. |
get_symbols | Many symbols at once, at signature, behaviour or source detail. |
get_relations | Callers, callees and impact for many symbols at once. |
session_report | What this session has cost and saved, per level and per tool. |
apply_patch | Edits by line range across many files in one call, without re-sending whole files. |
That is the default set. chi-mcp --toolset full advertises all 37, including the singular ones, for clients that need them; a wider list invites one call per fact, which is why it is not the default.
Where a registry composes the repository with others in a federated workspace, on a Team or Enterprise plan, every toolset also carries federation_context: chi_context across the repositories of a federated workspace, those that live only on the organization’s CAVS DB Server included: lines from each, with the repository and exact commit they came from, and nothing of a repository the user may not read.
Every one of them has a CLI equivalent, which is the useful thing about the CLI: when an agent gives you an answer you do not believe, you can ask the same question by hand. The reference maps them.
Verifying a connection
Six things are checked, in the order they can fail:
- The harness CLI is on
PATH. - The harness itself reports
chiamong its servers — asked of the harness, not read back from the file Archis wrote. Reading our own write proves only that we can write. - The server binary
chi-mcpresolves onPATH. - The handshake returns a server identity and a protocol version.
- At least one tool is advertised.
- A real tool call returns a real answer.
The last three run the exact command line that was registered, so a registration naming a broken path fails here rather than silently at your next session. The command exits non-zero on failure, so it works in CI.
Disconnecting
chi agents off <id> undoes one connection. chi eject --machine undoes all of them, plus the hooks, the briefing and the machine-wide registrations, and touches no repository. Both remove only what is attributably Archis's — and chi config shows you the list before either runs.
Archis's own loop
chi run "<task>" drives a live model over Archis's tools until it finishes or hits a step limit. It exists for two reasons: to run a task unattended, and to measure Archis against a full-source baseline on the same task — --no-compress is the control arm, and the difference between the two runs is the whole claim.
Writing files and running commands are separate opt-ins — --write lets it apply patches, --exec lets it run tests, builds and lints — and neither is on by default. --agent picks which harness CLI drives the loop, so this is not tied to one vendor. --transcript prints every turn, which is the way to see what the model actually asked for.