Signals peer unit (aegir.service)
Ægir joins the Signals lattice as peer id aegir. Process lifecycle is a
systemd oneshot under signals.target; the wire contract is
zndx.engine.v1.Engine on :50151.
Full-stack doctrine: signals.target start must bring the entire
project devenv stack (UI + gateway + capability engine + supporting services),
not a lattice-only process. Accept is lattice Status and product surfaces.
| Fact | Value |
|---|---|
| Peer id | aegir |
| Unit | aegir.service (After=signals-ready.service) |
| Wrappers | scripts/systemd_start.sh / scripts/systemd_stop.sh |
| gRPC lattice | :50151 — zndx.engine.v1.Engine (+ native + OIP) |
| Gateway | :8091 — http://127.0.0.1:8091/api/health |
| Vite UI | :5173 |
| Postgres | :5555 — never Signals :5455 / RustFS :9010 |
| Capability | none hosted — instruct / thinking are forwarded to the peer hosting Qwen3.8-27B (Gaius); Status.endpoints empty is honest |
| Status.project | aegir |
| Status.surfaces | kind=primary → product UI (AEGIR_PRIMARY_UI / :5173) |
| ServerQuery | remotes + head, configured peers, same surfaces |
Wrappers
systemd_start.sh runs just up / devenv up -d (process-compose includes
capability-engine on :50151, gateway, vite, …) and blocks until:
Engine/Statuson:50151(project=aegir)- Gateway health on
:8091 - Vite on
:5173
systemd_stop.sh runs devenv processes down for this tree, then reclaims
any leftover aegir.engine on :50151. It does not call host teardown or
GPU wipe (sibling leases).
# Same path as the unit
just up
grpcurl -plaintext 127.0.0.1:50151 zndx.engine.v1.Engine/Status
curl -sf http://127.0.0.1:8091/api/health
curl -sf -o /dev/null http://127.0.0.1:5173/
just down # or: devenv processes down
Operator (from Signals)
just install-systemd --peers aegir --enable
sudo systemctl start signals.target
just lattice-ci --require aegir
Platform Metaflow
When federated, platform Metaflow is SoR:
export METAFLOW_SERVICE_URL=http://127.0.0.1:30180
Federation waffle
Status.surfaces advertises the lineup UI (never loopback). Engine/ServerQuery
answers remotes (git remote -v + HEAD), configured lattice peers plus
live Engine/Announce hints, and the same surfaces. The header waffle
(/api/aegir/v1/federation/surfaces) walks that PEERS set over S2S and lists
only engines that advertise a primary UI; a foreign host:port keeps its
own identity (multi-host). LAN IP visits rebase this-host links onto the
browser Host (same as Signals / Gaius).
External engines (Hermes, Metabase) join by Announceing their lattice
host:port here; Ægir remembers the hint until TTL. Launchers stay
pull-only.