astronomer/Otto Review

Use Astronomer's Otto data engineering agent to review pull requests.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jun 23, 2026
License
Apache 2.0

Pinned Snippet

workflow.ymlSHA-pinned
uses: astronomer/otto-review-action@a1fa6ce21600a1db3fc71ee2a6e952087c5295be # v0.2.0

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
astro-api-tokenAstronomer API token used to authenticate Otto against the Astronomer Gateway. If empty, the action falls back to the ASTRO_API_TOKEN env var.no""
astro-domainAstronomer domain. Defaults to 'astronomer.io'. Override for non-prod environments (e.g. 'astronomer-dev.io').noastronomer.io
astro-organizationAstronomer organization ID for gateway routing. If empty, the action falls back to the ASTRO_ORGANIZATION env var.no""
github-tokenGitHub token used to read PR metadata and post the review. Defaults to the workflow's GITHUB_TOKEN.no${{ github.token }}
resolve-tokenOptional token used to resolve prior review threads that Otto's verdict flags as addressed (`resolved_thread_ids`). The default `GITHUB_TOKEN` cannot call `resolveReviewThread` even with `pull-requests: write` (returns 'Resource not accessible by integration'), so without an override here those resolutions are skipped with a warning. Provide a PAT or GitHub App installation token with `pull_requests:write` to apply them. The token is only used for thread resolution; everything else (sticky comment, inline comments, gating review) goes through 'github-token'.no""
astro-cli-versionAstro CLI version to install. Otto is bundled with the Astro CLI and auto-updates independently; this action requires an Otto build that ships the `reviewer` persona. Empty installs the latest published version, which is the recommended setting.no""
modelModel identifier passed to Otto via --model. Empty uses Otto's default.no""
max-diff-linesMaximum number of diff lines passed to Otto. Larger diffs are truncated. Truncation is itself a signal that the PR is too large for an automated review.no50000
allowed-toolsComma-separated list of Otto tools the reviewer may call. Empty (default) uses the reviewer persona's built-in allowlist (read, grep, find, ls, bash). Set this to override with a different list.no""
dry-runIf 'true', the review event is downgraded to COMMENT regardless of Otto's verdict. Use this while you're tuning the prompt.nofalse
pr-numberPR number to review. Only consulted for events that don't carry a PR payload (issue_comment, workflow_dispatch, repository_dispatch). For pull_request / pull_request_target events the PR is read from the event payload and this input is ignored.no""
namedescription
verdictOtto's verdict ('approve', 'comment', or 'request_changes'). Empty when Otto failed to produce a parseable response.
summaryOtto's one-sentence summary of the PR.
comment-countNumber of inline review comments Otto posted this run (net-new, after dedup against still-open prior comments).
finding-countTotal findings anchored to the diff this run, before dedup. Use this (not comment-count) to gate on 'does the PR have findings' — comment-count is 0 on a push where every finding was already an open comment.
resolved-thread-countNumber of prior review threads Otto flagged as addressed (verdict.resolved_thread_ids). The action resolves each — see 'resolve-token' for the token requirement.