actions-marketplace-validations/Multi-Provider Code Review
Hybrid AST + LLM code review with multiple providers
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Apr 8, 2026
- License
- MIT
Pinned Snippet
uses: actions-marketplace-validations/keithah_multi-provider-code-review@607bbafc14d8ba8d5b79a63934a87fb0f8146ec6 # no releases — HEAD as of 2026-07-13tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| GITHUB_TOKEN | GitHub token | yes | — |
| PR_NUMBER | Pull request number | yes | — |
| REVIEW_PROVIDERS | Comma-separated provider list (e.g., "openrouter/model1,opencode/model2"). BEHAVIOR CHANGE (v0.2.0+): - Previously: Defaulted to specific hardcoded providers - Now: Defaults to empty string (enables dynamic discovery) DEFAULT (empty): Enables dynamic provider discovery - automatically selects best free models from OpenRouter API (if OPENROUTER_API_KEY set), OpenCode CLI, and hardcoded fallbacks. Well-tested and recommended for most users. CUSTOM: Override discovery with specific providers. Disables automatic fallback chain. Use when you need specific models or want predictable provider selection. | no | "" |
| FALLBACK_PROVIDERS | Comma-separated fallback providers used when primary providers fail. DEFAULT (empty): Uses automatic fallback discovery (same mechanism as REVIEW_PROVIDERS). CUSTOM: Override with specific fallback models. Only used when REVIEW_PROVIDERS is also set (custom mode). | no | "" |
| SYNTHESIS_MODEL | Model used for synthesis/prompts | no | openrouter/free |
| INLINE_MAX_COMMENTS | Maximum inline comments | no | 5 |
| INLINE_MIN_SEVERITY | Minimum severity for inline comments | no | major |
| INLINE_MIN_AGREEMENT | Providers required to agree | no | 2 |
| MIN_CHANGED_LINES | Skip if below this line count | no | 0 |
| MAX_CHANGED_FILES | Skip if over this file count | no | 0 |
| SKIP_LABELS | Comma-separated labels to skip | no | "" |
| PROVIDER_LIMIT | Limit number of providers to rotate | no | 6 |
| PROVIDER_RETRIES | Retries per provider | no | 2 |
| PROVIDER_MAX_PARALLEL | Maximum providers to run in parallel | no | 3 |
| DIFF_MAX_BYTES | Maximum diff bytes to send to providers | no | 120000 |
| RUN_TIMEOUT_SECONDS | Timeout per provider run | no | 600 |
| BUDGET_MAX_USD | Budget guard in USD | no | 0 |
| ENABLE_AST_ANALYSIS | Enable AST analysis | no | true |
| ENABLE_SECURITY | Enable security scan | no | true |
| ENABLE_CACHING | Enable caching of findings | no | true |
| ENABLE_TEST_HINTS | Enable test coverage hints | no | true |
| ENABLE_AI_DETECTION | Enable AI-generated code detection | no | true |
| INCREMENTAL_ENABLED | Enable incremental review (only review changed files on PR updates) | no | true |
| INCREMENTAL_CACHE_TTL_DAYS | Days to keep incremental review cache | no | 7 |
| LEARNING_ENABLED | Enable feedback learning system | no | true |
| LEARNING_MIN_FEEDBACK_COUNT | Minimum feedback count before adjusting confidence | no | 5 |
| QUIET_USE_LEARNING | Use learned confidence thresholds in quiet mode | no | true |
| QUIET_MIN_CONFIDENCE | Minimum confidence threshold for quiet mode filtering (0.0-1.0) | no | 0.5 |
| GRAPH_ENABLED | Enable code graph for dependency tracking | no | true |
| GRAPH_CACHE_ENABLED | Cache code graph between runs | no | true |
| GRAPH_MAX_DEPTH | Maximum depth for dependency traversal | no | 5 |
| GRAPH_TIMEOUT_SECONDS | Timeout for graph building in seconds | no | 10 |
| REPORT_BASENAME | Base name for JSON/SARIF reports | no | multi-provider-review |
| SKIP_TRIVIAL_CHANGES | Skip reviews for trivial changes (dependency locks, docs, config files, test fixtures) | no | true |
| SKIP_DEPENDENCY_UPDATES | Skip dependency lock file updates (package-lock.json, yarn.lock, etc.) | no | true |
| SKIP_DOCUMENTATION_ONLY | Skip documentation-only changes (*.md, docs/, README, CHANGELOG) | no | true |
| SKIP_FORMATTING_ONLY | Skip formatting-only changes (whitespace, indentation) | no | false |
| SKIP_TEST_FIXTURES | Skip test fixture changes (__fixtures__, __snapshots__, *.snap) | no | true |
| SKIP_CONFIG_FILES | Skip config file changes (.eslintrc, .prettierrc, .gitignore, .gitattributes, tsconfig.json) | no | true |
| SKIP_BUILD_ARTIFACTS | Skip build artifact changes (dist/, build/, *.min.js, *.map) | no | true |
| TRIVIAL_PATTERNS | Custom regex patterns for trivial files (comma-separated) | no | "" |
| PATH_BASED_INTENSITY | Enable path-based review intensity (opt-in feature) | no | false |
| PATH_INTENSITY_PATTERNS | JSON array of path patterns with intensities (e.g., [{"pattern":"src/auth/**","intensity":"thorough"}]) | no | "" |
| PATH_DEFAULT_INTENSITY | Default review intensity for files that don't match patterns (thorough, standard, light) | no | standard |
| DRY_RUN | Preview mode - run review without posting to GitHub | no | false |
| OPENROUTER_API_KEY | API key for OpenRouter | no | — |
Outputs
| name | description |
|---|---|
| findings_count | Number of findings |
| critical_count | Critical findings count |
| cost_usd | Total cost in USD |
| total_cost | Total cost in USD (alias for cost_usd) |
| ai_likelihood | Average AI-generated likelihood |