Renaming the Brain to the Assistant
A behaviour-preserving rename of Gantry's conversational LLM driver, from brain to assistant, across code and docs.
Gantry's chat and one-shot agent features are driven by a single internal abstraction: the conversational LLM driver that turns a user's message into a model turn. In the codebase that abstraction was called the "brain" — in its Rust types and modules, in the command-line flag and environment variable that select it, in the filenames of its per-turn diagnostic logs, in the menu text, and throughout the tests and docs. That name sat awkwardly beside the feature a user actually invokes, the Gantry Agent, and read as a different concept than it was.
This job renamed the abstraction to "assistant" everywhere it appeared, without changing behaviour: the same chat still runs, the same command still drives one-shot turns, and the same tool surface is still exposed. The old names were removed outright rather than kept as compatibility aliases, and the product name Gantry Agent was left unchanged so the driver and the feature it powers stay distinct.
Build
The cut renamed the behaviour-preserving core first, then the surfaces that select and inspect it, then documentation as a separate milestone. A re-plan after the foundational sprint redrew the downstream boundary once that sprint absorbed more than the original split assumed.
The decomposition put the internal abstraction rename first, as the foundation: the module, the Rust types, the owned driver wiring, the chat-engine and MCP host naming, and the test doubles. That ordering was what made the rest tractable — the flag, environment variable, and configuration key that select the driver, then the diagnostic logs and menu, then a final consistency audit, could each be renamed against a core that already compiled and read in the new language. A second milestone handled live documentation on its own, depending on the implementation names existing before it started.
The one place the cut came under stress was the boundary right after that foundational sprint. The first sprint landed and passed its tests, but its review forced a re-plan of the remaining implementation work. The briefs record why: the foundational sprint had pulled the per-turn log-file rename and the chat menu's log item forward, further than the original split had allotted to it. The re-plan redrew the downstream boundary so the diagnostics sprint would build on that as-built state — its brief states plainly that it should not redo what the first sprint already moved — rather than renaming those surfaces twice.
That adjustment is the most telling event in the run: it shows the foundation absorbing adjacent work and the plan following it, instead of holding a line the code had already crossed. Everything after it — the selection surfaces, the diagnostics polish, the source-and-test audit, and the entire documentation milestone — went through without a gate sending anything back.
Feature
Before, the conversational driver wore the brain name across source, tests, selection flags, logs, menu, and docs, colliding with the Gantry Agent product. Now one assistant vocabulary runs through all of them, and it still holds at today's HEAD.
Before this job, the abstraction that drives Gantry's chat was named brain in its module and Rust types, in the flag, environment variable, and harness-configuration key that select it, in the filenames of its diagnostic logs, in the menu, and in the diagnostic command's stderr — while the thing a user actually invokes was the Gantry Agent. One concept carried two names, and neither pointed cleanly at the other.
The design collapses that into a single vocabulary. The module is now `src/engine/assistant.rs`; selection runs through `--harness-assistant`, the `LOOM_ASSISTANT_MODEL` environment variable, and the assistant key in harness configuration, each resolving to the same harness and model the old names chose. The old selection surfaces were deleted, not aliased, so there is one way to name the driver and it is the assistant.
Standing in the live worktree at HEAD, the rename holds. There is no brain left in live source; the assistant module is in place; the flag, environment variable, and config key are the ones the documentation describes; and the docs present the driver as the assistant while still naming the Gantry Agent as the product it powers. The plan document that specified the rename was tidied away once the job finished. Much of the renamed code has been rewritten by later work — which is what a foundational rename invites, since the vocabulary it set is the language those later changes were written in.