The Universal, High-Precision AI Code Reviewer & Post-CI Verification Engine for GitHub Actions.
Stop paying $50/seat/month for proprietary AI code review bots.
ReviewGround brings enterprise-grade AI code review, multi-ecosystem registry grounding, interactive PR slash commands, OWASP/CWE security taxonomy tagging, 1-click commit suggestions, and sticky CI summaries directly to your repository with your own API keys.
πΈ Click to View Live PR Code Review & CI Summary Screenshots
1. Sticky PR Comment: ReviewGround AI Code Review & Post-CI Pipeline Verification
2. PR Description Auto-Update: π’ Risk Level Badge & Summary
3. Single Sticky Comment Pattern (In-Place PATCH History)
4. Native 1-Click Code Suggestions on PR Diff (GitHub Files Changed Tab)
| Feature | Standard AI Review Bots | ReviewGround |
|---|---|---|
| Pricing | $20β$60 / developer / month | 100% Free & Open-Core (BYOK) |
| Provider Freedom | Locked into single proprietary vendor | Gemini, OpenAI, Claude, Groq, DeepSeek, OpenRouter, Ollama |
| Model Customization | Fixed models only | Full Custom Model Override (model: '...') |
| Multi-Host Safety | Hijacks open models to hardcoded hosts | Preserves Custom & OpenRouter host selections (Qwen, Llama) |
| Zero-Commit Control | Must edit YAML & commit for model changes | Change Provider/Model via GitHub Repo Variables |
| Package Hallucinations | None (flags modern packages as non-existent) | Multi-Ecosystem Live Registry Grounding (NPM + PyPI + Crates + Go) |
| Commit Suggestions | Markdown text diff blocks | Native GitHub 1-Click [ Apply suggestion ] Buttons |
| Interactive PR Commands | Not supported | @reviewground explain/fix, /review security Slash Commands |
| Security Taxonomy | Generic "could be vulnerable" | OWASP Top 10 + CWE-ID Tagged Findings |
| Large PR Handling | Truncates randomly | Priority-Based Diff Packing (P0: Auth/API/DB first) |
| Test Coverage | Not supported | Auto-detects uncovered exports + suggests test stubs |
| Cost Transparency | Hidden / opaque | Token count & estimated cost footer per review |
| Secret & PII Redaction | Raw diff secrets sent to 3rd-party servers | Pre-flight local masking (AWS, Stripe, GitHub, JWT, SSH) |
| Coding Rules Ingestion | Requires proprietary config file | Auto-ingests AGENTS.md, CLAUDE.md, .cursorrules |
| CI Failure Gating | Spams reviews on non-compiling code | skip-on-ci-failure pauses reviews on broken builds |
| PR Comment Noise | Spams 5β10 new comments per PR push | Single In-Place Sticky Comment (Updated via PATCH) |
| CI Duration Tracking | Not supported | Workflow Jobs API Duration Metrics (9s, 1m 24s) |
| Local / Air-Gapped AI | Not supported | Self-hosted Ollama / Together AI / vLLM compatible |
You bring your own API key(s) from any provider you prefer. ReviewGround supports multiple keys with automatic failover!
| Provider | Recommended Baseline | Free Tier Available? | Get Your API Key (Direct Link) |
|---|---|---|---|
| Google Gemini | gemini-3.5-flash-lite |
β Yes | π Google AI Studio |
| Groq LPU | qwen/qwen3.8-27b |
β Yes | π Groq Console |
| OpenRouter | qwen/qwen-2.5-coder-32b-instruct |
β Yes (15+ free models) | π OpenRouter Keys |
| OpenAI | gpt-4o-mini |
Paid / Credits | π OpenAI Platform |
| Anthropic Claude | claude-3-5-haiku |
Paid / Credits | π Anthropic Console |
| DeepSeek | deepseek-chat |
Paid (Low Cost) | π DeepSeek Platform |
| Custom / Ollama | Any local model | Free (Self-Hosted) | http://localhost:11434/v1 |
You never need to commit API keys to your code. Manage them securely in GitHub:
- In your GitHub repository, click Settings (top tab).
- In the left navigation menu, navigate to Secrets and variables β Actions.
- Under the Repository secrets section, click New repository secret.
- You can name your secret using any of the recognized aliases (ReviewGround auto-detects all of them):
| Provider | Primary Secret Name | Supported Alternate Aliases | Free Tier? |
|---|---|---|---|
| Google Gemini | GEMINI_API_KEY |
GOOGLE_API_KEY, GEMINI_KEY |
β Yes |
| Groq LPU | GROQ_API_KEY |
GROQ_KEY |
β Yes |
| OpenRouter | OPENROUTER_API_KEY |
OPENROUTER_KEY |
β Yes |
| OpenAI | OPENAI_API_KEY |
OPENAI_KEY |
Paid |
| Anthropic Claude | ANTHROPIC_API_KEY |
CLAUDE_API_KEY, ANTHROPIC_KEY, CLAUDE_KEY |
Paid |
| DeepSeek | DEEPSEEK_API_KEY |
DEEPSEEK_KEY |
Paid |
| Custom / Ollama URL | LLM_BASE_URL |
OPENAI_BASE_URL, OLLAMA_BASE_URL, OLLAMA_HOST |
Self-Hosted |
| Custom Endpoint Key | LLM_API_KEY |
CUSTOM_API_KEY |
Optional |
Want to switch models, providers, or fallback chains without editing your .github/workflows YAML or creating git commits?
- In Settings β Secrets and variables β Actions, click the Variables tab.
- Click New repository variable:
- Name:
PROVIDERβ Value:gemini(oropenrouter,openai,anthropic,groq,deepseek) - Name:
MODELβ Value:gemini-3.5-flash-lite(orgpt-4o-mini,qwen/qwen3.8-27b) - Name:
FALLBACK_MODELS(or e.g.GEMINI_FALLBACK_MODELS,GROQ_FALLBACK_MODELS) β Value:gemini-3.1-flash-lite,gemini-flash-latest
- Name:
- Whenever you want to experiment with a new model or customize fallback chains, simply update the variable value in GitHub settings. ReviewGround picks it up on the very next PR run automatically!
No, completely optional! If you only provide your API keys and omit provider and model, ReviewGround auto-detects your keys and uses the optimal default baseline model.
When multiple keys are provided without a preference, ReviewGround uses this battle-tested priority order. Each provider is armed with 3β4 built-in fallback models. If any primary model encounters a quota limit (HTTP 429), model retirement, or downtime, ReviewGround seamlessly falls through the chain:
| Priority Rank | Provider | Default Primary Model | Built-In Fallback Chain (3β4 Models) | Key Strength |
|---|---|---|---|---|
| #1 (Default) | Google Gemini | gemini-3.5-flash-lite |
gemini-3.1-flash-lite β gemini-flash-latest β gemini-flash-lite-latest β gemini-3-flash-preview |
Live Google Search Tool Grounding |
| #2 | OpenAI | gpt-4o-mini |
gpt-4o β gpt-4-turbo β gpt-3.5-turbo |
Precision DevSecOps & code analysis |
| #3 | Anthropic Claude | claude-3-5-haiku |
claude-3-5-sonnet β claude-3-haiku β claude-3-sonnet |
Deep reasoning & architectural insight |
| #4 | Groq LPU | qwen/qwen3.8-27b |
openai/gpt-oss-120b β openai/gpt-oss-20b β allam-2-7b β llama-3.3-70b-versatile |
Ultra-fast LPU inference (under 1s) |
| #5 | DeepSeek | deepseek-chat |
deepseek-reasoner (R1) |
Cost-effective reasoning & logic |
| #6 | OpenRouter | qwen/qwen-2.5-coder-32b-instruct |
meta-llama/llama-3.3-70b-instruct β mistralai/mistral-small-24b β google/gemini-2.0-flash-exp:free β liquid/lfm-2.5-2.6b:free |
200+ models with dedicated routing |
| #7 | Custom / Ollama | llama3.2 |
User-defined | Self-hosted & air-gapped endpoints |
Yes! If you want fallback to strictly occur across your chosen models instead of defaults:
- Set via GitHub Repository Variable:
FALLBACK_MODELS="gemini-3.1-flash-lite,gemini-flash-latest"(or provider-specific:GEMINI_FALLBACK_MODELS,GROQ_FALLBACK_MODELS,OPENAI_FALLBACK_MODELS,ANTHROPIC_FALLBACK_MODELS,DEEPSEEK_FALLBACK_MODELS,OPENROUTER_FALLBACK_MODELS). - Or pass via Action Input:
fallback-models: "gemini-3.1-flash-lite,gemini-flash-latest". - When set, ReviewGround strictly restricts fallbacks to your specified models, guaranteeing that only models you approved will ever run.
ReviewGround features Third-Party Host Preservation:
- If you specify
provider: 'openrouter'orprovider: 'custom'(pointing to Together AI, Fireworks, or Ollama), ReviewGround NEVER hijacks or reroutes your Qwen or Llama model to Groq. It executes strictly against your specified provider. - Models with organization namespaces (e.g.
qwen/qwen-2.5-coder-32b-instruct,meta-llama/llama-3.3-70b-instruct) are correctly recognized as OpenRouter/Multi-host models.
β What happens if you specify a mismatched Provider and Model (e.g. Provider = Google, Model = DeepSeek)?
ReviewGround features Smart Mismatch Auto-Routing:
- If
provider: 'gemini'andmodel: 'deepseek-chat'are passed:- ReviewGround inspects the model prefix and detects that
deepseek-chatbelongs to DeepSeek. - If
DEEPSEEK_API_KEYis present, it automatically routes the request to DeepSeek to prevent an invalid model API error! - If DeepSeek is not configured, Gemini will attempt it, catch the invalid model response, and automatically fall back to
gemini-3.5-flash-litewithout failing your CI pipeline!
- ReviewGround inspects the model prefix and detects that
ReviewGround operates in five execution modes configured via the mode input (mode: review | summary | all | describe | slash-command):
| Mode | Intended Use | Behavior |
|---|---|---|
mode: review (Recommended for Code Review) |
AI Code Review Only | Runs universal multi-provider AI review, live multi-registry grounding, smart diff prioritization, OWASP tagging, and 1-click interactive diff suggestions. Post-CI verification table is completely suppressed. |
mode: describe |
PR Description & Walkthrough | Analyzes the diff to auto-generate a comprehensive PR summary, key changes bullets, an interactive file walkthrough table, and testing checklist directly into the PR body. |
mode: slash-command |
Interactive PR Chat | Handles issue_comment triggers for commands like @reviewground explain, @reviewground fix, and /review full/security. |
mode: summary |
Post-CI Verification Only | Queries GitHub Actions Workflow Jobs API to render duration metrics (14s, 1m 20s) and status badges for Gitleaks, Dependency Audit, Build, Unit Tests, and custom stages. |
mode: all (Default) |
Unified Review & CI Verification | Runs AI review first, then appends the CI verification summary to the single sticky comment. Features Smart CI Auto-Skip: If no CI stages (gitleaks-result, build-result, etc.) or matching workflow jobs are detected, the CI table is automatically omitted to prevent noisy unknown status rows. |
ReviewGround is designed with zero-boilerplate ergonomics. Over 80% of intelligent features run automatically out-of-the-box without writing a single line of YAML configuration!
| Feature | Built-In Default | What It Does Automatically |
|---|---|---|
| Execution Mode | mode: 'all' |
Unified AI code review + post-CI verification table in a single sticky PR comment |
| 1-Click Diff Suggestions | enable-inline-suggestions: 'true' |
Injects native GitHub [ Apply suggestion ] buttons on PR diffs |
| Review Depth | review-level: 'standard' |
Filters out linter nitpicks; focuses on real logic bugs, security & performance |
| Search Grounding | enable-search-grounding: 'true' |
Live Google Search grounding for Gemini to eliminate package hallucinations |
| Multi-Registry Checks | enable-multi-registry-verify: 'true' |
Live verification across NPM, PyPI, Crates.io, and Go module proxy |
| Smart Diff Priority | enable-smart-diff-priority: 'true' |
P0 files (Auth/API/DB) reviewed first; lockfiles/assets skipped on large PRs |
| Security Taxonomy | enable-owasp-tagging: 'true' |
Tags all security findings with CWE-ID & OWASP Top 10 categories |
| Missing Test Detector | enable-test-coverage-check: 'true' |
Flags newly exported functions lacking unit tests and suggests stubs |
| Token & Cost Footer | enable-cost-footer: 'true' |
Shows single-run tokens, USD cost, latency, and cumulative PR spend |
| Deterministic Sampling | temperature: '0.2' |
Low variance, highly deterministic code reviews |
| Output Token Limit | max-tokens: '8192' |
Generous response bounds preventing truncation during thinking/diagram generation |
| Input Diff Token Budget | max-diff-tokens: '100000' |
Token budget for diff analysis before prioritization / truncation (100k tokens β 400k chars) |
| Input Diff Character Budget | max-diff-chars: '400000' |
Raw character ceiling for diff analysis (overrides max-diff-tokens if explicitly set) |
| Base Comparison Branch | base-branch: 'main' |
Automatically calculates diff against base main branch |
| Review Language | review-language: 'en' |
English language review output by default |
| Actionable Findings Banner | Built-in | Top-level summary badge highlighting Blockers, Warnings, and Committable Suggestions |
| AI Coding Agent Prompts | Built-in | Formats defensive <details><summary>π€ Prompt for AI Coding Agents</summary> blocks |
| Review Effort Estimator | Built-in | Automatically computes complexity tiers (1β5) and review duration estimate (~15β20m) |
| Pre-Merge Invariant Table | Built-in | Expandable status checklist for test coverage, secret sanitization & package grounding |
| Sequence Diagram Prompts & Auto-Healer | Built-in | Directs models to generate Mermaid sequence diagrams with automated syntax healing & sanitization for GitHub rich display rendering |
| Feature | Default | Why You Should Enable It (with:) |
|---|---|---|
| CI Failure Gating | skip-on-ci-failure: 'false' |
Set 'true' in multi-stage CI pipelines to pause AI reviews if build/test fails, saving API tokens on broken code (see Option 5) |
| PR Description Update | enable-pr-description-update: 'false' |
Set 'true' to auto-append a π’ Low / π‘ Med / π΄ High Risk badge & summary to the PR body |
| Check Run Gate | enable-check-run: 'false' |
Set 'true' to create a blocking GitHub Check Run (Pass/Fail Gate) in branch protection (requires checks: write) |
| Prune Outdated Suggestions | enable-prune-inline-suggestions: 'false' |
Set 'true' to auto-delete resolved/outdated inline suggestions on subsequent pushes |
| Permission | Required Level | Why ReviewGround Needs It |
|---|---|---|
contents: read |
Mandatory | Checks out repository code and computes git diff |
pull-requests: write |
Mandatory | Posts the sticky review comment, 1-click inline suggestions, and updates PR description |
issues: write |
Recommended | Handles issue comments and conversational slash command thread replies seamlessly |
actions: read |
Recommended | Queries the GitHub Actions Jobs API to calculate stage duration metrics (14s, 1m 20s) |
checks: write |
Conditional | Only required if enable-check-run: 'true' (for blocking merge gate status checks) |
Add paths-ignore and concurrency: cancel-in-progress to avoid wasting API quota on docs-only commits or rapid-fire pushes:
on:
pull_request:
types: [opened, synchronize, reopened]
paths-ignore:
- "**.md" # Skips doc updates (saves 100% LLM tokens)
- "docs/**"
- ".gitignore"
- "LICENSE"
# Cancels older running reviews on PRs to save tokens/minutes, but queues safely on main branch
concurrency:
group: reviewground-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}Tip
Does ReviewGround run immediately on feature branch PRs, or do I need to merge to main first?
It runs immediately on your feature branch PR!
GitHub Actions evaluates pull_request workflow triggers from the PR's head branch. You do NOT need to merge to main first. You can push your feature branch, open a PR, and test ReviewGround's AI review, 1-click diff suggestions, and CI checks immediately before merging to production!
Create .github/workflows/reviewground.yml in your project:
This workflow leverages built-in defaults (unified review, 1-click diff suggestions, live grounding), enables enterprise gating, and provides instant review feedback within ~15β25 seconds running in parallel with your test suites. It also allows runtime provider/model switching via GitHub Repository Variables (vars.*):
name: ReviewGround AI Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
# Skips doc updates and PRs opened by bots (saves tokens)
paths-ignore:
- "**.md"
- "docs/**"
- ".gitignore"
- "LICENSE"
permissions:
contents: read
pull-requests: write
actions: read
checks: write # Enables Check Run pass/fail gate
# Cancels older running reviews on PRs, but queues safely on main branch
concurrency:
group: reviewground-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0 # Required for full git diff calculation
- uses: arungupta1526/ReviewGround@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
skip-on-ci-failure: "false" # Default 'false' for fast parallel reviews (set 'true' in Option 5 with build-result to pause on broken builds)
enable-pr-description-update: "true" # Adds π’/π‘/π΄ risk badge & summary to PR body
enable-check-run: "true" # Native GitHub Check Run gate
env:
# API Keys (Stored in Repository Secrets)
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
# Zero-Commit Dynamic Controls (Configured in Repository Variables)
PROVIDER: ${{ vars.PROVIDER || '' }}
MODEL: ${{ vars.MODEL || '' }}Tip
Fast Parallel Review vs. CI-Gated Review:
- Option 1 (Fast Parallel Review): Runs immediately upon PR submission in parallel with your test suite. Developers get instant code suggestions within 20s without waiting for long build or test times.
- Option 5 (CI-Gated Review): If you want to pause AI reviews when builds or tests fail to prevent noise and save tokens on broken code, integrate ReviewGround into your main CI pipeline using
needs: [build, test]andskip-on-ci-failure: 'true'.
name: ReviewGround Gemini Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
actions: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: arungupta1526/ReviewGround@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: review
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}name: ReviewGround OpenRouter Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
actions: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: arungupta1526/ReviewGround@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: review
model: "qwen/qwen-2.5-coder-32b-instruct" # Or any model on OpenRouter!
env:
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}name: ReviewGround Self-Hosted Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
actions: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: arungupta1526/ReviewGround@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: review
provider: "custom"
model: "llama3.2"
env:
LLM_BASE_URL: "http://localhost:11434/v1" # Or https://api.together.xyz/v1
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}Combine automated testing, building, and security scans with CI-gated AI code review. When skip-on-ci-failure: 'true' is enabled in a multi-stage pipeline, ReviewGround pauses deep AI review if build or test fails, saving API tokens and preventing noise on broken code:
name: CI Pipeline & AI Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
actions: read # Required to fetch stage durations
checks: write # Required for Check Run gate
# Cancels older running reviews on PRs, but queues safely on main branch
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
gitleaks:
name: π 1. Secret Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Gitleaks Scan
run: echo "Gitleaks scan complete"
security-audit:
name: π 2. Dependency Audit
needs: [gitleaks]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Audit Dependencies
run: echo "Audit complete"
build-and-test:
name: π 3. Build & Tests
needs: [security-audit]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Build & Test Invariants
run: npm ci && npm run build && npm test
reviewground:
name: π‘οΈ 4. ReviewGround AI Review & CI Verification
needs: [gitleaks, security-audit, build-and-test]
if: always() && github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0 # Required for full git diff calculation
- uses: arungupta1526/ReviewGround@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: all
skip-on-ci-failure: "true" # Pauses AI review if build-and-test fails, saving API tokens
enable-pr-description-update: "true"
enable-check-run: "true"
gitleaks-result: ${{ needs.gitleaks.result }}
audit-result: ${{ needs.security-audit.result }}
build-result: ${{ needs.build-and-test.result }}
test-result: ${{ needs.build-and-test.result }}
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
PROVIDER: ${{ vars.PROVIDER || '' }}
MODEL: ${{ vars.MODEL || '' }}For enterprise teams and advanced workflows, here is an exhaustive reference configuration showcasing every single available input, its default value, and descriptive comments:
Note
Reference Manifest: Over 80% of the inputs below are already active by default (e.g. mode: all, enable-inline-suggestions: 'true', enable-search-grounding: 'true', review-level: 'standard'). You do not need to declare them in your YAML unless you specifically want to override their default behavior.
name: ReviewGround Full Enterprise Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
actions: read
checks: write # Required if enable-check-run is set to 'true'
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0 # Required for git diff calculation
- uses: arungupta1526/ReviewGround@v1
with:
# ββ Core Execution & Git Controls ββββββββββββββββββββββββββββββββ
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: "all" # 'review' | 'summary' | 'all' | 'describe' | 'slash-command'
base-branch: "main" # Target branch for diff (default: 'main')
# ββ AI Review Depth & Customization ββββββββββββββββββββββββββββββ
review-level: "standard" # 'critical' | 'standard' (default) | 'comprehensive'
review-language: "en" # BCP-47 language code e.g. 'en', 'ja', 'es', 'de', 'zh'
temperature: "0.2" # Sampling temperature 0.0β1.0 (default: '0.2')
max-tokens: "8192" # Max response token length (default: '8192')
ignore-patterns: "" # Comma-separated globs e.g. 'dist/**,*.min.js'
# ββ Grounding & Inline Suggestions βββββββββββββββ
enable-inline-suggestions: "true" # Native GitHub 1-click [ Apply suggestion ] buttons
enable-prune-inline-suggestions: "false" # Auto-delete / prune outdated inline suggestions on subsequent CI runs (default: 'false')
enable-search-grounding: "true" # Google Search tool grounding for Gemini
enable-npm-verify: "true" # Live registry.npmjs.org anti-hallucination check
# ββ v1.3.0: Multi-Ecosystem Registry Grounding βββββββββββββββββββ
enable-multi-registry-verify: "true" # Also verify PyPI, Crates.io & Go module proxy (default: 'true')
# ββ v1.3.0: Token & Cost Transparency Footer βββββββββββββββββββββ
enable-cost-footer: "true" # Show est. tokens + cost + latency in sticky comment (default: 'true')
# ββ v1.3.0: Smart Diff Priority Scoring for Large PRs ββββββββββββ
enable-smart-diff-priority: "true" # P0=auth/API/DB first, P2=assets/locks skipped (default: 'true')
# ββ v1.3.0: OWASP Top 10 & CWE Taxonomy Tagging βββββββββββββββββ
enable-owasp-tagging: "true" # Tag security findings with CWE-ID & OWASP category (default: 'true')
# ββ v1.3.0: Missing Unit Test Detection & Stubs ββββββββββββββββββ
enable-test-coverage-check: "true" # Warn on new exports lacking tests + suggest stubs (default: 'true')
# ββ v1.3.1: CI Failure Gating & Anti-Noise Control βββββββββββββββ
skip-on-ci-failure: "false" # Pause deep AI review if build/test failed to prevent noise on broken code
# ββ v1.3.0: Automated PR Description & Walkthrough (Opt-In) βββββββ
generate-pr-description: "false" # Auto-generate PR summary, walkthrough table & checklist
enable-pr-description-update: "false" # Append π’/π‘/π΄ risk badge & walkthrough table to PR body
enable-check-run: "false" # Create blocking pass/fail GitHub Check Run gate
# ββ Multi-Provider Overrides (Optional) ββββββββββββββββββββββββββ
provider: "" # Force: 'gemini' | 'groq' | 'openai' | 'anthropic' | 'deepseek' | 'openrouter' | 'custom'
model: "" # Force model override e.g. 'deepseek-chat', 'gpt-4o'
fallback-models: "" # Custom comma-separated failover models
# ββ Post-CI Status Verification (Optional Stage Inputs) βββββββββββ
gitleaks-result: "" # e.g. ${{ needs.gitleaks.result }}
audit-result: "" # e.g. ${{ needs.security-audit.result }}
build-result: "" # e.g. ${{ needs.build.result }}
test-result: "" # e.g. ${{ needs.test.result }}
extra-stages: "" # e.g. '[{"name":"Deploy","result":"success"}]'
# ββ Sticky Comment & Workflow Identifiers (Optional) ββββββββββββββ
comment-tag: "<!-- reviewground-code-review -->" # HTML anchor identifying the sticky PR comment
pr-number: "" # PR number (auto-detected from GitHub event if omitted)
run-id: "" # Workflow run ID for stage durations (defaults to GITHUB_RUN_ID)
env:
# ββ BYOK Provider API Keys (set any one or multiple in GitHub Secrets) ββ
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }} # Self-hosted endpoint (e.g. Ollama/vLLM)
LLM_API_KEY: ${{ secrets.LLM_API_KEY }} # API key for custom endpointflowchart TD
%% Color Palettes
classDef trigger fill:#1e1e2e,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4;
classDef config fill:#181825,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4;
classDef safety fill:#313244,stroke:#f9e2af,stroke-width:2px,color:#f9e2af;
classDef grounding fill:#11261f,stroke:#a6e3a1,stroke-width:2px,color:#a6e3a1;
classDef llm fill:#2b1b3d,stroke:#f38ba8,stroke-width:2px,color:#f5c2e7;
classDef zod fill:#1e293b,stroke:#38bdf8,stroke-width:2px,color:#e0f2fe;
classDef output fill:#11261f,stroke:#a6e3a1,stroke-width:2px,color:#a6e3a1;
classDef summary fill:#261828,stroke:#fab387,stroke-width:2px,color:#fab387;
classDef newfeature fill:#1f1a00,stroke:#f9e2af,stroke-width:2px,color:#f9e2af;
subgraph TRIGGER["1. GitHub Event & Context Resolution"]
PR["PR Event: opened / synchronize / reopened"]:::trigger
COMMENT_EVT["issue_comment Event<br/>@reviewground / /review commands"]:::trigger
BOT{"Is PR from Automated Bot?<br/>(e.g. dependabot[bot])"}:::safety
SKIP["Graceful Skip (Preserves CI Build Green)"]:::safety
end
subgraph SLASH["1b. Slash Command Handler (mode: slash-command)"]
PARSE_CMD["Parse Command from Comment Body<br/>@reviewground explain, fix, chat / /review on-demand"]:::newfeature
CMD_EXPLAIN["AI Explains Flagged Issues<br/>with Educational Context"]:::newfeature
CMD_FIX["AI Generates Concrete Code Patch"]:::newfeature
CMD_CHAT["Conversational PR Chatbot<br/>Answers Any @reviewground Query"]:::newfeature
CMD_REVIEW["On-Demand Focused Re-Review<br/>full, security, performance, standard"]:::newfeature
end
subgraph DESCRIBE["1c. PR Description & Walkthrough (mode: describe)"]
DIFF_DESC["Extract PR Diff for Walkthrough"]:::config
GEN_WALKTHROUGH["AI Generates Walkthrough Table, Summary,<br/>Key Changes, Testing Checklist & Risk Badge"]:::newfeature
MERGE_BODY["Smart Body Merge<br/>Preserves Author Notes & Updates PR Body"]:::output
end
subgraph CONFIG["2. Dynamic Config & Context Ingestion"]
PARSE["Parse Inputs & Repository Variables<br/>(vars.PROVIDER, vars.MODEL, vars.FALLBACK_MODELS)"]:::config
RULES["Universal Repo Guidelines Auto-Ingestion<br/>.reviewground.yml, AGENTS.md, .cursorrules, CLAUDE.md"]:::config
DETECT{"Auto-Detect Provider Priority<br/>Gemini β OpenAI β Claude β Groq β DeepSeek β OpenRouter β Custom"}:::config
CI_GATE{"CI Broken & skip-on-ci-failure?<br/>(build or test failed)"}:::safety
PAUSE_NOTICE["Post Advisory CI Pause Notice<br/>(Saves LLM Tokens & Noise)"]:::output
KEYS_CHECK{"Any LLM Key Configured?<br/>(Secrets or Env)"}:::safety
SETUP_NOTICE["Post Interactive Missing Key Setup Guide<br/>(1-Minute Setup Banner + Free Key Links)"]:::output
end
subgraph ENGINE["3. Grounding & Multi-Provider AI Review Engine"]
DIFF["Extract PR Diff (GitHub API / git diff)"]:::config
SANITIZER["Pre-Flight Diff Secret & PII Sanitizer<br/>Redact AWS, Stripe, GitHub, JWT Tokens"]:::newfeature
PRIORITY["Smart Diff Prioritizer<br/>P0=auth/API/DB first, P1=standard, P2=assets/locks skip"]:::newfeature
REGISTRY["Multi-Ecosystem Registry Grounding<br/>NPM + PyPI + Crates.io + Go module proxy"]:::grounding
SEARCH["Google Search Tool Grounding (Gemini)<br/>Live Web Context Injection"]:::grounding
OWASP["OWASP Top 10 + CWE Taxonomy Injection<br/>Forces CWE-ID & OWASP category on security findings"]:::newfeature
REPO_TREE["Lightweight Repo Tree Grounding<br/>Sibling File Structure Outline"]:::grounding
PROMPT["Assemble Grounded Prompt + System Guardrails<br/>Anti-Nitpick Filter, Sequence Diagrams & Severity Badges"]:::grounding
RETRY["fetchWithRetry (Backoff + Jitter)"]:::llm
CALL_PRIMARY["Call Primary Model<br/>(e.g. gemini-3.5-flash-lite / qwen3.8-27b)"]:::llm
FALLBACK_CHECK{"Primary Succeeded or HTTP 429 / Quota Error?"}:::llm
CALL_FALLBACK["Sequential Fallback Chain<br/>(Custom FALLBACK_MODELS or 3-4 Built-In Models)"]:::llm
DIAGNOSTIC_NOTICE["Post Diagnostic Failure Notice<br/>(Links to Actions Run Logs)"]:::safety
ZOD["Zod 4.6.5 Validation & Line Number Coercion<br/>(InlineSuggestionsListSchema)"]:::zod
end
subgraph POSTPROC["4. Post-Processing & Enrichment"]
EFFORT["Review Effort & Complexity Estimator<br/>Tiers 1β5 & Review Duration (~15β20m)"]:::newfeature
PREMERGE["Pre-Merge Invariant Checks Table<br/>Coverage, Secret Sanitization & Quality Status"]:::newfeature
ACTIONABLE["Actionable Findings & AI Prompt Box<br/>Blockers/Warnings Badges & Injection Defense"]:::newfeature
TEST_CHECK["Missing Test Coverage Detector<br/>Flags uncovered exports + suggests stubs (TS/JS/Py/Go)"]:::newfeature
COST_FOOTER["Token & Cost Transparency Footer<br/>Model β’ Est. Tokens β’ Est. USD Cost β’ Latency"]:::newfeature
end
subgraph GATES["5. Multi-Channel Outputs & Merge Gates"]
COMMENT_INLINE["PR Diff Review Comments API<br/>1-Click 'Apply suggestion' In Diff"]:::output
CHECK_RUN["GitHub Check Run (Pass/Fail Gate)<br/>Blocks Merge on Critical Vulnerabilities"]:::output
PR_DESC["Auto-Update PR Description<br/>Injects Walkthrough Table & Risk Badge"]:::output
COMMENT_REPLY["PR Comment Reply API<br/>Direct Conversational Response"]:::output
end
subgraph SUMMARY_FLOW["6. Post-CI Pipeline Sticky Summary & Dynamic Job Discovery"]
CI_CHECK{"Any CI Data or Jobs Detected?<br/>hasCiData()"}:::summary
SKIP_CI["Smart Auto-Skip Empty CI Table<br/>(Keeps PR Comments Clean)"]:::safety
JOB_API["Dynamic Job Auto-Discovery<br/>(Query GitHub API: /actions/runs/{run_id}/jobs)"]:::summary
DURATIONS["Calculate Real Stage Durations + Extra Stages<br/>(Gitleaks, Audit, Build, Test, Deploy...)"]:::summary
STICKY_FIND{"Previous Review Sticky Comment Found?<br/>(<!-- reviewground-code-review -->)"}:::summary
UPDATE["PATCH Existing Comment (In-Place Update)"]:::output
CREATE["POST New Sticky Comment"]:::output
end
%% Trigger routing
PR --> BOT
COMMENT_EVT --> PARSE_CMD
PARSE_CMD --> CMD_EXPLAIN & CMD_FIX & CMD_CHAT
PARSE_CMD --> CMD_REVIEW
CMD_EXPLAIN & CMD_FIX & CMD_CHAT --> COMMENT_REPLY
CMD_REVIEW --> STICKY_FIND
BOT -- "Yes" --> SKIP
BOT -- "No" --> PARSE
PARSE --> RULES
RULES --> DETECT
DETECT -- "mode: describe" --> DIFF_DESC
DIFF_DESC --> GEN_WALKTHROUGH
GEN_WALKTHROUGH --> MERGE_BODY
DETECT --> CI_GATE
CI_GATE -- "CI Failed" --> PAUSE_NOTICE
CI_GATE -- "CI OK / Ignored" --> KEYS_CHECK
KEYS_CHECK -- "No Keys" --> SETUP_NOTICE
KEYS_CHECK -- "Keys Found" --> DIFF
DIFF --> SANITIZER
SANITIZER --> PRIORITY
PRIORITY --> REGISTRY
REGISTRY --> SEARCH
SEARCH --> OWASP
OWASP --> REPO_TREE
REPO_TREE --> PROMPT
PROMPT --> CALL_PRIMARY
CALL_PRIMARY --> RETRY
RETRY --> FALLBACK_CHECK
FALLBACK_CHECK -- "Failed / 429" --> CALL_FALLBACK
FALLBACK_CHECK -- "Success" --> ZOD
CALL_FALLBACK -- "All Failed" --> DIAGNOSTIC_NOTICE
CALL_FALLBACK -- "Fallback Succeeded" --> ZOD
ZOD --> EFFORT
EFFORT --> PREMERGE
PREMERGE --> ACTIONABLE
ACTIONABLE --> TEST_CHECK
TEST_CHECK --> COST_FOOTER
COST_FOOTER --> STICKY_FIND
COST_FOOTER --> COMMENT_INLINE & CHECK_RUN
COST_FOOTER -. "generate-pr-description: true" .-> PR_DESC
PR_DESC --> MERGE_BODY
%% CI Summary Flow
DETECT -. "mode: summary or all" .-> CI_CHECK
CI_CHECK -- "No CI Data" --> SKIP_CI
CI_CHECK -- "Jobs / Stages Present" --> JOB_API
JOB_API --> DURATIONS
DURATIONS --> STICKY_FIND
STICKY_FIND -- "Found" --> UPDATE
STICKY_FIND -- "Not Found" --> CREATE
High-resolution architecture renders available in SVG format and PNG format.
ReviewGround is architected around domain-driven, single-responsibility modules adhering to strict file-size limits (<350 lines per module):
reviewground/
βββ .github/
β βββ workflows/ # CI testing & Release Please release automation
β βββ PULL_REQUEST_TEMPLATE.md
β βββ dependabot.yml
βββ images/ # Visual assets & architecture diagrams (.mmd, .svg, .png)
β βββ architecture-diagram.mmd
β βββ architecture-diagram.svg
β βββ architecture-diagram.png
β βββ pr-1-click-code-suggestion.png
β βββ pr-description-risk-badge.png
β βββ pr-sticky-patch-history.png
β βββ pr-sticky-review-comment.png
βββ src/
β βββ github/ # π GitHub REST API integration
β β βββ checks.ts # GitHub Check Run gates & PR description updates
β β βββ comments.ts # Diff fetching, inline suggestions & comment management
β β βββ reviewThreads.ts # GraphQL reviewThreads query & auto-resolve/outdated folding
β β βββ stickyComment.ts # In-place sticky comment update lifecycle
β β βββ workflowJobs.ts # GitHub Actions API workflow run & stage duration tracking
β β βββ index.ts
β βββ metrics/ # β‘ Cost, latency & token usage calculations
β β βββ costEstimator.ts # Model-aware pricing & cost transparency footer
β β βββ index.ts
β βββ prompts/ # π§ Prompt engineering & guideline loaders
β β βββ reviewPrompt.ts # Provider-optimized prompts (XML/JSON/Markdown) & OWASP injection
β β βββ index.ts
β βββ providers/ # π BYOK Multi-Provider Engine (Native fetch adapters)
β β βββ anthropic.ts # Anthropic Claude 3.5 Haiku/Sonnet adapter
β β βββ custom.ts # OpenAI-compatible custom endpoints (vLLM, Ollama)
β β βββ deepseek.ts # DeepSeek V3 / R1 reasoning adapter
β β βββ gemini.ts # Google Gemini adapter with Google Search grounding
β β βββ groq.ts # Groq ultra-fast LPU inference adapter
β β βββ openai.ts # OpenAI GPT-4o / GPT-4o-mini adapter
β β βββ openrouter.ts # OpenRouter aggregator adapter
β β βββ types.ts # Provider interfaces & response contracts
β β βββ index.ts # ProviderManager with auto-detection & fallback chains
β βββ utils/
β β βββ fetchWithRetry.ts # Native exponential backoff with jitter
β β βββ repoContext.ts # ποΈ Lightweight repo structure grounder (prevents duplicate utilities)
β β βββ secretSanitizer.ts # π Pre-flight diff secret & PII redactor (AWS, Stripe, JWT, keys)
β βββ diffPrioritizer.ts # π― Smart diff prioritization (P0 auth/APIs, P2 locks/assets)
β βββ packageRegistry.ts # π¦ Multi-ecosystem real-time registry verification (npm, PyPI, crates, go)
β βββ prDescriber.ts # π PR description & walkthrough table generator
β βββ reviewer.ts # π‘οΈ Core review orchestrator
β βββ slashCommands.ts # π¬ Interactive PR comments dispatcher (@reviewground explain/fix/chat)
β βββ summary.ts # π¦ Post-CI verification summary generator
β βββ testCoverageDetector.ts# π§ͺ Missing unit test detection & stub suggestions
β βββ index.ts # π GitHub Action entry point
βββ test/ # π§ͺ Unit & invariant test suites (100% passing)
β βββ features.test.ts # Tests for registry verification, diff prioritization, test coverage
β βββ github.test.ts # Tests for repo sanitization, SSRF protection, token & cost calculation
β βββ prDescriber.test.ts # Tests for PR description generation & body merging
β βββ providers.test.ts # Tests for multi-provider BYOK routing & fallbacks
β βββ repoContext.test.ts # Tests for lightweight repo tree grounding
β βββ reviewPrompt.test.ts # Tests for universal guidelines auto-ingestion & anti-nitpick filters
β βββ reviewer.test.ts # Tests for review engine, inline suggestions & Zod validation
β βββ secretSanitizer.test.ts# Tests for pre-flight diff secret & credential masking patterns
β βββ summary.test.ts # Tests for CI summary generation, durations & badges
βββ action.yml # GitHub Action metadata & input definitions (<125 char description)
βββ package.json
βββ tsconfig.json
LLMs trained with static cutoffs frequently hallucinate that newly released major versions or frameworks do not exist (e.g. Node 24, Next.js 15, Zod 4, TypeScript 7).
ReviewGround parses every package added in your diff and proactively inspects registry.npmjs.org in real-time, injecting verified releases as ground-truth context before prompting the LLM. For Gemini, Google Search tool grounding (tools: [{ googleSearch: {} }]) is enabled automatically with graceful fallback.
Instead of dumping passive code blocks in a comment, ReviewGround formats fixes into the GitHub Pull Request Review Comments API.
Developers can apply fixes with native GitHub buttons directly in the Files changed tab:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β src/auth/jwt.ts:42 β
β π€ ReviewGround 1-Click Code Suggestion β
β ```suggestion β
β const payload = jwt.verify(token, secretKey); β
β ``` β
β [ Apply suggestion ] [ Add suggestion to batch ] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
All line numbers are validated and safely coerced with Zod 4.6.5 schemas (InlineSuggestionsListSchema), preventing runtime crashes when LLMs return string line numbers.
ReviewGround detects previous comments using a persistent HTML marker (<!-- reviewground-code-review -->) and updates them using PATCH /repos/{owner}/{repo}/issues/comments/{id}.
- New commits update the existing review in-place without comment spam.
- Dynamic Job Auto-Discovery: ReviewGround queries the GitHub Actions Workflow Jobs API (
/actions/runs/{run_id}/jobs) to automatically discover all workflow jobs (whether 1, 3, or 10 jobs like Lint, Typecheck, Docker Build, Playwright E2E, Deploy) without forcing hardcoded stages:
| Pipeline Stage / Job | Status | Duration | Verification Logs |
|---|---|---|---|
| π§ͺ 1. Lint & Typecheck | β Passed | 14s |
View Logs |
| π§ͺ 2. Docker Container Build | β Passed | 1m 20s |
View Logs |
| π§ͺ 3. Playwright E2E Tests | β Passed | 45s |
View Logs |
(Note: If you provide explicit 4-stage inputs like gitleaks-result or build-result, ReviewGround will render them according to your custom inputs).
Every setting can be passed either as an Action Input (with:) or as an Environment Variable / Secret (env:):
| Setting | Action Input (with:) |
Environment Variable & Secret Aliases (env: / vars.*) |
Default |
|---|---|---|---|
| GitHub Token | github-token |
GITHUB_TOKEN, GH_TOKEN |
${{ github.token }} |
| Execution Mode | mode |
REVIEWGROUND_MODE, MODE |
all (review | summary | all | describe | slash-command) |
| Preferred Provider | provider |
REVIEWGROUND_PROVIDER, PROVIDER, LLM_PROVIDER |
Auto-detected |
| Model Override | model |
REVIEWGROUND_MODEL, MODEL, LLM_MODEL |
Provider default |
| Fallback Models | fallback-models |
FALLBACK_MODELS, <PROVIDER>_FALLBACK_MODELS |
Built-in 3β4 models |
| Gemini API Key | gemini-api-key |
GEMINI_API_KEY, GOOGLE_API_KEY, GEMINI_KEY |
β |
| Groq API Key | groq-api-key |
GROQ_API_KEY, GROQ_KEY |
β |
| OpenRouter API Key | openrouter-api-key |
OPENROUTER_API_KEY, OPENROUTER_KEY |
β |
| OpenAI API Key | openai-api-key |
OPENAI_API_KEY, OPENAI_KEY |
β |
| Anthropic API Key | anthropic-api-key |
ANTHROPIC_API_KEY, CLAUDE_API_KEY, ANTHROPIC_KEY, CLAUDE_KEY |
β |
| DeepSeek API Key | deepseek-api-key |
DEEPSEEK_API_KEY, DEEPSEEK_KEY |
β |
| Custom Base URL | llm-base-url |
LLM_BASE_URL, OPENAI_BASE_URL, OLLAMA_BASE_URL, OLLAMA_HOST |
β |
| Custom API Key | llm-api-key |
LLM_API_KEY, CUSTOM_API_KEY |
β |
| Search Grounding | enable-search-grounding |
ENABLE_SEARCH_GROUNDING |
true |
| Inline Suggestions | enable-inline-suggestions |
ENABLE_INLINE_SUGGESTIONS |
true |
| Prune Inline Suggestions | enable-prune-inline-suggestions |
ENABLE_PRUNE_INLINE_SUGGESTIONS |
false β auto-deletes / prunes outdated ReviewGround inline suggestions on subsequent CI runs |
| NPM Verification | enable-npm-verify |
ENABLE_NPM_VERIFY |
true |
| Multi-Registry Verify | enable-multi-registry-verify |
ENABLE_MULTI_REGISTRY_VERIFY |
true β also verifies PyPI, Crates.io & Go module proxy |
| Cost Footer | enable-cost-footer |
ENABLE_COST_FOOTER |
true β shows token count + estimated cost in sticky comment |
| Smart Diff Priority | enable-smart-diff-priority |
ENABLE_SMART_DIFF_PRIORITY |
true β P0 (auth/API/DB), P1 (standard), P2 (assets/locks) |
| OWASP Tagging | enable-owasp-tagging |
ENABLE_OWASP_TAGGING |
true β tags security findings with CWE-ID & OWASP category |
| Test Coverage Check | enable-test-coverage-check |
ENABLE_TEST_COVERAGE_CHECK |
true β warns when new exports lack unit tests + suggests stubs |
| Skip on CI Failure | skip-on-ci-failure |
SKIP_ON_CI_FAILURE, REVIEWGROUND_SKIP_ON_CI_FAILURE |
false β pauses AI review if build or test fails to save tokens (requires build-result/test-result) |
| Build Result | build-result |
BUILD_RESULT |
β (e.g. ${{ needs.build.result }}) β evaluated by skip-on-ci-failure & CI summary |
| Test Result | test-result |
TEST_RESULT |
β (e.g. ${{ needs.test.result }}) β evaluated by skip-on-ci-failure & CI summary |
| Gitleaks Result | gitleaks-result |
GITLEAKS_RESULT |
β (e.g. ${{ needs.gitleaks.result }}) β rendered in CI summary table |
| Audit Result | audit-result |
AUDIT_RESULT |
β (e.g. ${{ needs.security-audit.result }}) β rendered in CI summary table |
| Base Branch | base-branch |
REVIEWGROUND_BASE_BRANCH, BASE_BRANCH |
main |
| LLM Temperature | temperature |
REVIEWGROUND_TEMPERATURE, LLM_TEMPERATURE |
0.2 |
| Max Tokens | max-tokens |
REVIEWGROUND_MAX_TOKENS, LLM_MAX_TOKENS |
8192 |
| Max Diff Tokens | max-diff-tokens |
REVIEWGROUND_MAX_DIFF_TOKENS, DIFF_MAX_TOKENS |
100000 (100k tokens β 400k chars) |
| Max Diff Chars | max-diff-chars |
REVIEWGROUND_MAX_DIFF_CHARS, DIFF_MAX_CHARS |
400000 (overrides max-diff-tokens) |
| Review Level | review-level |
REVIEWGROUND_REVIEW_LEVEL, REVIEW_LEVEL |
standard (critical | standard | comprehensive) |
| Ignore Patterns | ignore-patterns |
REVIEWGROUND_IGNORE_PATTERNS, IGNORE_PATTERNS |
β (comma-separated globs e.g. dist/**,*.min.js) |
| Review Language | review-language |
REVIEWGROUND_REVIEW_LANGUAGE, REVIEW_LANGUAGE |
en (e.g. ja, es, de, zh, pt, fr) |
| Generate PR Description | generate-pr-description |
GENERATE_PR_DESCRIPTION, REVIEWGROUND_GENERATE_PR_DESCRIPTION |
false β auto-generates PR summary, walkthrough table & checklist |
| PR Description Update | enable-pr-description-update |
ENABLE_PR_DESCRIPTION_UPDATE |
false β auto-appends π’/π‘/π΄ risk badge to PR body |
| GitHub Check Run | enable-check-run |
ENABLE_CHECK_RUN |
false β creates pass/fail Check Run (requires checks: write) |
| Extra CI Stages | extra-stages |
REVIEWGROUND_EXTRA_STAGES, EXTRA_STAGES |
β JSON array e.g. [{"name":"Deploy","result":"success"}] |
| Comment Tag | comment-tag |
REVIEWGROUND_COMMENT_TAG, COMMENT_TAG |
<!-- reviewground-code-review --> |
| Sticky Comment | sticky-comment |
REVIEWGROUND_STICKY_COMMENT, STICKY_COMMENT |
true β in-place comment update (false for new comment per commit) |
| Commit SHA | commit-sha |
COMMIT_SHA, GITHUB_SHA |
β auto-detected from GITHUB_SHA (associates CI & review status) |
| Output | Description |
|---|---|
reviewed |
"true" if an AI review was successfully generated |
reviewer-engine |
The provider and model that generated the review (e.g. Google Gemini (gemini-3.5-flash-lite)) |
described |
"true" if an automated PR description and walkthrough was generated |
summarized |
"true" if the CI pipeline summary was rendered |
summary-markdown |
The rendered markdown table of the CI summary and stage durations |
Add a separate workflow step to handle @reviewground commands and /review slash commands posted by developers in PR comments:
# .github/workflows/reviewground-slash.yml
name: ReviewGround Slash Commands
on:
issue_comment:
types: [created]
permissions:
contents: read
pull-requests: write
issues: write
jobs:
slash-command:
runs-on: ubuntu-latest
if: |
github.event.issue.pull_request != null &&
github.actor != 'dependabot[bot]' &&
(startsWith(github.event.comment.body, '@reviewground') ||
startsWith(github.event.comment.body, '/review') ||
startsWith(github.event.comment.body, '@review'))
steps:
- uses: arungupta1526/ReviewGround@v1
with:
mode: "slash-command"
github-token: ${{ secrets.GITHUB_TOKEN }}
gemini-api-key: ${{ secrets.GEMINI_API_KEY }} # or any other providerSupported commands (post in any PR comment):
| Command | Description |
|---|---|
@reviewground explain |
AI explains why flagged issues were raised, with context |
@reviewground fix |
AI suggests a concrete code patch for detected issues |
@reviewground <question> |
Ask any conversational question directly (e.g. @reviewground can we use Redis here?) |
/review ask <question> |
Interactive conversational assistant for PR comment threads |
/review full |
Triggers a full comprehensive re-review (all levels) |
/review security |
Security-focused re-review (OWASP only) |
/review performance |
Performance-focused re-review |
/review or /review standard |
Standard re-review |
Stop wasting time writing manual PR descriptions. ReviewGround inspects your diff and automatically generates a clean Summary of Changes, Key Changes bullets, an interactive Walkthrough Table, and a Testing Checklist directly in your PR body:
# Standalone mode: generate description on PR open or synchronize
- uses: arungupta1526/ReviewGround@v1
with:
mode: "describe"
github-token: ${{ secrets.GITHUB_TOKEN }}
gemini-api-key: ${{ secrets.GEMINI_API_KEY }}Or enable it alongside your code review:
- uses: arungupta1526/ReviewGround@v1
with:
generate-pr-description: "true"
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}What it generates in the PR body:
### π Summary of Changes
Added JWT token rotation and secure session invalidation to resolve security audit findings.
### π Key Changes
- Integrated crypto.randomUUID() for cryptographically secure session IDs.
- Added expiry validation and automatic refresh token rotation handler.
### π Changes Walkthrough
| File | Summary of Changes |
| -------------------- | -------------------------------------------------- |
| `src/auth/jwt.ts` | Implemented token rotation logic and expiry checks |
| `src/api/routes.ts` | Added `/auth/refresh` endpoint with rate limiting |
| `src/db/sessions.ts` | Added session cleanup query on logout |
### π§ͺ Testing Checklist
- [ ] Unit tests added / updated
- [ ] Manual verification completed
- [ ] No regressions in core workflows
### π‘οΈ Risk Assessment
- π’ **Risk Level: LOW** β Non-breaking security enhancement with 100% test coverage.Author Preservation: If the PR author already wrote notes or referenced issue numbers (e.g.
Fixes #42), ReviewGround preserves the author's original text and cleanly appends the AI Walkthrough below!
ReviewGround now auto-detects and verifies packages across all major ecosystems:
| Ecosystem | File Detected | Registry API |
|---|---|---|
| JavaScript/Node | package.json |
registry.npmjs.org |
| Python | requirements.txt, pyproject.toml |
pypi.org/pypi/{pkg}/json |
| Rust | Cargo.toml |
crates.io/api/v1/crates/{pkg} |
| Go | go.mod |
proxy.golang.org |
Enable/disable: enable-multi-registry-verify: 'true' (default on).
Every sticky review comment includes an exact transparency stat bar tracking both single-run cost and cumulative PR lifecycle spend across subsequent CI runs:
> β‘ ReviewGround | Model: `gemini-3.5-flash-lite` | Est. Tokens: 8,258 | Est. Cost: ~$0.0008 (This Run) | Latency: 3.4s
> π° Cumulative PR Spend: ~$0.0014 (2 CI Runs, 15,678 tokens total)
>
> <details>
> <summary>π Cost History per CI Run (2 runs)</summary>
>
> | Run | Commit | Model | Tokens | Cost |
> | :----- | :-------- | :---------------------- | :----- | :------- |
> | Run #1 | `5d8e9ac` | `gemini-3.5-flash-lite` | 7,420 | ~$0.0006 |
> | Run #2 | `2ba6928` | `gemini-3.5-flash-lite` | 8,258 | ~$0.0008 |
>
> Total Spend for PR: ~$0.0014 (~99.9% cheaper than proprietary bots)
>
> </details>
> Saved ~$20β50/mo vs proprietary AI review botsEnable/disable: enable-cost-footer: 'true' (default on).
For PRs >28,000 characters, ReviewGround prioritizes files based on security impact:
| Tier | Files | Behavior |
|---|---|---|
| P0 (Critical) | auth/, api/, db/, payments/, *.sql, middleware, config |
Always reviewed first |
| P1 (Standard) | Regular application code | Reviewed if budget allows |
| P2 (Skip first) | package-lock.json, *.snap, dist/, SVG/images, vendor |
Skipped first when budget tight |
Enable/disable: enable-smart-diff-priority: 'true' (default on).
When security issues are flagged, ReviewGround now instructs the AI to include standard vulnerability IDs:
- β CWE-89: SQL Injection (OWASP A03:2021 β Injection)
β οΈ CWE-79: Cross-Site Scripting (XSS) (OWASP A03:2021)- π CWE-798: Hardcoded Credentials (OWASP A07:2021)
- π CWE-918: SSRF (OWASP A10:2021)
Enable/disable: enable-owasp-tagging: 'true' (default on).
ReviewGround detects new exported functions, classes, and HTTP endpoints added in a PR without corresponding test files being updated:
β οΈ 2 new exported functions detected without corresponding unit tests: `generateToken`, `validateSession`
<details>
<summary>π§ͺ Click to view suggested unit test stubs</summary>
```typescript
// src/auth/jwt.ts β generateToken
it('generateToken β should work correctly', () => {
const result = generateToken();
expect(result).toBeDefined();
});
Supported languages: TypeScript, JavaScript, Python, Go.
Enable/disable: enable-test-coverage-check: 'true' (default on).
ReviewGround automatically detects and ingests your repository's existing team standards with zero configuration:
| Source File | Description | Priority |
|---|---|---|
.reviewground.yml / .reviewground.yaml / .github/reviewground.yml |
Dedicated ReviewGround rules file | 1 |
AGENTS.md |
AI Agent & Developer Operating Standards | 2 |
CLAUDE.md |
Claude Code instructions & conventions | 3 |
.cursorrules / .cursor/rules |
Cursor IDE repository guidelines | 4 |
.github/copilot-instructions.md |
GitHub Copilot team instructions | 5 |
CONTRIBUTING.md |
Open-source contributing standards | 6 |
# Example: .reviewground.yml
rules:
- "Prefer early returns and guard clauses over deep nesting."
- "Every exported function in src/ must include JSDoc comments."
- "Always use crypto.randomUUID() instead of third-party uuid packages."
- "All database queries must use parameterized statements."Before code diffs leave your GitHub Actions runner to reach external AI providers, ReviewGround runs a deterministic pre-flight sanitization pass to redact sensitive credentials:
- AWS Access Keys (
AKIA...) β[REDACTED_SECRET:AWS_KEY] - GitHub Tokens (
ghp_...,github_pat_...) β[REDACTED_SECRET:GITHUB_TOKEN] - Stripe Secret & Restricted Keys (
sk_live_...,rk_live_...) β[REDACTED_SECRET:STRIPE_KEY] - Google Cloud & Gemini Keys (
AIzaSy...) β[REDACTED_SECRET:GOOGLE_API_KEY] - Slack User & Bot Tokens (
xoxb-...,xoxp-...) β[REDACTED_SECRET:SLACK_TOKEN] - OpenAI & Anthropic Keys (
sk-proj-...,sk-ant-...) β[REDACTED_SECRET:OPENAI_KEY]/[REDACTED_SECRET:ANTHROPIC_KEY] - SendGrid, Twilio, HuggingFace & Postman (
SG...,SK...,hf_...,PMAK-...) β[REDACTED_SECRET:...] - Discord Bot & Webhook Tokens (
Bot ...) β[REDACTED_SECRET:DISCORD_TOKEN] - Private RSA/EC/DSA/OpenSSH Keys (
-----BEGIN ... PRIVATE KEY-----) β[REDACTED_SECRET:PRIVATE_KEY] - Bearer JWT Tokens (
Bearer eyJ...) βBearer [REDACTED_SECRET:JWT_TOKEN]
To eliminate "proofreader fatigue" and comment noise, ReviewGround strictly enforces:
- Zero Linter Nitpicks: The AI is strictly instructed to ignore formatting, whitespace, quotes, semicolons, and purely subjective variable names that linters already catch.
- Standardized Severity Badges:
- π¨
[BLOCKER]: High/critical security flaws, data corruption, fatal crashes, breaking regressions. β οΈ [WARNING]: Performance bottlenecks, edge-case bugs, unhandled async rejections, resource leaks.- π‘
[SUGGESTION]: Architectural improvements and missing test stubs (comprehensive mode only).
- π¨
Turn ReviewGround into a mandatory status check in your branch protection rules. When enabled, it creates a native GitHub Check Run that fails if critical security vulnerabilities, injection flaws, or secret leaks are detected:
permissions:
contents: read
pull-requests: write
actions: read
checks: write # Required for Check Run gate
steps:
- uses: arungupta1526/ReviewGround@v1
with:
enable-check-run: "true"
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}Automatically append a risk level badge (π’ Low / π‘ Moderate / π΄ High Risk) and executive summary below the pull request author's initial description:
steps:
- uses: arungupta1526/ReviewGround@v1
with:
enable-pr-description-update: "true"
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}Receive AI code reviews in your team's preferred language (e.g. Japanese, Spanish, German, French, Chinese, Portuguese):
steps:
- uses: arungupta1526/ReviewGround@v1
with:
review-language: "ja" # 'ja', 'es', 'de', 'zh', 'pt', 'fr', etc.
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}Append custom stages (such as deployments, visual regression, or integration suites) to the post-CI summary table:
steps:
- uses: arungupta1526/ReviewGround@v1
with:
mode: "summary"
extra-stages: '[{"name":"E2E Cypress","result":"success"},{"name":"Staging Deploy","result":"success"}]'In mode: all (default mode), ReviewGround automatically cross-checks if any CI stage inputs (gitleaks-result, audit-result, build-result, test-result, extra-stages) or matching workflow jobs were detected:
- If none exist, the Post-CI verification table is smartly skipped so your PR comments remain clean and focused solely on code review without noisy
unknownstatus rows. - When CI stages are supplied, ReviewGround appends the complete verification table and duration metrics in the same sticky PR comment.
Never guess why an AI review didn't trigger:
- No Keys Configured: When a pull request runs without any AI API key in repository secrets, ReviewGround posts an interactive setup banner on the PR with direct links to free keys (Google AI Studio, Groq Console, OpenRouter).
- Graceful Bot PR Skipping: Automated bots (e.g.
dependabot[bot]) are detected and skipped silently without failing CI runs or posting noise. - Provider Failure Diagnostics: If all configured AI providers fail due to quota exhaustion or upstream rate limits, ReviewGround posts a diagnostic notice with direct links to the GitHub Actions run logs.
| Feature | ReviewGround | CodeRabbit | Qodo (CodiumAI) | PR-Agent | GitHub Copilot |
|---|---|---|---|---|---|
| Pricing Model | 100% Free (BYOK) | $24β$30/dev/mo | Usage-based credits | Free (OSS) / BYOK | Bundled ($19β$39/dev/mo) |
| Provider Freedom | β 7 Providers + Custom | β Proprietary Cloud | β Proprietary Cloud | β BYOK (LiteLLM) | β OpenAI Only |
| Local / Private LLMs | β Ollama, vLLM, Together | β No | β No | β Supported | β No |
| 1-Click Diff Suggestions | β Native GitHub | β Yes | β Yes | β Yes | β Yes |
| Interactive Commands & Chat | β
@explain/@fix/@chat//review |
β Yes | β Yes | β No | |
| Pre-Flight Secret Redaction | β Local Runner Regex (AWS, Stripe, JWT...) | β Cloud SaaS Exposure | β Cloud SaaS Exposure | β Raw Diff Sent | |
| Universal Rule Auto-Ingestion | β AGENTS.md, CLAUDE.md, .cursorrules | β .coderabbit.yaml only |
β .qodo.toml only |
β .pr_agent.toml only |
|
| CI Failure Gating (Anti-Noise) | β
skip-on-ci-failure Pause |
β Reviews Broken Code | β Reviews Broken Code | β Reviews Broken Code | β Reviews Broken Code |
| Multi-Ecosystem Grounding | β NPM + PyPI + Crates + Go | β No | β No | β No | β No |
| Google Search Grounding | β Gemini Live Grounding | β No | β No | β No | β No |
| OWASP / CWE Taxonomy | β Auto-tagged findings | ||||
| Smart Diff Priority (P0/P1/P2) | β Auth/API/DB always first | β No | β No | β No | β No |
| Missing Test Detection | β Stubs for TS/JS/Py/Go | β Yes | β Yes | β No | |
| Cost Transparency Footer | β Tokens + USD + Latency | β Hidden | β Hidden | β Hidden | β Hidden |
| CI Duration Metrics | β Unique (GitHub Jobs API) | β No | β No | β No | β No |
| Sticky Summary (No Spam) | β
In-place PATCH |
β Yes | β Yes | β Yes | |
| Repository Rules File | β
Dedicated .reviewground.yml |
β
.coderabbit.yaml |
β
.qodo.toml |
β
.pr_agent.toml |
β No |
| GitHub Check Run Gate | β Native (Pass/Fail) | β Yes | β Yes | β Yes | β Yes |
| PR Description Risk Badge | β π’/π‘/π΄ + Walkthrough | β Yes | β Yes | β Yes | |
| Multi-Language Output | β
BCP-47 (ja, es, zh...) |
β Supported | |||
| Open Source License | β AGPL-3.0 | β Proprietary | β Proprietary | β Apache-2.0 | β Proprietary |
| Runtime Architecture | β Zero-dependency (<2MB) | β Hosted SaaS Proxy | β Hosted SaaS Proxy | β Hosted SaaS |
Note
Comparison accurate as of October 2026 based on publicly available documentation, pricing pages, and repository manifests. Product names and trademarks are property of their respective owners.
ReviewGround is licensed under the GNU Affero General Public License v3.0 (AGPLv3).
- β Free to use for open-source projects, personal repositories, and internal enterprise organizations.
- π‘οΈ Protects against closed-source cloud SaaS clones: Any company offering ReviewGround as a hosted commercial SaaS service must contribute their modifications back under AGPLv3.