title: Agentic layer is a HATCH projection — no new erid.tech citizen date: 2026-06-29 status: Accepted phase: cross-cut (folds into Phase 7) predecessor: docs/decisions/2026-05-08-erid-domain-adoption.md related: - docs/decisions/2026-05-08-agentic-emission-v1.md - docs/decisions/2026-05-19-agentic-emission-canonical-fold.md - docs/north-star/intent.md (drift watch #1)
Agentic layer is a HATCH projection
Context
hatch.devarno.cloud/agents ships an empty agents-registry UI (columns: AGENT, TYPE, OWNER, APPROVAL, CAPABILITIES, RATE). The producer side does not yet exist anywhere in the rocky-hq pantheon. Separately, the codebase already contains several agent-shaped surfaces that have grown up under other names: COUNCIL personas (console/src/lib/workspace/council.ts), SNIFFER analyzer runs (console/src/lib/sniffer/analyzer.ts), STRATT strategy registries (console/src/lib/stratt/registry.ts), RALPH runs, and RELAY executors. Each emits — or is positioned to emit — work that an operator would recognise as "an agent did a thing."
Three options were considered for naming and hosting an "agentic layer":
- New citizen — register
agents.erid.tech(orcrew.erid.tech) as a 13th ADR-0009 subdomain with its own subsystem (SS-09 AGENTS) holding a primary agent registry. - First-class subsystem, existing surface — admit SS-09 AGENTS as a new entry in the redesign-spec subsystem map but host it inside
rocky.erid.tech, with its ownconsole/src/lib/agents/namespace owning a primary agent registry. - Cross-cut projection — no new citizen, no new subsystem. Each existing subsystem (SS-01..SS-08) emits
agent.*HATCH events when an agent-shaped thing registers, runs, or completes.hatch.devarno.cloud/agentsreads the HATCH feed and projects those events to its column schema. Authoritative state lives in each producer subsystem; the registry is a view.
Decision
Adopt option 3 (cross-cut projection).
- No new erid.tech citizen. The ADR-0009 citizen list is closed at 12 entries.
- No new SS-NN subsystem. "Agentic layer" is not a thing rocky-hq builds; it is a vocabulary projected over things rocky-hq already builds.
- Authoritative state per producer. COUNCIL owns council members; STRATT owns stratt entries; RALPH owns runs; RELAY owns executors; etc. No subsystem hands its registry to a central "agents" store.
- HATCH carries the projection. A new event family
agent.*(agent.registered,agent.invoked,agent.completed,agent.revoked) rides the existing HATCH audit pipeline. Producers tag each event withscope = council|sniffer|stratt|ralph|relay|driverandowner = <workspace-slug>. - Contract. A new zod schema
agent-registration.v1(sibling Go module per the Phase 5b precedent) defines the registration payload. Lives atcontracts/src/agent/withcontracts/go/agent/mirror. - Consumer.
hatch.devarno.cloud/agentsreads the HATCH feed filtered toagent.*and projects to its visible columns:- AGENT = registration
name - TYPE =
scope - OWNER =
owner(links torocky.erid.tech/workspaces/<slug>) - APPROVAL = airlock-gated state, new airlock verb
agent.approve - CAPABILITIES = declared verbs from registration payload
- RATE = derived from Polar entitlement tier (seats already piped through hearth env vars per Phase 5c plan)
- AGENT = registration
- Auth. Re-uses existing airlock cross-domain handoff (
console/src/lib/airlock-handoff.ts); no new identity surface.
Why projection, not registry
Drift-watch #1 in docs/north-star/intent.md explicitly rules out the "generic agent ledger" anti-shape. An authoritative agents-registry — even one scoped to rocky-hq — would normalise the very surface that drift-watch was written to keep out. A projection over per-subsystem HATCH writes preserves the invariant: every agent in the view traces to a specific subsystem's existing purpose, and removing that producer subsystem removes its agents from the view automatically.
A second-order effect: keeping authority distributed forces each subsystem to own its agent vocabulary on its own terms (COUNCIL's "personas," STRATT's "strategies," RALPH's "runs"). The hatch projection unifies the operator view without flattening the producer semantics.
Phasing
Folded into Phase 7 as three sub-phases. No Phase 8 invented.
- 7a —
agent-registration.v1contract (zod + Go mirror),agent.*HATCH event family added to the HATCH event schema, airlockagent.approveverb wired. - 7b — Producer wiring per subsystem. One PR per SS-NN (council, sniffer, stratt, ralph, relay, hearth driver invocations). Mechanical — uses the proven
emitHatch()shape (console/src/lib/ralph/hatch.ts:6,console/src/lib/relay/executor.ts:42). - 7c —
hatch.devarno.cloud/agentsconsumer wiring; Polar entitlement → RATE column.
Phase 5c (hearth LocalDocker + RPC, in flight on docs/phase-5c-plan) and Phase 6 (K8s driver, cloud transport) remain unchanged. Phase 5c already provisions the infrastructure agents will eventually run on; this decision just establishes that those agents are projected into hatch when they exist, not registered.
Consequences
- Open question — COUNCIL personas. Personas are the most agent-shaped construct in the codebase today and map cleanly to hatch's existing "Crew" sidebar tab. The default reading is that COUNCIL personas DO register as agents under
scope=council. This question is flagged here for the Phase 7a PR to resolve explicitly; the precedent it sets defines what counts as "an agent" project-wide. - Producer fan-out. 7b touches every SS that holds agent-shaped state. Cost is bounded — HATCH emission is a three-line pattern that already exists in two subsystems. Suggested order: ralph → relay → council → sniffer → stratt → hearth (driver-invocation events).
- Hatch sidebar already shipped the surface. No devarno-cloud changes blocked; the consumer wiring in 7c is additive against an existing empty table.
- Contracts repo gains a new top-level schema family. Follows the same nested Go module tagging convention codified in
docs/decisions/2026-05-25-phase-5b-close.md§1 — bump bothv0.x.0andgo/v0.x.0together. - No retroactive registration. Existing council/sniffer/stratt entries are not back-filled into HATCH on contract landing. The projection is forward-only; pre-7b agents stay invisible to the hatch view by design.
Sources
docs/north-star/intent.md§drift watch #1 — anti-shape that gates this decisiondocs/decisions/2026-05-08-erid-domain-adoption.md— closed citizen listdocs/decisions/2026-05-08-agentic-emission-v1.md+2026-05-19-agentic-emission-canonical-fold.md— CAIRNET wire format (distinct from this decision; agentic-emission is producer telemetry, agent-registration is identity)docs/specs/2026-05-02-rocky-system-redesign.md§subsystem map — confirmed no SS-NN for agents at time of writingconsole/src/lib/airlock-handoff.ts,console/src/lib/relay/executor.ts:42,console/src/lib/ralph/hatch.ts:6— existing cross-domain + HATCH emission patterns this decision builds on