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 GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
providerLLM provider: anthropic | openai | openai-compatible | google | bedrock-proxy noanthropic
api-keyAPI 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-urlBase URL for OpenAI-compatible or bedrock-proxy endpoints. Not needed for anthropic or google providers. no""
model-standardModel ID for standard agents (pr-summarizer, code-reviewer, etc.). Defaults to the provider's standard model. no""
model-premiumModel ID for premium/deep-analysis agents (architecture, security). Only used in full review mode. Defaults to the provider's premium model. no""
review-modeReview mode: quick (code-reviewer + conditional agents) or full (all agents including architecture, security, blind-hunter, edge-case-hunter, adversarial-general). noquick
review-targetReview 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. nopr
max-diff-linesMaximum diff size in lines before the review is skipped to prevent runaway token consumption. A comment is posted on the PR explaining the skip. no5000
pr-numberPull request number. Required for pr review-target; not used in standalone mode. no""
base-refBase branch name (e.g., main)yes
head-shaHead commit SHAyes
github-tokenGitHub token for posting reviews and comments. Needs pull-requests: write permission. yes
parallelRun 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. notrue
max-inlineMaximum 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. no25
temperatureSampling 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. no0.3
max-tokens-per-agentMaximum 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. no16384
analyzer-concurrencyMaximum 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. no4
enable-suggestionsEnable 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. notrue
engineDeprecated no-op. The bash engine was removed in v2.0.0; Python is the only engine. Accepted for backward compatibility and ignored. nopython
ignore-merge-commitsWhen 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. notrue
sarif-pathsComma-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-patternsComma-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-modeControls 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. noappend
analyzersAllowlist: 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-analyzersDenylist: 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""
agentsAllowlist: 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-agentsDenylist: 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-scopeControls 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. nocap
context-enrichmentWhen 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. nofalse
feedback-loopWhen 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. nofalse
judge-passWhen 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. notrue
profile-max-tokensMaximum 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. no4096

no outputs