Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ComposioHQ/agent-orchestrator/llms.txt

Use this file to discover all available pages before exploring further.

Sessions are isolated workspaces where agents work on issues. Each session has its own git worktree, tmux session, and metadata.

Listing Sessions

View all active sessions:
ao session ls
Output:
Frontend:
  fe-1  (2m ago)  feat/add-login  [working]  https://github.com/org/app/pull/42
  fe-2  (5m ago)  feat/dashboard  [pr_open]

Backend:
  api-1  (1h ago)  fix/auth-bug  [review_pending]  https://github.com/org/api/pull/15
  (no active sessions)
Each session shows:
  • Session ID (fe-1)
  • Last activity (2m ago)
  • Branch name (feat/add-login)
  • Status (working, pr_open, review_pending)
  • PR URL (if created)

Filter by Project

List sessions for a specific project:
ao session ls -p frontend

Session Status Codes

StatusMeaning
spawningSession is being created
workingAgent is actively coding
pr_openPR created, waiting for CI/review
ci_failedCI checks failed
review_pendingWaiting for code review
changes_requestedReviewers requested changes
approvedPR approved by reviewers
mergeableApproved + CI green, ready to merge
mergedPR merged, session complete
needs_inputAgent is waiting for human input
stuckAgent inactive for too long
erroredAgent encountered an error
killedSession manually terminated

Comprehensive Status View

Get detailed status with PR, CI, and review info:
ao status
Output:
AGENT ORCHESTRATOR STATUS

Frontend:
  Session        Branch                  PR    CI     Rev   Thr  Activity  Age
  ─────────────────────────────────────────────────────────────────────────────
  fe-1           feat/add-login          #42   ✓      ✓     0    active    2m
                 Implementing OAuth login flow with session management
  fe-2           feat/dashboard          #43   ⋯      ⋯     2    ready     5m
                 Dashboard UI components with charts

Backend:
  Session        Branch                  PR    CI     Rev   Thr  Activity  Age
  ─────────────────────────────────────────────────────────────────────────────
  api-1          fix/auth-bug            #15   ✗      △     0    active    1h
                 Fixing JWT token validation

  3 active sessions across 2 projects
Columns:
  • PR: PR number or - if not created
  • CI: passing, failing, pending, - no checks
  • Rev: approved, changes requested, pending
  • Thr: Number of unresolved comment threads
  • Activity: active, ready, idle, waiting_input, blocked, exited
  • Age: Time since last activity

Activity States

StateMeaning
activeAgent is thinking/writing code
readyAgent finished, waiting for input
idleNo activity for >5 minutes
waiting_inputAgent is asking a question
blockedAgent hit an error
exitedAgent process terminated

JSON Output

Get machine-readable output for scripting:
ao status --json
[
  {
    "name": "fe-1",
    "branch": "feat/add-login",
    "status": "working",
    "prNumber": 42,
    "ciStatus": "success",
    "reviewDecision": "approved",
    "pendingThreads": 0,
    "activity": "active",
    "lastActivity": "2m ago"
  }
]

Attaching to Sessions

Attach to a session’s terminal to watch the agent work:
tmux attach -t fe-1
Or use the open command:
ao open fe-1
Detach without killing: Press Ctrl+B, then D

Open Multiple Sessions

Open all sessions for a project:
ao open frontend
Open all sessions across all projects:
ao open all

Open in New Window

ao open fe-1 --new-window
This uses the Terminal plugin (default: iterm2) to create terminal tabs/windows.

Sending Messages

Send instructions to a running agent:
ao send fe-1 "Please address the review comments on your PR"

How It Works

1

Wait for idle

The command waits for the agent to become idle before sending (default: 600s timeout)
2

Clear partial input

Sends Ctrl+U to clear any partial command
3

Send message

Injects the message into the tmux session
4

Press Enter

Automatically submits the message
5

Verify delivery

Checks that the agent received and is processing the message

Send Without Waiting

Skip the idle wait:
ao send fe-1 "Your message" --no-wait
Sending while the agent is active may interrupt its current task. Use --no-wait only when necessary.

Send from File

Send long instructions from a file:
ao send fe-1 --file instructions.txt
Example instructions.txt:
The CI is failing with this error:

TypeError: Cannot read property 'id' of undefined
  at validateUser (auth.ts:42)

Please:
1. Add null checks for the user object
2. Add tests for the error case
3. Update the error message to be more descriptive

Custom Timeout

Change the idle wait timeout:
ao send fe-1 "Your message" --timeout 300  # 5 minutes

Delivery Confirmation

The command verifies delivery:
 Message sent and processing
Or:
 Message queued (session finishing previous task)
If delivery can’t be confirmed:
 Message sent could not confirm it was received

Killing Sessions

Terminate a session and remove its worktree:
ao session kill fe-1
This:
  1. Kills the tmux session
  2. Removes the git worktree
  3. Updates session status to killed
  4. Preserves metadata for audit trail
Killing a session does NOT close or delete the PR. The PR remains open on GitHub/GitLab.

When to Kill Sessions

Good reasons to kill:
  • PR merged, work is complete
  • Agent is stuck and unrecoverable
  • Duplicate session for the same issue
  • Issue was closed/canceled
Don’t kill if:
  • Agent is just slow (give it time)
  • CI is failing (let auto-reactions handle it)
  • You just want to pause (detach instead)

Automatic Cleanup

Remove completed sessions automatically:
ao session cleanup
This kills sessions where:
  • PR is merged
  • Issue is closed (in tracker)
  • Runtime is no longer alive
Dry run to preview:
ao session cleanup --dry-run
Output:
Checking for completed sessions...

  Would kill fe-2
  Would kill api-5

Dry run complete. 2 sessions would be cleaned.
Cleanup specific project:
ao session cleanup -p frontend

Cleanup Criteria

A session is cleaned if:
The PR associated with the session has been merged to the default branch.Detected via SCM plugin:
const pr = await scm.detectPR(session, project);
const merged = pr && pr.state === "merged";

Restoring Sessions

Restore a crashed or terminated session in-place:
ao session restore fe-1
This:
  1. Verifies the worktree still exists
  2. Checks that the session is restorable (not merged)
  3. Creates a new tmux session
  4. Relaunches the agent in the same workspace
  5. Updates metadata with restore timestamp
When to restore:
  • tmux session crashed but worktree is intact
  • Agent exited unexpectedly
  • You manually killed tmux but want to resume
Cannot restore if:
  • Session status is merged (work is complete)
  • Worktree was deleted
  • Branch was deleted from the repo
Restore output:
✓ Session fe-1 restored.
  Worktree: /Users/you/.worktrees/fe-1
  Branch:   feat/add-login
  Attach:   tmux attach -t fe-1

Session Metadata

Each session stores metadata in flat files:
~/.agent-orchestrator/sessions/my-app/
  fe-1/
    id=fe-1
    projectId=frontend
    status=working
    branch=feat/add-login
    issueId=123
    pr=https://github.com/org/app/pull/42
    createdAt=2024-03-04T10:30:00Z
    lastActivityAt=2024-03-04T10:32:00Z
Metadata is:
  • Flat key=value format (backwards compatible)
  • Human-readable (edit with any text editor)
  • Tracked in event log (full audit trail)

Scripting Examples

Kill all merged sessions

ao session cleanup --dry-run | grep "Would kill" | awk '{print $3}' | xargs -I {} ao session kill {}

Send message to all sessions

for session in $(ao session ls --json | jq -r '.[].name'); do
  ao send $session "Please check if your PR is ready for review"
done

Monitor session status

watch -n 30 'ao status'

Next Steps

Auto-Reactions

Automate CI failure handling and review responses

Multi-Project Setup

Manage multiple repositories simultaneously

Build docs developers (and LLMs) love