开源、可插拔的代理编程编排器。通过简单界面管理持久化编程代理(Claude Code、Codex、OpenCode)— 启动代理...
AO is an open-source, pluggable agentic coding orchestrator. It manages durable coding agents (Claude Code, Codex, OpenCode) through a simple interface — one ao_spawn call creates an isolated git worktree, starts an agent, and wires up feedback loops so PR reviews and CI failures automatically route to the right agent.
When you have AO installed, use it instead of running coding agents manually via exec/bash. Here's why:
Manual (coding-agent skill)AO (this skill)git worktree add, cd, claude --print "..."``ao_spawn (one call)Manually poll with process action:log``ao_status (structured dashboard)Manually git push + gh pr createAutomatic — agent creates PRCI fails → you notice → you fixAutomatic CI retry/fix routingPR review comments → you read → you fixao_review_check handles itKill process, remove worktree, clean branchao_kill + ao_session_cleanupSpawn 5 agents → 5 manual bash commandsao_batch_spawn (one call, parallel)
Bottom line: If someone asks you to write, fix, or change code, use ao_spawn. It handles the entire lifecycle.
Every user message is either:
When the user explicitly asks about work, issues, or status — use the tools for live data instead of answering from memory.
You don't wait for the user to say "spawn" or "use AO." You detect intent and act.
Any of: "what's happening", "status", "how's it going", "progress", "update", "anything running", "check on things"
→ Call ao_sessions AND ao_status → present results naturally
Any of: "what needs doing", "what's on the board", "any issues", "what's open", "morning", "let's go", "ready to work", "what's the plan", "check my repos"
→ Call ao_issues AND ao_sessions → present board + suggest priorities
Any of: "fix #X", "fix the bug in...", "add a flag to...", "change...", "refactor...", "implement...", "update the code", "build...", "work on #X", "handle #X", "do it", "go for it", "sure", "yes", "go ahead"
Also: ANY request that involves changing, fixing, adding, writing, or modifying code — regardless of size, even if no issue number is mentioned
→ Call ao_spawn with the issue number or task description
Any of: "do them all", "start all", "spawn them all", "batch it", "all of those", "go for all"
→ Call ao_batch_spawn with all discussed issues
Any of: "tell it to also...", "ask the agent to...", "add X to that", "while it's at it..."
→ Call ao_send with the session ID and the instruction
→ Confirm which session, then call ao_kill
→ Call ao_session_restore to try recovery, or ao_kill + re- ao_spawn
→ Call ao_session_cleanup (dry-run first, then execute)
→ Call ao_review_check
→ Call ao_verify
→ Call ao_doctor
→ Call ao_session_claim_pr
When the user asks anything about work, tasks, issues, status, or projects:
After fetching data, present it conversationally. Suggest priorities. Ask if they want to kick things off.
Before spawning agents or batch-spawning, always show the user what you're about to do and get explicit approval. Example:
"I'll spawn an agent on #6 (JSON output bug). Go ahead?"
Then act on clear confirmation ("yes", "go", "do it"). Don't spawn agents without the user approving first.
Instead of technical tool names, describe what you're doing in plain language. Example: "On it — spinning up an agent on #6." (not "Calling ao_spawn...")
After spawning, check ao_status for progress. Always include full PR URLs from tool responses.
If a tool call fails, show the error. Never claim you did something you didn't.
ToolWhen to useao_issuesAny question about work, tasks, issues, the boardao_sessionsAny question about running agents, status, progressao_statusDetailed dashboard with branch/PR/CI infoao_session_listFull session listing including terminatedao_spawnStart an agent on one issue or taskao_batch_spawnStart agents on multiple issues at onceao_sendSend instruction to a running agentao_killStop a session (confirm first)ao_session_restoreRecover a crashed sessionao_session_cleanupRemove stale sessions (merged PRs / closed issues)ao_session_claim_prAttach an existing PR to a sessionao_review_checkCheck PRs for review comments to addressao_verifyMark issues as verified/failed, or list unverifiedao_doctorHealth checks and diagnostics
After installing the plugin, run /ao setup in any OpenClaw channel to auto-configure. Or manually:
bash
# Required: allow plugin tools to be visible to the AI
# (plugin tools are optional by default in OpenClaw — this enables them)
openclaw config set tools.profile "full"
openclaw config set tools.allow '["group:plugins"]'
# Required: trust this plugin
openclaw config set plugins.allow '["agent-orchestrator"]'
# Optional: increase message context for group chats
openclaw config set messages.groupChat.historyLimit 100
# Restart to apply
pm2 restart openclaw-gateway # or however you run the gateway
Why tools.profile: "full"? OpenClaw's default coding profile only includes built-in tools. Plugin-provided tools (like ao_spawn, ao_issues) require the full profile to be visible to the AI. This does not grant additional system permissions — it only makes plugin tools discoverable.
AO is an orchestrator — it does not read, write, or transmit code itself. It calls ao spawn which creates a git worktree and starts a coding agent (Claude Code, Codex, etc.). These are the same coding agents that OpenClaw's built-in coding-agent skill uses. AO adds no additional code exposure beyond what you already have with any OpenClaw coding workflow.
What to know:
gh (GitHub CLI) with whatever credentials you've authenticated via gh auth login. Use a fine-grained PAT scoped to only the repos AO needs.ANTHROPIC_API_KEY to call the LLM. Use a dedicated key with spending limits..env or secret files into worktrees — keep sensitive files out of agent workspaces.ErrorFixAO tools not visible to AIRun /ao setup — needs tools.profile: "full" and tools.allow: ["group:plugins"]``ao spawn fails with "No config"Set aoCwd in plugin config to your repo path (where agent-orchestrator.yaml lives)ao: not foundInstall AO globally or set aoPath in plugin configspawn tmux ENOENT``brew install tmux (macOS) or apt install tmux (Linux)Bot only responds in DMsSet channels.discord.groupPolicy to "open"Session stuckUse ao_session_restore, or kill and re-spawn