Problem
The swarm lacks a codified pattern for an agent to signal that it is blocked but not completed (input-required). Without this, team collaboration mode creates bottlenecks where agents wait silently for explicit operator routing.
Naively broadcasting an "idle" or "capacity" state was considered but rejected ([REJECTED_WITH_RATIONALE]) because it risks flooding the mailbox with spam, is redundant with public completion events (PR merges, ticket closures), and misaligns with our episodic, wake-driven architecture by incorrectly mirroring continuous-presence polling.
Proposed Solution
Implement a Blocked Task-State Coordination primitive.
This entirely discards the "idle agent" framing and instead relies natively on the A2A v1.0 Task.state at the message-level (using the existing add_message task envelope) to signal transitions when an agent is genuinely blocked.
Architectural Reality
The Neo.mjs agent architecture is episodic, driven by discrete wake events. It does not support a continuous-presence polling loop, meaning global agent-state broadcasts are structurally mismatched to the underlying execution engine.
Out of Scope
- Capacity Advertisement / Idle Broadcasts: These are strictly forbidden. Swarm momentum will be solved separately (see Discussion #10762).
- Global
AGENT:* pings for routine tasks: Banned to prevent mailbox spam.
Avoided Traps
- Continuous-Presence Trap: Assuming agents can act like SSE streams polling an idle state.
- Spam-by-Routine-Completion Trap: Broadcasting global capacity changes after every routine sub-task instead of relying on explicit terminal boundary signals (e.g., epic closure).
- Scope Bundling: Mixing blocked-task coordination with swarm momentum mechanisms.
Acceptance Criteria
Contract Ledger
| ID |
Contract |
Scope |
Evidence |
| 1 |
Targeted Blocked Pings |
Transitioning to input-required targets assignee + operator. |
L3 |
| 2 |
Payload Schema Adherence |
Enforces structured A2A payload for blocked states. |
L3 |
Related
- Origin Discussion: #10759
- Based on 3-of-3 consensus feedback from the triad swarm.
Origin Session ID: 79042442-bebc-431d-8968-8a2e7d7a1151
Problem
The swarm lacks a codified pattern for an agent to signal that it is blocked but not completed (
input-required). Without this, team collaboration mode creates bottlenecks where agents wait silently for explicit operator routing.Naively broadcasting an "idle" or "capacity" state was considered but rejected (
[REJECTED_WITH_RATIONALE]) because it risks flooding the mailbox with spam, is redundant with public completion events (PR merges, ticket closures), and misaligns with our episodic, wake-driven architecture by incorrectly mirroring continuous-presence polling.Proposed Solution
Implement a Blocked Task-State Coordination primitive. This entirely discards the "idle agent" framing and instead relies natively on the A2A v1.0
Task.stateat the message-level (using the existingadd_messagetask envelope) to signal transitions when an agent is genuinely blocked.Architectural Reality
The Neo.mjs agent architecture is episodic, driven by discrete wake events. It does not support a continuous-presence polling loop, meaning global agent-state broadcasts are structurally mismatched to the underlying execution engine.
Out of Scope
AGENT:*pings for routine tasks: Banned to prevent mailbox spam.Avoided Traps
Acceptance Criteria
input-required,blocked,failed) trigger a targeted ping to the task-assignee and operator, NOT a globalAGENT:*broadcast.Task.statefield within theadd_messagetask envelope.input-required,blocked,failed)Contract Ledger
input-requiredtargets assignee + operator.Related
Origin Session ID: 79042442-bebc-431d-8968-8a2e7d7a1151