Skip to content

Build master @ bc50cd5bunreleased — 31 commits past v1.282.0Last reviewed Last changed Grade frozen (dated artifact, not re-reviewed)Source / History

CLI Agent Orchestrator Evaluation (#1048) ​

Evaluated 2026-10-01 by reading the repository's docs and source. Nothing was cloned, installed or run. The source tip was an X post by @dankornas; the post itself was not checked, but awslabs/cli-agent-orchestrator is live and is the only orchestrator AWS Labs publishes under that name.

FieldValue
What it is"Multi-agent orchestration for AI coding CLIs — Claude Code, Kiro, Codex, and more, coordinated in isolated tmux sessions"
LicenseApache-2.0, Python
Activity1,366 stars, 73 contributors, pushed 2026-10-01, release v2.5.1 (2026-09-11)

Verdict: reference-only. Take no action beyond one small follow-up. CAO is a capable, well-maintained supervisor and worker runtime. Its strength, driving 18 different agent CLIs through one interface, is something BoB does not need: BoB runs on Claude Code only. Adopting it would add a second source of truth (a SQLite runtime and a Python daemon on port 9889) beside GitHub Issues and the warp-drive state machine, against the Prime Directive. It also works out an agent's status by reading its screen, and starts Claude Code with --dangerously-skip-permissions by default. Both get around BoB's hook-gated automation levels.

Architecture ​

  • Runtime. Three pieces run locally:
    • the cao CLI;
    • cao-server, a FastAPI server on localhost:9889 that serves HTTP, server-sent events and a terminal WebSocket, plus a React web UI;
    • two MCP servers, one for agents inside a session and one for managing the whole fleet from outside.
  • Hosting. Each agent is a full agent CLI running in its own tmux window. A provider adapter for each CLI (18 of them; Kiro is the default) owns the launch command, input, exit and status. For Claude Code, the status (idle, processing, waiting for the user, completed, error) is worked out by scanning the screen for the prompt, the spinner and the output marker.
  • Lifecycle. cao launch --agents <profile> starts a session and cao shutdown ends it. When a terminal is deleted, its scrollback and a snapshot are saved under ~/.cao/logs/terminal/ for seven days, and cao terminal restore can replay them.
  • Orchestration. A supervisor delegates to workers through three MCP tools:
    • handoff is synchronous: it waits for the worker to finish, returns the output, then removes the worker;
    • assign is asynchronous: the worker reports back later;
    • send_message puts a message in an inbox stored in SQLite, delivered as a paste when the receiving agent is idle.
  • Inbox delivery. Three layers make it reliable: an immediate attempt, a five-second watchdog, and a 30-second sweep with a grace window, so no message stays pending forever.
  • State and profiles. Sessions, terminals and the inbox live in SQLite. Agent profiles are Markdown with frontmatter, and each role maps to a list of allowed tools.
  • Memory. A Markdown wiki with keyword search is injected at session start. An optional loop has a "retrospector" agent write lessons that can be promoted into a profile.
  • Scheduling and workflows. cao schedule runs agent sessions on a cron schedule, behind a gate script that answers {"execute": bool, "output": {}}. cao workflow runs Python workflows that resume by replaying a journal.

Overlaps and gaps ​

CapabilityCAOBoBNote
Agents in tmuxOne window per agentbob fork, segment spawningSame substrate
Supervisor delegating to workershandoff, assign, send_message over MCPClaude Code's subagents and Agent Teams; bob swarmBoB uses Claude Code's own primitives
Messages between running agentsSQLite inboxNone between sessions; the remote decision bridge connects a human and an agentCAO's one genuinely new primitive
Knowing an agent's stateReads the screenReads the warp-drive state fileBoB's way is sturdier; #3549 keeps it that way
Worktree per agentOnly in one examplebob forkBoB ahead
Governance: issues, gates, hook-gated commits, automation levelsNone; permissions skipped by defaultCore of BoBBoB ahead
Many agent CLIs18Claude Code onlyNot a BoB goal
Scheduled runscao schedule with a gate scriptbob tick, bob ritual dueEquivalent
Resumable workflowsJournal replayClaude Code's Workflow scriptsAlready covered
Output kept after teardownScrollback and snapshot savedbob warp reap kills sessions without saving outputSmall gap; follow-up below
Memory and lessonsWiki, retrospector, promoteMemory conventions, /journal, /memory-auditOverlapping
Fleet viewWeb UIbob viz, bob warp vizEquivalent

Patterns worth keeping ​

  1. Save a session's scrollback before killing it (follow-up #3552).bob warp reap and the segment teardown could save tmux capture-pane -pS - to a short-lived log under .claude/ before killing the session. That keeps the evidence a harness-defect report needs.
  2. Pasting into tmux, for later. BoB sends single lines with send-keys today, so it is not affected. If it ever sends multi-line text into a pane, tmux 3.7 and later clean out hand-made bracketed-paste markers, and paste-buffer -p is the safe way to do it.
  3. Three-layer delivery. An immediate attempt, a watchdog and a sweep with a grace window. This is the reference design if #3550 (forked workers that start the items a landed item was blocking) ever needs messages between running workers.
  4. The gate script's {execute, output} answer. A clean shape, but bob ritual due and bob tick already make the same decision.

Not verified ​

  • The X post itself.
  • Any runtime behaviour: everything above comes from the docs and the MCP tool names, not from running it.
  • Whether CAO isolates agents in worktrees outside its example.
  • Whether cao-server has any authentication beyond listening on localhost.
  • Whether port 9889 clashes with BoB's dashboard port bands.