Multi-agent & broadcasts
How agents in the same tenant share signals through scoped broadcasts.
Memory in MarkDB is partitioned per agent: an agent's recall sees its
own (tenant, app, agent) history. Broadcasts are the escape hatch -- a way
for agents in the same tenant to publish signals other agents can read.
Scopes
A broadcast is addressed to a scope, a caller-defined coordinate pair:
| Field | Meaning |
|---|---|
scope_type | A category you choose, e.g. project, team, swarm. |
scope_id | The specific instance, e.g. a project id. |
Any agent in the same tenant that queries the same (scope_type, scope_id) sees
the broadcasts published there. Scopes are just strings you agree on across your
agents; MarkDB doesn't prescribe a taxonomy. Broadcasts never cross tenants.
Publish
broadcast_publish (POST /v1/broadcasts) emits an event to a scope:
{
"scope_type": "project",
"scope_id": "checkout-rewrite",
"event_kind": "finding",
"envelope": { "…": "the payload" },
"references": [ /* optional refs to pages/events */ ]
}The stored broadcast records the publishing agent (publisher_agent_id), the
event_kind, any references, and a timestamp -- so consumers know who said what
and can follow the references into detailed memory.
Read
broadcast_list (GET /v1/broadcasts?scope_type=…&scope_id=…&limit=…) returns
recent broadcasts for one or more scopes. Broadcasts also flow into two other
recall paths:
- Recent --
GET /v1/recent?include_broadcast=true&scope_type=…&scope_id=…. - Hydrate -- pass
broadcast_scopestomemory_hydrate_contextso a fresh context includes what peers have shared.
A pattern for agent swarms
Give a group of agents a shared (scope_type, scope_id). Each publishes findings
and decisions as it works; each hydrates that scope at the start of a task. The
result is a shared blackboard without any agent reading another's private
transcript.