tag1consulting/AI PR Review
AI-powered pull request review using multiple LLM agents. Posts a summary comment and inline review findings on the PR. NOTE: This composite action installs shellcheck on the runner but does not install semgrep, trufflehog, ruff, or golangci-lint. New consumers should use the container-action variant instead: uses: tag1consulting/ai-pr-review/container-action@main The container action pulls a pre-built image with all analyzer binaries pinned at verified versions. See container-action/action.yml.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Stale
- License
- None
Inputs
| name | description | required | default |
|---|---|---|---|
| provider | LLM provider: anthropic | openai | openai-compatible | google | bedrock-proxy | no | anthropic |
| api-key | API key for the chosen provider. Maps to ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, or BEDROCK_API_KEY depending on the provider. | yes | — |
| base-url | Base URL for OpenAI-compatible or bedrock-proxy endpoints. Not needed for anthropic or google providers. | no | "" |
| model-standard | Model ID for standard agents (pr-summarizer, code-reviewer, etc.). Defaults to the provider's standard model. | no | "" |
| model-premium | Model ID for premium/deep-analysis agents (architecture, security). Only used in full review mode. Defaults to the provider's premium model. | no | "" |
| review-mode | Review mode: quick (code-reviewer + conditional agents) or full (all agents including architecture, security, blind-hunter, edge-case-hunter, adversarial-general). | no | quick |
| review-target | Review target: pr (post review on a pull request) or standalone (deprecated, emits a runtime warning — see issue #623). Standalone currently only disables merge-commit filtering during diff computation — it does not post findings anywhere. Issue-posting was part of the bash engine removed in v2.0.0 and has not been reimplemented in the Python engine; formal removal is planned for a future major version. Default: pr. | no | pr |
| max-diff-lines | Maximum diff size in lines before the review is skipped to prevent runaway token consumption. A comment is posted on the PR explaining the skip. | no | 5000 |
| pr-number | Pull request number. Required for pr review-target; not used in standalone mode. | no | "" |
| base-ref | Base branch name (e.g., main) | yes | — |
| head-sha | Head commit SHA | yes | — |
| github-token | GitHub token for posting reviews and comments. Needs pull-requests: write permission. | yes | — |
| parallel | Run agents in parallel (tiered fan-out) to reduce wall-clock time. Tier 1 (pr-summarizer, code-reviewer, silent-failure-hunter) and all static analyzers run concurrently; Tier 2 full-mode agents (architecture, security, blind, edge-case, adversarial) run as a second concurrent batch after Tier 1 completes. Set to false to revert to sequential execution if you hit provider rate limits. | no | true |
| max-inline | Maximum number of inline review comments posted per run. Findings beyond this limit are included in the PR summary comment body instead. Set to 0 to post all findings in the summary body with no inline comments. | no | 25 |
| temperature | Sampling temperature for LLM calls. Controls output randomness; lower values produce more deterministic responses. Must be a float in [0, 2]. The default (0.3) is tuned for code review. Sets AI_TEMPERATURE. | no | 0.3 |
| max-tokens-per-agent | Maximum number of output tokens each LLM agent may generate per call. Lower values reduce cost and latency; higher values allow more detailed output on large diffs. Must be a positive integer; values outside [256, 65536] are clamped to that range with a warning. Default changed from 32768 to 16384 in v1.3.0. | no | 16384 |
| analyzer-concurrency | Maximum number of native static-analyzer subprocesses to run simultaneously. Defaults to 4. Set to 1 to restore sequential behaviour (equivalent to setting parallel: false). Ignored when parallel: false is set (concurrency is forced to 1). Requires the Python engine. Sets AI_ANALYZER_CONCURRENCY. | no | 4 |
| enable-suggestions | Enable GitHub "Apply suggestion" buttons on inline review comments. When true, eligible LLM agents (code-reviewer, edge-case-hunter, security-reviewer, silent-failure-hunter, blind-hunter) are instructed to generate concrete code replacement suggestions that PR authors can accept with one click. Increases output token usage. Supported on GitHub and GitLab; ignored on Bitbucket. | no | true |
| engine | Deprecated no-op. The bash engine was removed in v2.0.0; Python is the only engine. Accepted for backward compatibility and ignored. | no | python |
| ignore-merge-commits | When true, strip merge commits that pulled in upstream base-branch changes before computing the diff. Only the PR author's own commits are reviewed. Intra-PR merges (merging one feature branch into another) are preserved. Falls back to the unfiltered diff if cherry-pick conflicts occur. | no | true |
| sarif-paths | Comma-separated list of SARIF 2.1.0 file paths to ingest as additional findings. Each path is relative to the workspace root. Requires the Python engine (engine: python). Findings are merged into the same dedup/suppress pipeline as native analyzer results. | no | "" |
| exclude-patterns | Comma-separated list of git pathspec glob patterns to exclude from the diff in addition to the built-in excludes (lockfiles, vendor/, node_modules/). Each pattern should be a glob such as "docs/*" or "*.generated.go". The leading ":!" pathspec prefix is added automatically. Entries are split on commas; surrounding whitespace is trimmed and empty entries are dropped, so "docs/*, *.generated.go" is treated the same as "docs/*,*.generated.go". Requires the Python engine. See exclude-patterns-mode to control interaction with the built-in defaults. | no | "" |
| exclude-patterns-mode | Controls how exclude-patterns interacts with the built-in exclude list. "append" (default): user patterns are added to the built-in excludes. "replace": only user patterns are used; the built-in lockfile/vendor excludes are dropped. "replace" with an empty exclude-patterns falls back to the built-in defaults with a warning. Invalid values are rejected with an error. | no | append |
| analyzers | Allowlist: comma-separated list of static analyzer names to run. When set, only the listed analyzers run and exclude-analyzers is ignored. Valid names: shellcheck, trufflehog, semgrep, ruff, golangci-lint, hadolint, checkov, phpcs, phpstan, eslint, kube-linter, tflint, cve-check. Entries are split on commas; surrounding whitespace is trimmed and empty entries are dropped. Empty (default): no allowlist — all eligible analyzers run (subject to exclude-analyzers). Unknown names are rejected with an error. Requires the Python engine. | no | "" |
| exclude-analyzers | Denylist: comma-separated list of static analyzer names to skip. All eligible analyzers except those listed will run. Ignored when analyzers (allowlist) is set. Valid names: shellcheck, trufflehog, semgrep, ruff, golangci-lint, hadolint, checkov, phpcs, phpstan, eslint, kube-linter, tflint, cve-check. Entries are split on commas; surrounding whitespace is trimmed and empty entries are dropped. Empty (default): no denylist — all eligible analyzers run. Unknown names are rejected with an error. Requires the Python engine. | no | "" |
| agents | Allowlist: comma-separated list of review agent names to run. When set, only the listed agents run and exclude-agents is ignored. Valid names: pr-summarizer, code-reviewer, silent-failure-hunter, architecture-reviewer, security-reviewer, blind-hunter, edge-case-hunter, adversarial-general, issue-linker. Entries are split on commas; surrounding whitespace is trimmed and empty entries are dropped. Gates (full_mode_only, conditional triggers) still apply on top of the allowlist. Empty (default): no allowlist — all eligible agents run (subject to exclude-agents). Unknown names are rejected with an error. Requires the Python engine. | no | "" |
| exclude-agents | Denylist: comma-separated list of review agent names to skip. All eligible agents except those listed will run. Ignored when agents (allowlist) is set. Valid names: pr-summarizer, code-reviewer, silent-failure-hunter, architecture-reviewer, security-reviewer, blind-hunter, edge-case-hunter, adversarial-general, issue-linker. Note: excluding pr-summarizer suppresses the PR summary comment entirely, not just one reviewer. Entries are split on commas; surrounding whitespace is trimmed and empty entries are dropped. Empty (default): no denylist — all eligible agents run. Unknown names are rejected with an error. Requires the Python engine. | no | "" |
| analyzer-diff-scope | Controls how native static-analyzer findings on lines outside the PR diff are handled. "cap" (default) downgrades them to Low severity and collapses them into a folded section in the review body so they cannot trigger CHANGES_REQUESTED. "drop" removes them entirely. "off" passes them through unchanged (full-file linting behaviour). LLM-agent findings are not affected by this setting. | no | cap |
| context-enrichment | When true, extract symbol references from the diff and look them up in the repo using ripgrep, then inject a <symbol-context> block into each agent's prompt. Requires tree-sitter-language-pack and ripgrep. Only available with the Python engine. Default is 'false' here (composite action on an arbitrary runner) vs 'true' in container-action (which ships tree-sitter and ripgrep). When the tools are absent the Python engine silently no-ops with a warning, so setting this to 'true' on a bare runner is safe but produces no context. The Python config layer defaults to true; this input overrides it when the composite action is used directly. | no | false |
| feedback-loop | When true, load recent feedback entries from the GitBranchStore and inject a <repo-feedback> block into each agent's prompt. GitHub-only. Requires GH_TOKEN with contents:write on the feedback branch. | no | false |
| judge-pass | When true (default), run a cheap-model judge pass after findings are extracted. The judge scores each candidate finding and down-ranks weak single-source results by lowering confidence and routing them to the review body instead of as inline comments. Corroborated findings (static-analyzer + LLM-agent agreement) are always kept. Adds one LLM call per review. Set to 'false' to disable. | no | true |
| profile-max-tokens | Maximum token budget for per-agent language-profile context sections. Each agent receives only the profile sections relevant to its review focus, packed under this budget. Default: 4096. | no | 4096 |
Outputs
no outputs