Uni system · down and back up

How work moves

Work goes down: Aaron to #Uni, #Uni to the room that owns it, the room to a Claude Code worker. Results come back up the same chain. The way down is solid today. The way back up still leans on a watch job that checks every 30 minutes, which the hooks project replaces.

Today

How work moves today Down the left: #Uni routes Aaron's request to a room with relay_wake; the room writes a brief, records a run note and starts a Claude Code worker, which builds, tests, gets a Codex review and ends with a result line in its log. Up the right: a watch job checks every 30 minutes and reads the result; the room checks the work and writes [done T-NN]; the relay plugin's hook closes the task and wakes whoever asked; #Uni and Aaron hear the result. Four known gaps are listed underneath. Down · the brief Up · the result #Uni · chief of staff Aaron asks; #Uni sends it where it belongs relay_wake: his words, the goal #techne · the room that owns it decides this needs a worker 1 writes the brief BRIEF.md 2 records a run note in the vault 3 starts it claude -p, in the background Claude Code worker · one per job reads the brief, builds, tests, commits asks Codex for a review when the brief says ends with a report: status, summary, checks its log ends with one "result" line, then the process exits read later Watch job · every 30 min a model turn: still running? if done, read the result and post it #techne checks the work tells Aaron the result and writes [done T-NN] relay plugin hook, after that turn task → done, run note closed wakes the room that asked [blocked] or [decision] → #Uni at once #Uni hears at once if it started the work; otherwise from the hourly room digest or catch-up on Aaron's next message Aaron gets the result he needs, unasked Known gaps today 1 A launch that fails at once looks like silence until the next check (one died in 24 ms). 2 Each check is a model turn, and a result can wait up to 30 minutes. 3 [done] only happens if the room takes a turn and writes it. A dead worker leaves its run note "running". 4 If a room is still busy at its 45-minute check, the stall timer stops itself; a later silence is never chased.
Today. Amber dashes: the stopgap watch job. Swipe sideways, or open the full-size picture.
  1. #Uni routes. #Uni is a router, not a builder. When Aaron asks for something that has a home, #Uni wakes that room with his words, the source and the deliverable, and says in one line where it went.
  2. The room owns the job. It writes a brief (outcome, context, boundaries, what counts as done), records a run note on the task, and starts a Claude Code worker as a background service. It checks within minutes that the worker is really running.
  3. The worker builds. It reads only the brief and its own instructions; Aaron's private context reaches it only through the brief. It tests, commits, asks Codex for an independent review when the brief says so, and ends with a report: status, summary, artifacts, checks, open items.
  4. A watch job notices the finish. Each worker gets a scheduled watch job that stays silent while it runs and, once it has finished, reads the result and posts it. This is the stopgap the hooks replace.
  5. The room closes the loop. It checks the work, tells Aaron what he needs, and writes [done T-NN]. The relay plugin's hook marks the task done, closes the run note and wakes whoever asked.
Technical detail: today's moving parts

After the hooks

The design gives every worker exactly one "finished" event, written the moment it stops, and delivers that event to the room that launched it until the room confirms it. No watch jobs, no polling turns, and a failed launch is reported like any other finish.

How work moves after the new hooks A room starts work with one launcher command, which writes a run record and starts the worker with hooks. Hooks record start, a heartbeat on each tool, the report, and the end. When the worker exits, a finish step writes one finished event with a status. The event goes through an outbox and a new drainer to the room, which checks the work and writes [done T-NN]; that turn counts as the acknowledgement. Every 5 minutes a reconcile job catches anything the hooks missed and escalates to #Uni after 45 minutes. Stages 0 and 1 run now in record-only mode; waking rooms comes later; a judgment layer comes after that. The room starts work with one command launch --room R --task T-NN --brief F Run record one file per run: room, task, unit, state The worker, with hooks on start→ running each tool→ heartbeat on stop→ the report on end→ ended, and why exits, any way at all Finish step · one "finished" event completed · blocked · failed · failed to start · killed · unknown Outbox → new wake queue → drainer delivered until the room confirms it The room wakes with the worker's report checks it, writes [done T-NN]; that turn is the receipt Then as today task closed, the asker or #Uni woken, Aaron told Reconcile · every 5 min catches what the hooks miss: • a unit gone with no finish → "unknown" • not confirmed in 15 min → send again • still nothing at 45 min → tell #Uni once • quiet too long → "slow", then "stuck" Stages 0–1 record only, for 2 days: built, and live since 18 Oct 2 pilot: wake one room only (Aaron switches it on) 3 all rooms; the watch jobs retire Judgment layer · later Rules decide first. For a few narrow questions, a small model may answer: • does this need Aaron? • should another room hear now? • is this worker stuck? tried in shadow first, numbers pick
After the hooks. Everything amber is new: stages 0–1 run in record-only mode, and nothing wakes a room yet. Swipe sideways, or open the full-size picture.
QuestionTodayAfter the hooks
Who notices a finish?A watch job, every 30 minutes, set up by hand per workerThe worker's own exit, at once
A launch that fails at once?Looks like silence until the next checkA "failed to start" event, like any finish
What reaches the room?Whatever the watch job's model turn writesA fixed event with a status, and the worker's report as data
Lost or doubled news?Possible: the wake queue can drop or repeat a lineDelivered until the room confirms; repeats are skipped
Cost of waitingA model turn per checkNo model turns until there is news
Technical detail: the design