Skip to content

Review

anode review inspects local changes with a read-only profile. It is for finding concrete bugs, risky behavior changes, and missing tests before you commit.

anode review
anode review "focus on error handling"
anode review --base main
anode review --base main --checks
anode review --base main --stream-json

Flags:

FlagUse
--base <ref>Diff against a base git ref.
--checksRun project check files.
--profile <name>Review profile override. Defaults to review.
--model provider/modelModel override for the review runs.
--max-turns <n>Turn limit for each review run.
`—approval askauto
--stream-jsonEmit newline-delimited run events.

review keeps its read-only default profile unless you override --profile.

Anode builds review context from:

  • git status --short
  • unstaged diff
  • staged diff
  • --base <ref> diff when provided
  • diff stats
  • changed file list
  • untracked file names and bounded text previews

Tracked diff text is limited to 120,000 runes. Untracked previews include up to 10 files, each read up to 16 KiB. If there are no changed files, review prints Nothing to review.

Checks are Markdown files under .agents/checks/*.md. Anode also looks for nearest scoped .agents/checks directories above changed files.

Example:

---
name: security
description: Check for security regressions
severity-default: high
paths: "**/*.go", "**/*.ts"
tools: read, finder, web_search
---
Look for command injection, path traversal, auth bypasses, secret exposure, and
unsafe input handling. Avoid style comments.

Supported frontmatter:

FieldUse
nameCheck name. Defaults to file name without extension.
descriptionOne-line description. Defaults to first body line.
severity-default or severitySeverity label passed into the check prompt and events.
paths or pathComma-separated or bracketed glob list.
toolsComma-separated or bracketed tool allowlist.

Check names cannot contain / or \. Check files larger than 64 KiB are truncated before parsing. Symlinked check files are rejected.

Without --stream-json, Anode runs the general review and then each applicable check in order.

With --stream-json, Anode emits a parent review run. The general review runs first. Applicable checks then run with bounded concurrency of 4, and their buffered event streams are replayed in deterministic order.

Each check receives:

  • the review context
  • the check body
  • the optional focus text
  • the requested tool allowlist, when set
  • parent run linkage in JSON events

--stream-json uses the same event schema as headless execution. Review adds a parent run and child runs:

EventUse
system.initParent review initialized.
run.startedParent review run started.
child_run.startedGeneral review or project check started.
child run eventsEvents from the general review or check run.
child_run.resultChild run finished.
result.finalParent review finished.

The default review profile is read-only and exposes:

read, multi_read, finder, glob, grep, web_search, todo_read, code_review

When a language server is configured, lsp and get_diagnostics can also be available through the same read-only profile.

It does not expose file mutation tools.

Keep going: