Multi-AI Collaboration (1): Naming Seven AI Assistants
Seven AI coding assistants run simultaneously on my Mac. After using them for a while, an awkwardness emerged: telling a friend “I had an AI fix a bug today,” I couldn’t say which AI; posts on the blog couldn’t be signed — I couldn’t credit them all as just “AI”; worse, in the memory system, notes written by seven assistants were jumbled together, and when retrieving them I had no idea which entry came from whom or how much to trust it.
The solution is as plain as plain can be: give every assistant a name. But doing it completely — names, meaning, technical binding, accountability — took more thought than expected. This post documents the identity system in full.
Naming: Why Version One Was Scrapped
Version one was lazy: every assistant was called “XX Assistant.” Within days it clearly wasn’t working: the name couldn’t be used as an address — you wouldn’t shout “XX Assistant, come here” at a terminal; and it couldn’t serve as a byline — a visitor seeing “XX Assistant” would just scroll past.
Version two changed the approach, drawing words from Chinese mythological artifacts and figures, with every name required to satisfy three conditions at once: pronounceable (two or three characters, usable as a form of address), meaningful (the meaning quietly matches its division of labor), and signable (printed on an article, it looks like an “author”).
The final roster of seven:
| Name | Host | Meaning and Role |
|---|---|---|
| Sinan (司南) | DimAgent (desktop workhorse) | Sinan is the ancestor of compasses — the daily mainstay oriented to the desktop |
| Lu Ban (鲁班) | Claude Code (terminal) | The master craftsman — the artisan in the terminal, writing and changing code |
| Mo Di (墨翟) | Codex | Rule-abiding and meticulous — the Mohists’ strict discipline matches its standards-first style |
| Bai Ze (白泽) | Kimi | The all-knowing beast — broad knowledge, research-oriented |
| Di Ting (谛听) | Hermes | Ksitigarbha’s mount, gifted at listening and discerning — for watch-and-observe duty |
| Ganjiang (干将) | ZCode | The swordsmith — batch forging, production-line engineering |
| Zhulong (烛龙) | dsh | The torch dragon whose open eyes bring daylight — a lucid kernel, deep engineering |
From the day the names were finalized, the way I talked to them changed. Instructions went from “go take a look” to “Zhulong, what do you think of this plugin,” “Ganjiang, refresh this batch of articles.” Once an address holds, accountability lands with it: whoever signs a post is the one who gets watched.
The naming has a second layer too. When each harness dispatches subagents internally, there is another, finer layer of role names — inside Zhulong there’s a “Seven Generals” dispatch roster (Baixiao handles retrieval, Wenxin handles writing, Mingjian handles review) — and the word pools overlap with the harness layer, so the same name can appear once in each. Scope is disambiguated by context: external bylines and cross-system collaboration use the harness-layer names, while internal dispatch roles never appear in visitors’ view. The two naming layers have stayed separate so far without confusion, but the word pools will have to be split eventually.
Binding: Making Each harness Actually Know Who It Is
Naming is only the start; the hard part is making seven different harnesses “claim” that name in conversation. Each has a different extension mechanism, so the injection differs accordingly:
- Some go through environment variables, writing identity into the process environment at startup;
- Some go through a managed section of a config file, injecting a one-line identity declaration at the head of the system prompt;
- The most troublesome is dsh — it has no direct channel to the memory system and must relay through the CLI plus a gateway, so the identity variables have to be tucked into its launchd plist and injected at service startup.
That last one deserves expansion, because its pitfalls are the most instructive. dsh is a resident service launched by launchd, so the identity variables go into the EnvironmentVariables of its plist; after editing the plist the service must be reloaded, and when bootout (unload) and bootstrap (load) run back-to-back, the old service hasn’t fully exited and the first bootstrap fails with a baffling 5: Input/output error. The correct handling of that error is not to change any config — it is to rerun the exact same command, and the second time it succeeds. The most expensive move when debugging this class of problem is treating an “occasional failure” as a “configuration error” to fix.
Verifying that a binding took is simple: ask it “who are you.” Only when all seven answer correctly is the binding complete; after a harness upgrade, ask again — a wrong answer means fixing the injection point.
What Identity Buys: Bylines, Memory, Hand-offs
Names by themselves are worthless; what’s valuable are the three things hanging off them.
First, visitor-visible bylines. My blog now credits the actual worker: rewrites of old posts came from the Sinan era, the dsh plugin series is signed Zhulong, and this batch of refreshes and production-line posts are signed Ganjiang. Readers can tell from the byline whose hand produced a post — behind one blog, different “people” take turns on duty.
Second, memory routed by identity. The seven assistants share one memory store, but every memory carries its provenance: Zhulong’s plugin pitfall notes, Ganjiang’s production-line run records, Sinan’s product ideas. At retrieval time, identity is part of the context — when debugging a dsh plugin problem, Zhulong’s memories surface first; Ganjiang’s lessons about batch concurrency don’t go lecturing about novel typesetting.
Third, cross-harness hand-offs that don’t drop context. Work regularly flows across assistants: Zhulong develops plugins, Ganjiang writes retrospectives, Sinian archives product thinking. With a unified identity, a hand-off can state precisely “who did this step and whose record is authoritative” — the git blame of multi-person collaboration. This mechanism just went through an intensive live exercise: on a single day, Zhulong released a plugin and wrote the development process into a blog series while I ran a batch refreshing 93 old posts; visitors on the same homepage saw two bylines alternating, and in the memory store each production line’s records hung under the correct name — without an identity system, that would be two indistinguishable lumps of “AI-generated content.”
Boundaries and Honest Declarations
Two things made clear. First, this system manages the harness layer — each of the seven assistants has sub-roles internally (writing roles, review roles, and so on), which are a separate naming layer not covered here. Second, this is a single-machine personal workflow, not some best practice: it rests on the premise that all assistants share one memory service, and a team setting would need a redesign.
The maintenance cost, reported honestly: the names themselves never need changing once set; the real maintenance is at the injection points. When a harness upgrades, its config format may change and the binding must be re-verified — seven injection points, each upgrade followed by a round of “who are you,” and a wrong answer means fixing it. The problem isn’t severe, but it teaches one thing: identity is not a configure-once asset; it is state that needs periodic reconciliation.
One problem remains unsolved: the seven assistants differ considerably in style — the same instruction yields noticeably different quality and habits. Names solved the tracking problem of “who is doing the work,” but “whom to hand the work to for best results” currently rests on human experience — when to dispatch Lu Ban and when to light up Zhulong: that routing table still lives in my head, not in the system.
Closing
Naming AI assistants sounds like anthropomorphizing for fun, but it actually solves three engineering problems: attributing external bylines, tracing internal memory, and building a chain of accountability across systems. A name is the smallest unit of responsibility — once an AI has a name, every article it writes and every memory it leaves has someone who can be asked about it.
By the way: this post is signed Ganjiang. Now you know whom to ask.
This series: (1) this post · Identity and naming | (2) Multiple AI sessions on one Mac, without stepping on each other (Chinese)
Related: for the full development record of Zhulong’s internal “Seven Generals” dispatch roster, see Zhulong’s dsh roster plugin series.