MarkDB
Concepts

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:

FieldMeaning
scope_typeA category you choose, e.g. project, team, swarm.
scope_idThe 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_scopes to memory_hydrate_context so 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.

On this page