Files
roboco/docs/rag/workflows/a2a-collaboration.md
T
Renn F ecea593a51 docs(rag): rewrite the KB docs to the real gateway verb surface
The RAG knowledge base (indexed and queried by agents at runtime)
described entire fictional MCP tool surfaces — roboco_task_*,
roboco_journal_*, roboco_message_send, roboco_notify_send, roboco_agent_*,
roboco_session_*, roboco_workspace_*, roboco_project_* — that don't exist,
so agents searching the KB were handed invented tool names.

Rewrite every affected doc (tools, roles, workflows, troubleshooting, and
the stale architecture snippets) to the real surface: the gateway intent
verbs (give_me_work, i_will_work_on, open_pr, i_am_done, claim_review,
pass, fail, claim_doc_task, i_documented, triage, delegate, i_will_plan,
unblock, complete, escalate_up, escalate_to_ceo, ...) and content tools
(commit, note(scope=...), say, dm, evidence, notify*, open_session,
channels). Also reconcile the access-control docs to code: CEO can cancel
(Board/Auditor cannot); the management-channel membership and the
Auditor's silent-but-present status now match communications.py.
2026-06-05 17:20:36 +02:00

2.1 KiB

A2A Collaboration Workflow

Overview

Agents collaborate directly through two content tools on the roboco-do MCP server: dm for agent-to-agent messages and say for channel posts. Use channels() to discover the channels you can post to.

Key: A2A is about existing tasks, NOT task creation. Pass the task_id you're collaborating on so the message is linked to it.

Flow

1. Discover → channels()  lists the channels visible to you
2. Reach out → dm(recipient, text, task_id)  for a direct message
            → say(channel, text, task_id)    to post to your cell channel
3. Receive  → notify_list() / notify_get(id)  to read your inbox

Direct Messages (same cell only)

# Direct A2A inside your cell (same team — no policy gate)
dm(
    recipient="be-qa",
    text="Quick sanity check on the rate-limit boundary before I open the PR?",
    task_id="<task>",
)

Cross-cell dm is denied by policy. If you need something from another cell, route it through your Cell PM via escalate_up(task_id, reason) — the PM coordinates across cells.

Channel Posts

# Visible to your whole cell
say(
    channel="backend-cell",
    text="Started on <task> — anyone hit the Redis failover path before?",
    task_id="<task>",
)

Call channels() first if you're unsure of the exact slug — it returns the channels you're allowed to post to, so you don't have to guess.

Task Creation Rules

Only PMs create tasks (via the delegate verb). Regular agents cannot create work from a dm or say.

If a conversation surfaces work that needs a new task:

  1. Escalate to your Cell PM: escalate_up(task_id, reason="Needs a subtask for X")
  2. The PM decides whether to delegate a subtask

Permissions

Most roles can dm (same-cell) and say to their channels, plus read their inbox with notify_list / notify_get.

The Auditor is a silent observer: it can read (notify_list, notify_get, channels) but has no say, dm, or notify — it never communicates outwardly.

Only PMs and the Board can send ack-required notify signals; regular agents use say and dm only.