§00Changelog

Every version, and what it changed for you.

63 releases since 25 Jul 2026. Breaking changes say what to do about them, and a version that rebuilds your index says so at the top.

Archis updates itself: chi update checks what is published, verifies the release hash before writing anything, and puts the previous binary back if the new one does not start. chi update --check installs nothing.

  1. 0.40.0

    Archis keeps the provider's bill for every session, leaves a machine in one command, shows what every command is doing while it runs, and ships Windows builds again.

    • NewThe provider's bill is kept per session, and chi session cost shows it beside Archis's own accounting. chi agent already read what the provider charged on every turn — billed input, cache reads, cache writes, output — and discarded it with the process, so a report could say what Archis served and what that stood in for, but never what the run actually cost. Each turn's bill is now written into the session as it goes, so a run that dies partway keeps the turns it completed, and session_report carries it as a billed block: null for a session that came in over MCP, where the harness paid and told the tool server nothing, never a zero. chi session cost <id> prints the two sides of the ledger — what Archis served, stood in for and could have saved, then the bill in its three input classes, never summed, because cache reads and cache writes are priced in opposite directions from the base rate and one "input" figure ranked a run that spent its budget filling cache as the cheapest in the set.
    • Newchi uninstall is the whole opt-out in one command. Leaving used to be three commands and four flags, and the only thing that knew the order was a shell script on a website; two of the things Archis puts on a machine — the line the installer appends to your shell profile, and the binaries themselves — were in neither. One command now removes everything in the only order that works: every repository in the registry, the machine setup, the sign-out, the *.chi-backup copies, the installer's PATH line, then chi and chi-mcp last. --purge adds the state directory and this machine's device identity in the keychain; --keep-sessions, --keep-repos and --keep-backups bound it; --dry-run prints the plan. Every step reports per path, a step that fails does not stop the ones after it, and it needs no licence.
    • Newchi init shows what it is doing while it does it. The command printed its own name and then went quiet for as long as a first index of the repository takes — most of a minute on anything large — before the whole Preparing block appeared at once, at the end. Now each check lands when the thing it describes is true, and the index draws the same live region chi index does: the bar, the phase, the files going past, and the running totals. Outside a terminal — a pipe, a log, CI — nothing is drawn, which is the output those always had.
    • ImprovedEvery command that runs for more than a moment shows what it is doing. chi status, the incremental chi index, chi index --detect, chi measure, chi context, chi search, chi symbol, chi doctor, chi agents, chi init --list, chi tools discover and chi update --check now draw a live block on stderr: the phase, how far through it, and how long it has been. It appears only once a run has lasted a quarter of a second, so a command that finishes at once looks exactly as it did, and --json and a pipe get what they always got.
    • Improved--help reads as one product. chi --help lists its commands in groups — getting started, the index, coding agents, tool output, account, updates and removal — instead of one flat column of twenty-four. A command's description sits above its usage line, its flags fold to one line each under both -h and --help, and help wraps at the terminal's width, which it never did. chi context and chi search had swapped descriptions; search had none.
    • ImprovedA full index compiles on every core. Files are read and parsed on as many threads as the machine has and ingested on one, in walk order, so the graph comes out byte for byte as before. Measured with 0.40.0: jest (3,300 files) indexes in 1.4 s instead of 2.1, and vscode (17,000 files) in 48 s instead of 66. chi agents, chi doctor agents and chi init --list also ask every coding agent at once instead of one after another, so the slowest agent to start is the whole wait rather than the wait per agent.
    • Improvedchi run continues the harness's session between turns instead of restarting it, so the provider's prompt cache is read rather than rewritten. Every turn used to be a fresh conversation handed the whole transcript as one message, which the provider wrote into its cache on every turn and never read back. A harness that can resume now does, and after the first turn the loop sends only what happened since. A session the harness has lost is retried whole, once, and the run goes on. Harnesses that cannot resume are unchanged.
    • ImprovedThe briefing Archis writes into CLAUDE.md no longer repeats to Claude Code what its own MCP handshake already told it, and neither does the session hook. Both kept saying the same thing as the server's instructions, so a session paid for the tool list three times on every turn. Measured with 0.40.0, the block goes from 333 to 119 tokens on every turn of every session; a shared AGENTS.md keeps the full text for as long as one of its readers needs it, and the older block is refreshed in place by the next session start.
    • ImprovedWindows builds are back. The Windows target stopped shipping when its hosted build runner went dark, and 0.35.0 stayed the newest Windows build through four releases while macOS and Linux moved on. 0.40.0 is cross-compiled from the same machine that builds Linux, as a self-contained executable that needs no MSVC runtime. It is not yet code-signed, so Windows still shows the SmartScreen warning the download page describes.
    • Fixedcallers and impact no longer overstate a change's reach. A call to a name two declarations share was being attributed to the first of them, and a Go import was being resolved against every symbol in the repository that happened to share its last path segment, so impact at depth 10 could list 772 rows where 40 were right. Both are resolved honestly now, and a link from one document into a section of another reaches that section instead of collapsing into one unresolved edge under the page. Your index rebuilds on the next chi index.
    • FixedA heading repeated in one document gets its own section. Two "## Kotlin DSL" headings under two parents used to share one section id, so every link that named the section could only ever reach the last one, and the document offered the same edge twice. Repeats now take GitHub's own suffixes — kotlin-dsl, kotlin-dsl-1, kotlin-dsl-2 — so an anchor written against the rendered page still names the section it names there.
    • FixedOn a large repository every query no longer pays for files it cannot read. vscode holds ten fixtures that are not UTF-8 under a source extension; the full index skipped them, and every freshness scan after it tried to add them again, failed again, and ran a whole ingest for it. The graph now remembers what it could not use and leaves it alone until it changes. Measured with 0.40.0 on vscode, a no-change chi index went from 2.3 s to 0.19 s and chi search from 2.3 s to 0.24 s. chi context also re-checked the tree once per phase — 30 s on vscode for a question the graph answers in one — and now checks once: 1.2 s.
    • FixedA graph index written before this build's format is rebuilt, not refused forever. A repository whose index predated a format change answered every query with a refusal until somebody ran chi index by hand, and the message said the index was newer than the build no matter which way round it was. Opening now says which direction the mismatch points: an older index is rebuilt in place, and a newer one — written by a build ahead of this one — is left untouched with chi update as the advice, because deleting it would destroy an index that build reads.
    • Fixedchi agent --provider codex reported every run as unmeasured. The codex driver never asked for machine-readable output, so there was no usage record to find, and the CLI said the harness reported no usage as if that were the vendor's limitation. A benchmark built on it reported Archis as costing zero tokens, which next to a native arm reporting millions is a parse failure wearing the costume of a result. Every driver now asks, and a test holds it.
    • FixedAn organization's repository no longer refuses the commands that are not about a repository. Free covers your own repositories, and the check that enforces it ran on every gated command: chi agents on antigravity — registering a coding agent on this machine — was refused with the pricing page because the terminal happened to be standing in an organization's checkout, and so were chi hook install and chi skill install. The question is now asked only by the commands that read, serve or drive an agent over this repository.
    • FixedA session hook binds a call to the store the server is serving, not to the shell's current directory. A session that wandered into a nested checkout with a .chi of its own had its session created there while the server, started in the outer root, could not find it and refused every session call — which the model read as Archis not answering and spent the rest of the task in grep. The hook now resolves the directory the harness opened, and a nested checkout can never outrank the one that contains it.
    • Fixedchi eject --machine no longer leaves the setup answers behind, so the next chi init asks again instead of starting from a yes you gave for hooks that are gone. What it cannot remove is now reported instead of being silent: a registration in a coding agent that is no longer on the machine, with the file to edit by hand, and Claude's "auto" permission mode, which chi init removes and nothing recorded. chi eject also lists the *.chi-backup copies it deliberately leaves.

Run the current release

Archis Free is the whole local engine, with no card. Everything semantic runs on your machine — there is no endpoint that accepts source.