astronomer/Otto Review
Use Astronomer's Otto data engineering agent to review pull requests.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Jun 23, 2026
- License
- Apache 2.0
Pinned Snippet
uses: astronomer/otto-review-action@a1fa6ce21600a1db3fc71ee2a6e952087c5295be # v0.2.0tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| astro-api-token | Astronomer 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-domain | Astronomer domain. Defaults to 'astronomer.io'. Override for non-prod environments (e.g. 'astronomer-dev.io'). | no | astronomer.io |
| astro-organization | Astronomer organization ID for gateway routing. If empty, the action falls back to the ASTRO_ORGANIZATION env var. | no | "" |
| github-token | GitHub token used to read PR metadata and post the review. Defaults to the workflow's GITHUB_TOKEN. | no | ${{ github.token }} |
| resolve-token | Optional 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-version | Astro 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 | "" |
| model | Model identifier passed to Otto via --model. Empty uses Otto's default. | no | "" |
| max-diff-lines | Maximum 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. | no | 50000 |
| allowed-tools | Comma-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-run | If 'true', the review event is downgraded to COMMENT regardless of Otto's verdict. Use this while you're tuning the prompt. | no | false |
| pr-number | PR 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 | "" |
Outputs
| name | description |
|---|---|
| verdict | Otto's verdict ('approve', 'comment', or 'request_changes'). Empty when Otto failed to produce a parseable response. |
| summary | Otto's one-sentence summary of the PR. |
| comment-count | Number of inline review comments Otto posted this run (net-new, after dedup against still-open prior comments). |
| finding-count | Total 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-count | Number of prior review threads Otto flagged as addressed (verdict.resolved_thread_ids). The action resolves each — see 'resolve-token' for the token requirement. |