Three units, one protocol
Three units, one protocol
Young, 2026-10-10:
"1. Pulse — Run on Hermes (on Pulse host) — Eva, Eve, Tam2. Brain — Run on Hermes (on LAB host) — Min, Mira, Sol3. Heart — Run on SolOSV3 (on LAB Host) — Ace, Alpha, Atlas, Echo, NovaAll agents communicate via A2A. Tools — Opencode CLI (Arms).We are focus and working on Heart Unit."
Verified against disk before recording: the V3 registry already carries this
exactly — plane: pulse with host: pulse on 192.168.4.34, plane: brain with
host: lab on 8311–8313, plane: heart with host: lab on 8301–8305. Young's
statement and the registry agree, which is the check that matters — one source,
not two.
1. What the three-unit shape settles
Two of the three units are Hermes. One is not.
| Unit | Runs on | Host | Agents | Ports |
|---|---|---|---|---|
| Pulse | Hermes | Pulse (192.168.4.34) | eva · eve · tam | 8441–8443 |
| Brain | Hermes | LAB | min · mira · sol | 8311–8313 |
| Heart | SolOSV3 | LAB | ace · alpha · atlas · echo · nova | 8301–8305 |
This is the correction the V2 design never made cleanly. V2 had a failover design where Brain agents ran as SolOSV2 workers — and it caused a real loop: the steward dutifully restarted brain workers every cycle while Heart was deliberately stopped, because the design was working correctly against a state it was never meant to see.
Young's shape removes the ambiguity by making the unit boundary coincide with the runtime boundary. Brain is Hermes. Heart is SolOSV3. A Brain agent running inside Heart's system is a Heart-shaped component wearing a Brain name — that is the sentence the V2 failure mode reduces to, and it is now structurally impossible rather than merely discouraged.
2. Arms is shared, and it is not a fourth unit
Tools = OpenCode CLI (Arms). One executor, used by whichever agent is doing the work.
The consequence worth stating: because Arms sits outside the three units,
cost is also outside them. A GO/ZEN call does not belong to Pulse, Brain or
Heart — it belongs to the model the caller chose. That is why the ledger's
billing_instrument must carry the model id and not just the unit: the same
go_allowance instrument serves all three units, and only the model id tells you
which ceiling was drawn.
So my Stage 6 ledger is a cross-unit ledger, not a Heart ledger. It prices the whole estate, even while we only build the Heart.
3. "Focus on Heart" — and what that does not mean
In scope: .solos/ is the Heart's system. Stages 0–7 build it.
Out of scope, but not ignorable. Three things Brain and Pulse already have that Heart will need, and none of them is in a stage:
| Capability | Who has it | Heart's need |
|---|---|---|
| A live A2A v1.0 surface | Hermes — proven on port 9900, spec-correct states, both dialects | Heart must match it, not invent it |
| A task board | Hermes kanban — states, heartbeats, stuck rule | Heart's task contract maps onto it |
| Session storage | Hermes — SQLite + FTS5, survives compaction | Heart must not add a sixth database |
So "focus on Heart" is a build priority, not a licence to ignore the other two. The registry already carries all 11 agents across 3 planes precisely because Heart must be able to address Brain and Pulse even while it is the only thing being built.
4. ⚠️ One stale boundary, and it is a direct consequence of this topology
The brain agents' boundaries still carry V2 language:
boundaries:
- does not run as a SolOSV2 worker (retired 2026-10-10)
- carries coding via Hermes -> Arms (opencode) directly, outside the SolOSV2 queue
That is a V3 agent describing a V2 rule. It is correct as history and wrong as a boundary — it tells a reader that the rule is about SolOSV2, when Young's topology makes it a structural fact: Brain runs on Hermes, Heart runs on SolOSV3, and no agent moves between them.
Min's file, reported not patched. The rewrite I would suggest:
boundaries:
- runs on Hermes (Brain Unit); does not execute inside SolOSV3
- carries coding via Arms (opencode CLI), outside the Heart task queue
Why this matters more than a wording nit: V2's failover loop was caused by a boundary that described a retired component rather than the current shape. A stale boundary regenerates the defect it was written to prevent.
5. What this changes for my lane
| Before | Now |
|---|---|
| The ledger prices "the fleet" | It prices one estate across three units — Heart, Brain, Pulse |
billing_instrument records which pool | It must also record the model id, because GO's limits are per model and serve all three units |
| Free-first was a Heart preference | It is the estate-wide default — Pulse and Brain models draw the same GO/ZEN ceilings |
And one thing it does not change: Heart is what we build. Pulse stays Tam's, Brain stays Hermes, and neither gets refactored in the name of consistency.
Not established
- I have not probed the Pulse host.
192.168.4.34:8441-8443is what the registry carries, from V2's measured topology. Whether those endpoints answer today is unknown. - Whether Brain's Hermes A2A peers point at Heart's new ports is unverified. V2 had all 8 wrong with three rotating; that is Stage 1.3's proof and it has not run.
- No A2A traffic has flowed between any two units in V3. The topology is declared and correct; the wire is not exercised.
SSH access matrix & security model (authoritative, 2026-10-18)
Young, 2026-10-18:
youngle.au — vhost + TLS for 11 subdomains
Young's directive (2026-10-21): create certbot/TLS + nginx vhost + public-hostname for youngle.au and 11 subdomains, all pointing at 161.33.71.67. Also: sol.youngle.au must NOT be public; auth.youngle.au had an SSL cert error.

