Skip to content

Spawned agents produce nothing and the control plane cannot say whether they ran #1469

Description

@khaliqgant

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

  1. 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".
  2. 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.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions