AO

Review loop

When a reviewer asks for changes, AO replays the feedback to the agent so the fix shows up without you copy-pasting anything.

Reviews are the part of code review that most agents get wrong: they treat them as one-shot, so the reviewer ends up repeating themselves. AO closes that loop — when a REQUEST_CHANGES review lands, the agent sees the review body and the inline comments in context and pushes a fix.

What triggers it

The SCM plugin watches your PR for:

  • A new review with state CHANGES_REQUESTED
  • New comments on an existing review
  • Line-level comments ("inline comments")

When any of these appear, the session transitions to changes_requested and the agent is woken with the full review body + all unresolved inline comments.

What the agent sees

A single structured prompt with:

  • Reviewer's top-level message (the review summary)
  • Each unresolved inline comment, formatted as path:line — comment
  • A pointer to the PR head SHA

AO reads unresolved review threads. Once you resolve a thread on GitHub, it drops out of the next nudge — so you can thumbs-up the ones the agent addressed and only the remaining ones make it back to the agent.

Configurable behavior

agent-orchestrator.yaml
reactions:
  reviewRequested:
    enabled: true           # default
    includeResolved: false  # default: only unresolved threads
    maxRetries: 3

maxRetries matters more than you'd think — occasionally a reviewer and agent will disagree about the right fix, and you don't want the agent stuck in a loop.

Manually replay a review

# Check all tracked PRs now
ao review-check

# One project
ao review-check myproject

# Dry run: show who would get nudged
ao review-check --dry-run

Best practices

  • Use inline comments for mechanical changes. "Rename this variable", "move this into a helper" — agents handle these well.
  • Use the top-level review message for design-level feedback. Agents are better at responding to a coherent paragraph than to a dozen small inline nits.
  • Resolve threads as they're addressed. Keeps the agent's next nudge focused.

Approvals

An APPROVED review doesn't trigger the agent — it transitions the session toward mergeable. AO never auto-merges; that's your call.

Automated review (bugbot) detection

Not every review comment is from a human. AO recognises a hardcoded list of known automation accounts and routes their comments to the separate bugbot-comments reaction instead of changes-requested. This lets you handle them differently — for example, treat advisory bot feedback as informational while still requiring a human approve before the agent acts on it.

GitHub (scm-github) treats the following as bots:

LoginTool
cursor[bot]Cursor AI
github-actions[bot]GitHub Actions
codecov[bot]Codecov
sonarcloud[bot]SonarCloud
dependabot[bot]Dependabot
renovate[bot]Renovate
codeclimate[bot]Code Climate
deepsource-autofix[bot]DeepSource
snyk-botSnyk
lgtm-com[bot]LGTM

GitLab (scm-gitlab) treats the following as bots (in addition to any username matching project_\d+_bot or ending in [bot]):

LoginTool
gitlab-botGitLab built-in
ghostDeleted / system user
dependabot[bot]Dependabot
renovate[bot]Renovate
sast-botGitLab SAST
codeclimate[bot]Code Climate
sonarcloud[bot]SonarCloud
snyk-botSnyk

A typical configuration pairing:

agent-orchestrator.yaml
reactions:
  changes-requested:
    auto: true
    priority: "action"       # human review comment — act immediately

  bugbot-comments:
    auto: true
    priority: "info"         # advisory bot feedback — log and proceed

The bot list is hardcoded in each SCM plugin and is not currently configurable via agent-orchestrator.yaml.

Review polling throttle

To avoid hammering the GitHub / GitLab API on busy repositories, AO throttles getPendingComments and getAutomatedComments calls to at most once every 2 minutes per session (REVIEW_BACKLOG_THROTTLE_MS = 2 * 60 * 1000). The throttle is in-memory and resets on daemon restart.

Practical consequence: after a review comment lands on the PR, there can be up to a 2-minute delay before AO reacts. This is expected and by design.

If you need an immediate check outside the polling cadence, run:

ao review-check           # check all tracked PRs right now
ao review-check myproject # one project only
ao review-check --dry-run # show what would be sent, don't send

ao review-check is a standalone CLI command that calls the GitHub API directly and is not subject to the in-process throttle.