Module 3 · Planning, Context & Multi-agent Systems · scripted

The Architecture of Coordination

25 minoutcomes: multi-agent

Step back from the tools

Earlier we designed individual coordination tools — ask_statistician, start_conversation. Now step back from names and descriptions and ask the architect's question: what are the primitives at our disposal? For coordinating conversations, there are three:

The three primitives

START (template)        bring a new conversation into existence.
                        The template is the role: a system message,
                        a tool set, initial context. Starting
                        instantiates it.

WRITE (conversation)    add a message to an existing conversation —
                        usually into its user seat.

READ (conversation)     look at an existing conversation:
                        its final message, its tail (status),
                        or a search through it (selective read).

Notice what start versus read/write resolves: the role-vs-instance question. "A conversation with a statistician" is start — a role, instantiated. "What did that statistician say" is read — a particular, existing conversation.

And notice what is deliberately not a primitive: interrupt. Reaching into another agent's loop mid-thought makes its trajectory — and your reasoning about the system — dramatically harder. We coordinate at message boundaries: you may write to a conversation, and what it does with your message is its own affair.

Every architecture is a policy over the primitives

Each coordination pattern people name and diagram is just a rule about who may use which primitive on whose conversation:

Patterns, reduced to permissions

Sync delegationSTART child; blocked READ of its final message
Async delegationSTART child; keep pointer; READ its tail later
HandoffSTART child + grant it READ of my whole conversation
Reach-ingrant child READ(search) of my conversation — it pulls only what it decides it needs
Shared workspaceboth conversations WRITE and READ a third place (a database, a file tree, a notes doc)

When you meet any multi-agent framework — whatever it calls its crews, swarms, or graphs — ask one question and its whole design will unfold: who may start, write, and read which conversations?

A worked example: three agents write a report

Let's build a real system and watch it run. The goal: a weekly operations report. The design — first the map, as always:

The system we're about to watch

The same design, as a permissions table

startwrite to read
coordinatorresearcher, — researcher (tail),
writerwriter (final)
researcher— shared notes shared notes
writer— — shared notes

Read that table the way you'd read an org chart — because that is what it is: who may open a conversation with whom, who reports upward, what lives in the shared filing cabinet. Multi-agent architecture is organizational design for conversations — teams, specialists, channels, and hierarchy, rediscovered one table at a time.

Now the run. Three walls:

Example 1a · The coordinator's wall
user

Weekly operations report, please.

assistant
⟨tool_use⟩
start_conversation(template = "researcher",
                   task = "Gather this week's operations data:
                   deliveries, delays, incidents. Write findings to
                   shared-notes as structured bullet points.")
user
⟨tool_result⟩
Started: c-201 (running).
assistant
⟨tool_use⟩
read_status(conversation = "c-201")
user
⟨tool_result⟩
Ended. Final message: "Findings written to shared-notes: 9 items."
assistant
⟨tool_use⟩
start_conversation(template = "writer",
                   task = "Write the weekly operations report from
                   shared-notes. Audience: site managers. One page.")
user
⟨tool_result⟩
"Draft complete: three delivery delays (all weather), one resolved
incident, throughput up 4%. Full text attached…"
assistant

Here is this week's report: [draft]. Data was gathered from this week's operations records; the writer worked only from the researcher's structured findings.

NoteThe coordinator never touched raw data and never saw the researcher's whole conversation — only its tail, and later the writer's final message. Its window stays small; its trajectory stays clean.
Example 1b · The researcher's wall (excerpt)
system

You are an operations researcher. Gather facts; write structured, source-tagged findings to shared-notes. No prose reports.

user

Gather this week's operations data: deliveries, delays, incidents. Write findings to shared-notes as structured bullet points.

assistant
⟨tool_use⟩
query_deliveries(week = "2026-W33")
user
⟨tool_result⟩
412 deliveries; 3 delayed >2h (storm, 19 Aug).
assistant
⟨tool_use⟩
write_notes(entry = "Deliveries: 412; 3 delayed >2h — cause:
storm 19 Aug [source: delivery log]")
NoteThe researcher has tools the coordinator never had — and no idea a "coordinator" exists. Its world is its task, its tools, and the notes it was told to write.
Example 1c · The writer's wall (excerpt)
system

You are a report writer. Write for the stated audience, from shared-notes only. Do not invent facts not present in the notes.

user

Write the weekly operations report from shared-notes. Audience: site managers. One page.

assistant
⟨tool_use⟩
read_notes()
user
⟨tool_result⟩
[9 structured findings: deliveries 412, 3 delayed (storm)…]
assistant

Weekly Operations Report — W33. Deliveries: 412, with three delayed by the 19 Aug storm… [continues]

NoteThree conversations, three small clean windows — and none of the three ever saw the others. The only things that crossed boundaries: two task briefs, one status line, nine structured notes, one draft. Count the words that crossed versus the words that existed.
Read the system like an org
  • Which permission in the table, if added, would most damage this system? (Try: writer may READ the researcher's full conversation.)
  • Which permission, if removed, breaks it entirely?
  • Where does an error made by the researcher get caught — and where would it flow unchecked?

Trajectories become a braid

One conversation is one trajectory. This system is three trajectories, coupled only at the points where something crossed — two briefs, a status read, the notes, a draft. Everywhere else, the three ran independent and untouched. That is what the permissions table really controls: where trajectories are allowed to touch.

Three trajectories, four touch points

Couple them too much (share everything, read everything) and you've rebuilt one giant noisy conversation with extra steps. Couple them too little and the pieces can't compose. Choosing the touch points — what crosses, in which direction, saying how much — is precisely the decomposition problem, and it gets a lesson of its own later.

The playwright's responsibility, at scale

One earlier thread now runs through the whole architecture: at every touch point, somebody composed what crossed. The coordinator wrote the researcher's world; the researcher's notes became the writer's entire evidence; the writer's draft became what the user believes happened this week. Every arrow in the architecture diagram is a shadow being cast — and the org design decides who casts it, from what knowledge, for whose wall.

Your turn

Design a three-agent system for a workflow in your research domain. Deliver exactly three artifacts: the coordination diagram, the permissions table, and — for each arrow in the diagram — one sentence saying what crosses there and why that much and no more. Then stress-test on paper: inject one error into each agent and trace, with your finger on the diagram, where it flows.