Examples
Five annotated starter configurations covering GitHub, Linear, multi-project, auto-merge, and Codex setups.
All examples live in the examples/ directory of the AO repository. Pick the one closest to your setup, copy it to your project root as agent-orchestrator.yaml, fill in your repo path and any API keys, and you're ready to spawn agents.
cp examples/simple-github.yaml agent-orchestrator.yamlSimple GitHub
For solo devs on a single GitHub repo with GitHub Issues.
# Minimal setup for a single GitHub repo with GitHub Issues
# Perfect for getting started quickly
dataDir: ~/.agent-orchestrator
worktreeDir: ~/.worktrees
projects:
my-app:
repo: owner/my-app
path: ~/my-app
defaultBranch: mainNotable settings:
- Uses the default GitHub tracker — requires
GITHUB_TOKEN(set automatically by theghCLI). - No
defaults:block needed — AO's built-in defaults (tmuxruntime,claude-codeagent,worktreeworkspace) apply automatically. - Replace
owner/my-appand~/my-appwith your actual GitHub slug and local checkout path.
Linear Team
For teams that track work in Linear rather than GitHub Issues.
# Linear integration with custom team
# Requires LINEAR_API_KEY environment variable
dataDir: ~/.agent-orchestrator
worktreeDir: ~/.worktrees
projects:
my-app:
repo: owner/my-app
path: ~/my-app
defaultBranch: main
# Linear tracker integration
tracker:
plugin: linear
teamId: "2a6e9b1b-19cd-4e30-b5bd-7b34dc491c7e"
# Custom rules for agents
agentRules: |
Always link Linear tickets in commit messages.
Run tests before pushing.
Use conventional commits (feat:, fix:, chore:).Notable settings:
tracker.plugin: linearswaps out the default GitHub tracker for the Linear plugin.tracker.teamIdis your Linear team UUID — find it in Linear → Settings → Team → General.- Requires a
LINEAR_API_KEYenvironment variable (set it in your shell profile or CI secrets). agentRulesinjects project-specific instructions into every agent's prompt — useful for enforcing commit conventions or test requirements.
Multi-Project
For managing multiple repositories from a single config, with mixed trackers and Slack notifications.
# Managing multiple projects with different trackers
# Shows how to configure multiple repos with different settings
dataDir: ~/.agent-orchestrator
worktreeDir: ~/.worktrees
defaults:
runtime: tmux
agent: claude-code
workspace: worktree
notifiers: [desktop, slack]
projects:
frontend:
name: Frontend
repo: org/frontend
path: ~/frontend
defaultBranch: main
sessionPrefix: fe
tracker:
plugin: github
agentRules: |
Use TypeScript strict mode.
Follow React best practices.
Always run `pnpm test` before pushing.
backend:
name: Backend API
repo: org/backend
path: ~/backend
defaultBranch: main
sessionPrefix: api
tracker:
plugin: linear
teamId: "your-team-id"
agentRules: |
All endpoints require auth middleware.
Add OpenAPI docs for new routes.
Run `pnpm test` and `pnpm lint` before pushing.
# Slack notifications (requires SLACK_WEBHOOK_URL)
notifiers:
slack:
plugin: slack
webhook: ${SLACK_WEBHOOK_URL}
channel: "#agent-updates"
# Route notifications by priority
notificationRouting:
urgent: [desktop, slack]
action: [desktop, slack]
warning: [slack]
info: [slack]Notable settings:
defaults:sets the runtime, agent, workspace, and notifier list for all projects — individual projects can override any of these.sessionPrefixkeeps session IDs readable (fe-123,api-456) when multiple projects run simultaneously.- Each project can use a different tracker —
frontenduses GitHub Issues,backenduses Linear. notifiers.slack.webhook: ${SLACK_WEBHOOK_URL}reads the webhook URL from an environment variable — never hardcode secrets in config files.notificationRoutingroutes urgent and actionable events to both desktop and Slack, while lower-priority events go to Slack only.
Auto-Merge
For teams that want maximum automation — PRs merge automatically when approved and CI is green, with auto-retry for failures.
# Aggressive automation with auto-merge
# Automatically merges approved PRs with passing CI
dataDir: ~/.agent-orchestrator
worktreeDir: ~/.worktrees
projects:
my-app:
repo: owner/my-app
path: ~/my-app
defaultBranch: main
# Enable auto-merge for this project
reactions:
approved-and-green:
auto: true # Automatically merge when PR is approved and CI passes
action: auto-merge
# Global reactions
reactions:
# Auto-retry CI failures up to 3 times
ci-failed:
auto: true
action: send-to-agent
retries: 3
# Auto-address review comments
changes-requested:
auto: true
action: send-to-agent
escalateAfter: 1h # Notify human if not resolved in 1 hour
# Notify when agent is stuck
agent-stuck:
threshold: 10m
action: notify
priority: urgentNotable settings:
reactions.approved-and-green.auto: truewithaction: auto-mergeenables hands-free merging — no human click required once the PR is approved and CI passes.- The project-level
reactionsblock overrides global reactions for that project only; globalreactionsapply to all projects unless overridden. ci-failed.retries: 3lets AO send the agent back to fix CI up to three times before escalating.changes-requested.escalateAfter: 1hensures a human is notified if an agent can't resolve review comments within an hour.agent-stuck.threshold: 10mtriggers an urgent desktop notification if an agent goes silent for 10 minutes.
Codex Integration
For teams that prefer GPT-4/Codex over Claude Code.
# Using Codex instead of Claude Code
# Demonstrates using a different AI agent
dataDir: ~/.agent-orchestrator
worktreeDir: ~/.worktrees
defaults:
agent: codex # Use Codex instead of Claude Code
runtime: tmux
workspace: worktree
projects:
my-app:
repo: owner/my-app
path: ~/my-app
defaultBranch: main
# Codex-specific configuration
agentConfig:
model: gpt-4
permissions: default
agentRules: |
Write clean, well-documented code.
Follow project conventions.
Run tests before pushing.Notable settings:
defaults.agent: codexchanges the agent for all projects — no need to set it per project.agentConfig.model: gpt-4is passed directly to the Codex plugin; valid values depend on your OpenAI subscription and which models the Codex plugin supports.agentConfig.permissions: defaultuses the plugin's built-in permission set — change tofullto allow broader file access, orreadonlyto restrict writes.- Requires an
OPENAI_API_KEYenvironment variable.