Direct agent-to-agent calls are the simplest coordination model: agent A finishes and calls agent B directly. This works for two-agent systems but becomes brittle as the team grows. Each agent must know the addresses and interfaces of every agent it needs to hand off to. Adding a new agent type requires modifying every upstream agent.
An event bus decouples producers from consumers. Agent A publishes a pr_created event; it does not need to know that agent B is subscribed to that event type. Agent B subscribes to pr_created events; it does not need to know which agent produced them. The bus handles routing, delivery, and durability.
For agent coordination specifically, the event schema is important: events should carry enough context for the consuming agent to take action without needing to query back to the producer. A pr_created event should include the PR number, branch, associated issue, and repository — not just a notification that a PR was opened.