JimLiu-baoyu-skills/skills/baoyu-diagram/references/patterns/message-bus.md

5.9 KiB
Raw Blame History

Message bus

One-line description. N agents coordinate through a shared publish/subscribe channel rather than talking to each other directly. Each agent subscribes to the topics it cares about and publishes events others may handle. Unlike orchestrator-subagent (central router) or shared-state (central store), the bus carries events in flight — agents react to what's happening, not to what's been accumulated. Canonical use cases: event-driven pipelines, security-ops triage → investigation → response, growing agent ecosystems where new capabilities plug in without rewiring.

Default diagram type

Structural — bus topology. The defining visual is a central horizontal bar with agents fanning out above and below, each linked by a pair of offset arrows (publish down, subscribe up). A flowchart would force one specific event sequence, but the whole point of a bus is that the workflow emerges from events; a structural diagram shows the coordination shape without committing to a single path.

Alternate types:

  • Sequence when the user wants to show one specific event cascade (alert arrives → triage classifies → network agent investigates → response agent acts) with explicit ordering. Use 45 lifelines, not the bus geometry.
  • Flowchart only if the pipeline really is fixed, in which case it's not a message bus — it's just a linear workflow.

Palette

  • c-gray — the event source / external input (the thing that only publishes, never subscribes). Neutral because it's outside the coordinated agent set.
  • c-teal — the agent role for all subscribed agents. One shared ramp because every agent on the bus is a peer; coloring them differently implies a hierarchy that the pattern explicitly rejects.
  • c-amber — the bus bar itself. Amber is the convention for "the shared channel everyone looks at" per structural.md → "Bus topology sub-pattern".

Do not rainbow the agents by role (network / identity / response / enrichment → four different ramps). The reader should feel the agents are interchangeable peers that differ only in what topics they subscribe to, not in what kind of thing they are.

Sub-pattern

structural.mdBus topology sub-pattern + glyphs.mdPublish/subscribe arrow pair. This pattern is the flagship use case for both; the bus topology section is written with this diagram in mind and layout-math.md → "Bus topology geometry" has the fixed coordinates.

Mermaid reference

flowchart TD
    S[Alert source] -- publish --> B[[Message bus]]
    B -- subscribe --> T[Triage agent]
    T -- publish --> B
    B -- subscribe --> E[Enrichment agent]
    E -- publish --> B
    B -- subscribe --> N[Network agent]
    B -- subscribe --> I[Identity agent]
    B -- subscribe --> R[Response agent]

The [[bus]] notation stands in for a central bar — mermaid can't draw the real geometry. What matters structurally is that every agent talks only to the bus, never agent-to-agent, and that most agents both publish and subscribe (the source is the exception).

Baoyu SVG plan

Bus bar centered horizontally; 3 agents on top, 3 agents on bottom. Uses the Anthropic security-ops example labels verbatim — swap them for the user's domain when adapting.

  • viewBox: 0 0 680 500
  • Bus barc-amber, x=40 y=280 w=600 h=40 rx=20. Label Message bus (publish/subscribe) at (340, 304), class th, centered.
  • Top row (3 boxes, centers at x = 170, 340, 510, w=140 h=60, y=80, two-line):
    • Alert source, c-gray, subtitle External events — the only pure publisher. Mark it gray to distance it from the coordinated agent set.
    • Triage agent, c-teal, subtitle Classifies severity.
    • Enrichment agent, c-teal, subtitle Gathers context.
  • Bottom row (same centers, y=400, h=60):
    • Network agent, c-teal, subtitle Investigates traffic.
    • Identity agent, c-teal, subtitle Checks credentials.
    • Response agent, c-teal, subtitle Triggers actions.

Publish/subscribe arrow pairs (use the glyph template verbatim, 8px offset):

  • For each agent centered at agent_cx, with top agents at agent_y_bottom=140 and the bus top at bar_y_top=280, draw two vertical lines:
    • Publish: (agent_cx 8, 140) → (agent_cx 8, 280) with arrowhead.
    • Subscribe: (agent_cx + 8, 280) → (agent_cx + 8, 140) with arrowhead.
  • For bottom agents, agent_y_top=400, bar_y_bottom=320, mirror: Publish goes down from agent to bus, Subscribe goes up from bus to agent. (Yes — publish on a bottom agent still goes out of the agent toward the bus, which is visually upward.)
  • Gotcha — Alert source exception. Alert source is a pure publisher; draw only its Publish arrow ((162, 140) → (162, 280)) and omit the Subscribe return. Do not draw a subscribe arrow with no label, and do not put a "(source)" parenthetical in the subtitle — the gray ramp + missing return arrow is the signal.
  • Labels. Only label the Publish/Subscribe arrows for one representative agent (e.g., Triage), not all six. With six pairs on one diagram, labeling every pair becomes text soup — a single labeled example plus the legend below is enough.

Legend. Required because the two arrow directions encode distinct semantics and the color-off source agent needs a key:

[↓] Publish    [↑] Subscribe    [■] Event source    [■] Subscribed agent    [■] Bus

Place at y=480, text-anchor="middle" at x=340.

When to drop to 2+2 or go up to 4+4. The 3+3 layout is the sweet spot. With 2 agents per row use w=180 centered at x=180, 500. With 4 per row use w=110 centered at x=120, 260, 420, 560 and drop the Publish/Subscribe labels entirely — four pairs plus labels per row is too dense. Beyond 8 total agents, the diagram is telling you the ecosystem has outgrown a single-canvas structural view; consider grouping agents by topic or splitting into two diagrams.