The planner run, decision by decision
The planner reads three cards and maps skills to agents. Lane one: SendMessage for run-tests on commit a41d7c3 returns task 954267b7 completed, and summary.json shows 13 passed and 0 failed. Lane two: SendMessage for review-diff returns TASK_STATE_INPUT_REQUIRED asking for the base branch, the planner answers main on the same task, the task completes, and review.json holds one low-severity finding. Lane three: SendMessage with a bearer token for deploy returns TASK_STATE_AUTH_REQUIRED, the planner subscribes, an operator approves outside A2A on the first frame, and the stream ends at TASK_STATE_COMPLETED. The planner decides after each lane and would stop on a failed test or a high-severity finding.
DISCOVER: ONE CARD PER PORT, SKILLS MAPPED TO AGENTS
DECISIONS
stop
if the test task does not complete, a test fails, or a finding is high severity
test-runner
run-tests
code-reviewer
review-diff, answer-question
deployer
deploy, needs a bearer token
delegate run-tests
SendMessage
commit a41d7c3
TASK_STATE_COMPLETED
task 954267b7
summary.json
passed 13, failed 0
tests
13 passed, go on
delegate review-diff
SendMessage
refunds.diff as a raw part
TASK_STATE_INPUT_REQUIRED
which base branch?
answer
SendMessage, same task
answer from context: main
TASK_STATE_COMPLETED
task 80bc7784
review.json
1 finding, severity low
review
1 finding, 0 blocking
delegate deploy
SendMessage
build 2026.10.06-1, token
TASK_STATE_AUTH_REQUIRED
an operator must approve
follow
SubscribeToTask
frame 1: the Task snapshot
on frame 1
operator approves
POST /approve, not A2A
3 more frames
TASK_STATE_COMPLETED
task a31361b3, stream ends
deploy
TASK_STATE_COMPLETED