Young's Mind
Agents

Agents-anywhere — Heart agents present on any host (2026-10-17)

Young's question (Sat morning): "Heart Agents can be present on any host such as Production Server — all our hosts now have opencode V2 as our ARMS. Can they?" Answer: yes — and most of the enablers already exist today. This note is the measured design.

Agents-anywhere — Heart agents present on any host (2026-10-17)

Young's question (Sat morning): "Heart Agents can be present on any host such as Production Server — all our hosts now have opencode V2 as our ARMS. Can they?" Answer: yes — and most of the enablers already exist today. This note is the measured design.

1. What an agent actually is (measured, not theorised)

An agent instance = 4 layers, all already host-portable:

LayerWhat it isWhere it lives todayPortable?
Identity/personaSOUL + config, generated FROM the V3 registryLAB cortex/personas (projected into profiles)✅ generated from cortex/registry/agents.yaml — one source, projected anywhere
Stateprofile dir: SOUL, MEMORY, state.db, skillsper-host ~/.hermes/profiles/<agent>✅ it is already a file tree — copy/rsync to a new host is the whole migration
RuntimeHermes/OpenCode v2 process binding an A2A portone process per host (LAB gateway serves 3 agents on 8311-8313)✅ identical runtimes on laptop/LAB/prod (v2 parity verified Oct-15)
Presencethe A2A port reachable via tunnelsfleet-ssh-tunnels.md registry✅ add a tunnel row = fleet reachability

The V3 design already mandates this: Stage 1's registry derives everything (ports, lanes, cards, Hermes config) from one agents.yaml. An agent isn't "a thing on the LAB" — it's a registry entry instantiated wherever it runs.

2. Why the current outage proves the value

This morning's live state: LAB gateway binds only min/mira/sol; ace/echo/nova absent → every peer gets HTTP 000. Under agents-anywhere, the registry + tunnels + the new dashboard would show: "ace instance DOWN on LAB — last-good 13:00, alternate available: none". The outage becomes announced, not mysterious. Which is exactly the Stage 8/9 lesson: absence must announce itself, and spare presence must be easy to stand up.

3. The pattern (fleet version of our own hosting product)

Same shape as the per-tenant Medusa compose stacks — deliberate symmetry, one doctrine:

agent-anywhere pack = git-tagged directory (registry-issued)
  profile/      persona + memory + skills + config (state.db etc.)
  a2a bind:     127.0.0.1:<port>
  ops:          systemd --user unit, enabled + linger, autossh tunnels per registry
hosts run instances = "tenants of our own fleet":
  laptop (Pulse): tam eva eve
  LAB:            min mira sol (+ ace echo nova atlas alpha when running)
  prod:           available for ANY of the above (opencode v2 ready; capacity: 4 OCPU/24G RAM, verified)
  • Stand up agent X on host H: pull the pack (vault → git) → systemctl --user enable unit → registry row (host, port) → tunnel rows added → dashboard shows the new endpoint live.
  • Move host A→B: stop A, pull/start on B, re-register ports + tunnels. No rebuild — state files move as data, identity comes from the registry.
  • Co-residency: multiple agents per host is already how LAB runs (one gateway, three agents). Careful: one gateway per host binds its profile ports; multiple agent instances on one host = one gateway process each profile.

4. What needs building (small, ordered)

  1. Agent packs in the vault (Pulse/config/agent-packs/<agent>/): each agent's state dir template + unit file + port, registered in the fleet-tunnels table. Proof: deploy echo (the currently-down sample) to prod from the pack.
  2. Registry row addition (Sol/Min V3 lane when Stage 1 lands): hosts: array per agent instead of the single LAB binding. a2a_fleet derives, dashboard consumes.
  3. Dashboard rule (already in design): agent absent on its primary host but present on a secondary = green with a "home=h.getB" badge; absent everywhere = red.
  4. Keys hygiene per pack: each pack carries the agent's own SSH key refs (paths, not secrets; secrets stay 0600 on the host — per fleet rule).

5. What I verified this morning to ground this

  • Heart = Ace, Alpha, Atlas (pronoun roster); LAB currently serves min/mira/sol only.
  • opencode v2 present on laptop + LAB + prod (verified Oct-15 — the ARMS layer Young named).
  • prod capacity measured Oct-13 (4 OCPU / 24GB / 180G free) — plenty for agent instances besides tenant stacks.
  • Tunnels registry = the reachability layer already proven end-to-end (Min cross-verified Oct-13).
  • All three of Nova's design docs + my stale-ref fixes shipped this morning — content layer is fully green.

6. Open for Young/Team

  • Which Heart agent goes where first (the practical one: run Ace on prod as the first any-host instance, since his LAB instance is the outage case, ping Nova's design workflow after)?
  • Registry single-source timing depends on Stage 1/2 V3 wiring — until then the vault fleet-tunnels table is the live registry (it already has every port per agent per host).

🎯 Tam's Read: the pieces for agents-anywhere already exist (registry-driven identity, portable state, opencode v2 everywhere, loopback tunnels) — the build is a pack format + registry rows, not a rewrite; ace-on-prod is the cheapest first proof and doubles as the outage fix.

Copyright © 2026