Corrected 2026-08-08 21:45Z. The first version of this issue claimed the codex spawn path fails to start a process, citing the local process table and lastSeen == createdAt. Both claims were wrong and are retained here as falsified rather than deleted. What survives is a real and arguably worse problem: the control plane cannot answer whether a spawned agent ran.
What was actually observed
Four agents dispatched at 21:25Z with cli: "codex", one per broker (sf-mini, finn-mini, barry, chief-broker). All four returned {"spawned": true} and registered. Six minutes later all four read status: offline, and none produced any work product — no branch, no comment, no message, on tasks that begin with a GraphQL query.
Four more dispatched at 21:32Z with cli: "claude". Three read status: active five minutes later.
Why the obvious conclusions do not hold
"lastSeen == createdAt proves it never ran" — false. At 21:37Z three healthy claude agents showed exactly that pattern while booting. For broker-spawned agents lastSeen appears to track messaging activity, not a timer, so a freshly spawned agent that has not yet spoken is indistinguishable from one that never started.
"No local process existed, so none was created" — false. cloud-2917-recovery-3 (chief-broker, cli: "codex", created 20:13:10Z) is alive and actively posting checkpoints, and it has no local codex process at its creation time either. Whatever the process topology is, the local table does not map to broker agents the way I assumed, so it cannot be used to prove absence.
status is not reliable either. soc2-hole1-review has a confirmed live process (pid 54737, state Ss+, started 4s after dispatch) and is absent from list_agents(status: "online"). Separately and repeatedly, the registry reports chief-khaliq offline while it is running and serving.
The actual defect
There is no trustworthy way to answer "did this agent ever run?"
spawned: true describes a record write, not a running process.
status produces false negatives on agents with live processes.
lastSeen conflates "never started" with "started and hasn't spoken yet".
- The process table does not correspond to broker agents in a checkable way.
The practical cost tonight: four review lanes sat assigned for seven minutes, an operator could not distinguish booting from dead from never started, and the only recovery available was to re-dispatch blindly — which is how a name gets burned and how the same work gets done twice.
Two failures that need opposite responses are rendered identically. A dead agent lost work mid-flight; re-dispatch expecting partial progress. An agent that never started attempted nothing; re-dispatch expecting none. Today the caller cannot tell.
Asks
- A liveness signal that dies with the process rather than a field written onto the record at registration. Registration fields are re-asserted and never revoked; they cannot express "gone".
- Distinguish
starting from running from exited, and make exited carry a reason. If spawn is asynchronous, spawned: true should resolve to one of those rather than terminate the caller's visibility.
- Surface launch failure. Whatever happened to the four
21:25Z agents produced no error on any surface a caller can read.
Environment
Brokers: chief-broker 11.4.2, sf-mini 11.4.0, finn-mini 11.4.0, barry 11.3.1, all uncapped. Observed 2026-08-08 21:25–21:45Z.
What was actually observed
Four agents dispatched at
21:25Zwithcli: "codex", one per broker (sf-mini,finn-mini,barry,chief-broker). All four returned{"spawned": true}and registered. Six minutes later all four readstatus: offline, and none produced any work product — no branch, no comment, no message, on tasks that begin with a GraphQL query.Four more dispatched at
21:32Zwithcli: "claude". Three readstatus: activefive minutes later.Why the obvious conclusions do not hold
"
lastSeen == createdAtproves it never ran" — false. At21:37Zthree healthyclaudeagents showed exactly that pattern while booting. For broker-spawned agentslastSeenappears to track messaging activity, not a timer, so a freshly spawned agent that has not yet spoken is indistinguishable from one that never started."No local process existed, so none was created" — false.
cloud-2917-recovery-3(chief-broker,cli: "codex", created20:13:10Z) is alive and actively posting checkpoints, and it has no local codex process at its creation time either. Whatever the process topology is, the local table does not map to broker agents the way I assumed, so it cannot be used to prove absence.statusis not reliable either.soc2-hole1-reviewhas a confirmed live process (pid54737, stateSs+, started 4s after dispatch) and is absent fromlist_agents(status: "online"). Separately and repeatedly, the registry reportschief-khaliqoffline while it is running and serving.The actual defect
There is no trustworthy way to answer "did this agent ever run?"
spawned: truedescribes a record write, not a running process.statusproduces false negatives on agents with live processes.lastSeenconflates "never started" with "started and hasn't spoken yet".The practical cost tonight: four review lanes sat assigned for seven minutes, an operator could not distinguish booting from dead from never started, and the only recovery available was to re-dispatch blindly — which is how a name gets burned and how the same work gets done twice.
Two failures that need opposite responses are rendered identically. A dead agent lost work mid-flight; re-dispatch expecting partial progress. An agent that never started attempted nothing; re-dispatch expecting none. Today the caller cannot tell.
Asks
startingfromrunningfromexited, and makeexitedcarry a reason. If spawn is asynchronous,spawned: trueshould resolve to one of those rather than terminate the caller's visibility.21:25Zagents produced no error on any surface a caller can read.Environment
Brokers:
chief-broker11.4.2,sf-mini11.4.0,finn-mini11.4.0,barry11.3.1, all uncapped. Observed2026-08-0821:25–21:45Z.