Skip to content

Agents

BMO uses the word agent in more than one sense. Agent kinds are configured roles in merged config. Coordination surfaces are the runtime mechanisms that delegate work (local child runs, background nanites, teams, remote mesh/A2A, CSV jobs, arena, automation). Live children are the in-session runs you inspect with /agents or /agent-family.

This guide orients you across those axes so you can pick the smallest surface that fits the job — before you read eight feature pages in isolation.

flowchart TD
  q1{"Need interactive steering\nor approval per step?"}
  q1 -->|yes| sub["spawn_agent / agent tool\n(subagent pool)"]
  q1 -->|no| q2{"Remote peer or\ncapability routing?"}
  q2 -->|yes| mesh["mesh_resolve + invoke_a2a"]
  q2 -->|no| q3{"Shared task queue,\nmailbox, shutdown?"}
  q3 -->|yes| team["create_team / teams backend"]
  q3 -->|no| q4{"Bounded background\nside work?"}
  q4 -->|yes| nanite["bmo nanite run / enqueue"]
  q4 -->|no| q5{"Compare candidates\non same prompt?"}
  q5 -->|yes| arena["Arena"]
  q5 -->|no| q6{"One prompt per CSV row?"}
  q6 -->|yes| csv["spawn_agents_on_csv"]
  q6 -->|no| direct["Primitives or staged workflow"]
TermMeansInspect withNot
Agent kindConfigured role (coder, task, custom options.agents.<id>)/agent_kinds, list_agent_kindsLive spawned children
Live child / subagentIn-process delegated run in the current session/agents, /agent-familyAgent kinds registry
NaniteBudget-bounded background micro-run on the nanite pool/spawn-status, workstream last_nanite_*Renamed subagent
TeamShared goal, task list, mailbox, shutdown path/team, bmo team statusMesh routing
Mesh peerRemote agent chosen by capability tagA2A task status, /a2aLocal spawn pool
Agent job (CSV)One worker per CSV row with structured reportingParent output, /teamDurable team state

Kinds tell you which prompt, mesh tags, and tool policy apply. Coordination surfaces tell you how work is delegated and which pool owns capacity.

SurfaceBest forEntryCapacity guardInteractiveMain inspect
spawn_agent / agentOne focused local task with steeringParent tool turnoptions.agent_max_threads, per-agent [delegation]Yes/agents, /agent-family
bmo nanite runBounded background check, summary, or handoffCLI or enqueueoptions.nanite_max_threadsNo/spawn-status, workstream status
create_teamShared tasks, mailbox, blockers, lifecycleParent tool turnTeam backend + spawn limitsAsync mailbox/team
mesh_resolve + invoke_a2aRemote work by capability, not fixed URLParent tool turnRemote + local policyRemote async/a2a, A2A logs
spawn_agents_on_csvSame prompt template per CSV rowParent tool turnmax_concurrency + spawn limitsPer-row worker/team, output CSV
orchestrate_workflow / execute_dagOrdered remote calls with checkpointsWorkflow toolsWorkflow + remote limitsPause/resume per nodeWorkflow result tools
ArenaCompare candidates on the same promptArena surfacesArena configReview-oriented/arena
Automation rules / compactionEvent-driven or idle-gated follow-onConfig + eventsRule dedupe, compaction gatesNoLogs, /compaction

For nanite vs subagent detail, see the comparison table in Nanites. For remote protocol roles, see Protocols.

Agent kinds are the local role catalog: which prompts, mesh capability tags, and explicit tool allowlists BMO knows about in your effective config. They are data-defined in merged config and prompt profiles — not a fixed marketing list.

QuestionOpen
Which roles exist in my config?/agent_kinds, list_agent_kinds, GET /v1/agent-kinds
Which children are running now?/agents, /agent-family, list_agents
Which remote peers match a capability?mesh_resolve, Agent Mesh

When spawning a child, you can pass an agent parameter to select a kind. Kinds do not replace choosing a coordination surface: a task kind still runs through spawn_agent (subagent pool) unless you explicitly use nanite, team, or remote paths.

Start here: Agent kinds.

BoundaryRule
Subagent pool vs nanite poolSeparate concurrency guards; both can be active
Teams vs meshTeams own shared task/mailbox state; mesh only routes remote peers
Workflow tools vs primitivesWorkflows own control flow; they do not bypass permission gates
Full app vs minimal MCPShared session/claims apply in full app; minimal MCP is scoped filesystem only
Workspace claims vs worktreesClaims coordinate BMO mutation paths; worktrees give filesystem separation
Arena vs worker poolArena compares candidates; it is not long-lived parallel execution

Hidden unattended autonomy is not the product contract. Long-running or delayed work should stay visible through inspectable surfaces (spawn status, teams, workflows, rules, compaction).

If you work in…Start with…
TUI/agent-family (live children), /agent_kinds (role catalog), /spawn-status (pool posture), /team (teams and CSV jobs)
CLIbmo nanite run, bmo config show-spawning, bmo team status
HTTP / MCPGET /v1/spawn/status, get_spawn_status, list_agent_kinds, A2A and mesh tools when exposed
IntegratorThis guide + Workflow map + Protocols

Walkthrough: parallel refactor with the right surface

Section titled “Walkthrough: parallel refactor with the right surface”

Setup: You want three independent test-writing tasks in one session, with visibility into each child and no remote peers involved.

StepChoiceActionQuestion answered
1Surfacespawn_agent per task (not nanite — you may steer approvals)Is this interactive delegation?
2KindDefault or agent: "task" if configuredWhich prompt/tools apply?
3Inspect/agent-family ranked viewWho is running and in what state?
4Pool/spawn-status if saturatedAre subagent or nanite pools full?
5Recoveryesc on parent; close_agent for held slotsAre cancelled children still holding slots?

If the same work were a 30-second diff summary with no steering, use nanite instead and read last_nanite_* on the bound workstream.

Need a configured role catalog?
→ /agent_kinds → Agent kinds feature page
Need live children in this session?
→ /agent-family → /agents → list_agents
Parallel local tasks with steering?
→ spawn_agent → Multi-Agent Workflows guide
Quick bounded background pass?
→ bmo nanite run → Nanites feature page
Shared task list and mailbox?
→ create_team → Teams feature page
Remote peer by capability?
→ mesh_resolve + invoke_a2a → Agent Mesh + A2A
Same prompt per CSV row?
→ spawn_agents_on_csv
Pool saturated or drain mode?
→ /spawn-status → get_spawn_status
Compare candidates on one prompt?
→ Arena feature page

Maintainer routing detail: multi-agent orchestration surface.