Automated AI-powered code review for GitHub Pull Requests
GPT-5 β’ Claude Opus 4 β’ Gemini 2.5 Pro β’ O3 β’ Custom AI Models
π Quick Start β’ β¨ Features β’ π Documentation β’ π‘ Examples β’ π€ Contributing
AI Code Review is a next-generation GitHub Action that automates pull request reviews using advanced artificial intelligence and deep static code analysis. Get Principal/Staff engineer-level feedback on every PR with AST parsing, linter integration, dependency tracking, and beautiful visual statistics.
β
Save 2-4 hours per day on code reviews
β
Catch bugs before production with deep analysis
β
Consistent quality standards across your team
β
Support for 10+ programming languages
β
Works with GPT-5, Claude 4, Gemini, O3, and custom AI models
β
AST parsing + Linter integration + Dependency analysis
- AI analyzes code like a Principal engineer with 15+ years of experience
- Deep understanding of architecture, performance, and security
- Provides detailed "why" explanations, not just "what"
- Recognizes good code and best practices
- AST Parsing: Extract functions, classes, and dependencies from any language
- Linter Integration: Auto-runs ESLint, Pylint, Rust Clippy, C# Analyzers
- Dependency Tracking: Maps function calls and dependencies across codebase
- Complexity Metrics: Cyclomatic complexity and maintainability index
- Call Graph Analysis: Understand function relationships and breaking changes
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Files Reviewed β 15 β
β Quality Score β ββββββββββββββββββββ 85/100 β
β Issues Found β Critical: 0 | Warnings: 2 | Info: 1 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- ASCII charts and sparklines
- Quality scores and visual statistics
- Trend analysis over time
- OpenAI: GPT-5, GPT-5-High, O3, O3-Mini
- Anthropic: Claude Opus 4, Claude Sonnet 4
- Google: Gemini 2.5 Pro, Gemini 2.5 Flash
- Custom Endpoints: Azure OpenAI, AWS Bedrock, local models, or any OpenAI-compatible API
AI actively investigates your code using specialized tools:
read_file,get_file_diff,analyze_file_ast- Deep file analysisanalyze_function_impact- π― Breaking change detector! Shows full context around ALL function call sitesfind_function_callers,find_function_dependencies- Code navigationanalyze_function_complexity- Complexity metricsrun_linter- Execute language-specific lintersget_commits_list,get_commit_diff,get_file_history- Git context- ...and more!
- Review Language: Comments in any language (English, Russian, Spanish, French, German, Chinese, etc.)
- Code Languages: TypeScript, JavaScript, Python, Rust, C#, Go, Java, PHP, Ruby, and more
- Intelligent Chunking: Splits large PRs optimally by module boundaries
- Handles massive PRs without hitting token limits
- Silent Mode: Reduce notification spam for your team
- Auto Labeling: Manages PR labels based on review results
Create .github/workflows/ai-code-review.yml:
name: AI Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
ai-review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Important for commit history analysis
- name: Run AI Code Review
uses: zxcloli666/AI-Code-Review@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}- Get your API key from OpenAI Platform
- Go to your repository Settings β Secrets and variables β Actions
- Click New repository secret
- Name:
OPENAI_API_KEY, Value:your-api-key-here
That's it! π AI Code Review will automatically analyze every new PR.
| Input | Description | Default |
|---|---|---|
GITHUB_TOKEN |
GitHub token (auto-provided by Actions) | - |
OPENAI_API_KEY |
OpenAI API key or compatible provider | - |
| Input | Description | Default |
|---|---|---|
OPENAI_API_MODEL |
AI model (gpt-5, claude-opus-4, o3, etc.) |
gpt-5 |
OPENAI_API_BASE_URL |
Custom endpoint (Azure, Bedrock, local) | https://api.openai.com/v1 |
REVIEW_LANGUAGE |
Review language (en, ru, es, fr, de, zh, etc.) |
en |
SILENT_MODE |
Minimize email notifications (true/false) |
false |
MAX_CHUNK_SIZE |
Max tokens per chunk (adjust for your model) | 6000 |
ENABLE_LINTERS |
Run language-specific linters | true |
ENABLE_AST |
AST analysis for deep code understanding | true |
ENABLE_DEPENDENCY_ANALYSIS |
Dependency tracking and call graphs | true |
SEVERITY_THRESHOLD |
Min severity to report (info, warning, error) |
warning |
π Click to see example review output
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β π€ ππ ππ’ππ π₯ππ©πππͺ - ππ‘πππ¬π¦ππ¦ ππ’π π£πππ§π π€ β
β β
β β‘ Powered by Advanced AI & Deep Code Analysis β‘ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
## π Executive Summary
This PR implements a new caching layer to reduce database load and improve
response times. The implementation is solid with good error handling and test
coverage. Found 2 performance optimizations and 1 documentation suggestion.
**Verdict**: β
APPROVED with minor suggestions
## π Review Overview
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Files Reviewed β 15 β
β Total Lines Changed β 450 (+320/-130) β
β Commits Analyzed β 8 β
β Tools Used β 12 β
β Review Time β 45s β
β Quality Score β ββββββββββββββββββββ 85/100 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
## π― Issues Summary
Critical ββββββββββββββββββββββββββββββββββββββββ 0
Warnings ββββββββββββββββββββββββββββββββββββββββ 2
Info βββββββββββββββββββββββββββββββββββββββ 1
## π Highlights
β
Well-structured code with clear separation of concerns
β
Comprehensive error handling in API endpoints
β
Good use of TypeScript types for type safety
## β οΈ Issues Found
### src/api/handler.ts:45
**Severity:** Warning | **Category:** Performance
The database query inside the loop creates N+1 queries. Consider using
a single query with JOIN or batch loading.
**Current:**
\`\`\`typescript
for (const user of users) {
const posts = await db.query('SELECT * FROM posts WHERE user_id = ?', [user.id]);
}
\`\`\`
**Suggested:**
\`\`\`typescript
const posts = await db.query(`
SELECT p.*, u.id as user_id
FROM posts p
JOIN users u ON p.user_id = u.id
WHERE u.id IN (?)
`, [users.map(u => u.id)]);
\`\`\`
Add the ability to trigger reviews on-demand:
on:
pull_request:
types: [opened, synchronize, reopened]
issue_comment:
types: [created]
jobs:
ai-review:
if: |
(github.event_name == 'pull_request') ||
(github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
contains(github.event.comment.body, '/review'))
# ... rest of the workflowNow comment /review on any PR to trigger a review!
- uses: zxcloli666/AI-Code-Review@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
OPENAI_API_BASE_URL: 'https://api.anthropic.com/v1'
OPENAI_API_MODEL: 'claude-opus-4'- uses: zxcloli666/AI-Code-Review@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
OPENAI_API_BASE_URL: 'https://generativelanguage.googleapis.com/v1'
OPENAI_API_MODEL: 'gemini-2.5-pro'
MAX_CHUNK_SIZE: '12000' # Gemini supports larger context- uses: zxcloli666/AI-Code-Review@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENAI_API_MODEL: 'o3-mini'
MAX_CHUNK_SIZE: '10000'- uses: zxcloli666/AI-Code-Review@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
REVIEW_LANGUAGE: 'ru' # Reviews in Russian- uses: zxcloli666/AI-Code-Review@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
SILENT_MODE: 'true' # Minimize email spam- Retrieves PR details, branch info, and linked issues
- Analyzes file types and programming languages
- Builds commit history timeline
- Splits large PRs intelligently by module boundaries
- Groups related files together
- Optimizes token usage for your chosen AI model
AI actively investigates code using 14 specialized tools:
File Analysis:
read_file- Read complete file contentget_file_diff- View specific changes with contextanalyze_file_ast- Deep AST (Abstract Syntax Tree) parsing
Code Understanding:
analyze_function_impact- π― Breaking Change Detector! Shows full context around ALL function call sitesfind_function_callers- List all places where a function is calledfind_function_dependencies- Find what a function depends onanalyze_function_complexity- Cyclomatic complexity metrics
Quality Tools:
run_linter- Execute language-specific linters (ESLint, Pylint, Clippy, etc.)
Git & History:
get_commits_list,get_commit_diff,get_file_history- Analyze code evolution
- Uses mandatory workflow requiring 4-6 tools minimum per review
- Analyzes from multiple dimensions: Security, Performance, Architecture, Maintainability
- Provides senior-level feedback with detailed explanations
- Categorizes issues by severity (critical, warning, info)
- Sends full review to AI for concise summary
- Creates brief but comprehensive executive summary (under 300 words)
- Includes: main changes, critical findings, key recommendations, verdict
- Posts comprehensive review comment
- Adds inline comments on specific lines
- Manages labels automatically
- Supports silent mode to reduce notification spam
When refactoring a function used across multiple files, AI uses analyze_function_impact to show full context around ALL call sites.
Example: Changing calculatePrice(quantity, price) to calculatePrice(options)
// Before:
function calculatePrice(quantity: number, price: number): number {
return quantity * price;
}
// After:
function calculatePrice(options: { quantity: number; price: number; discount?: number }): number {
const { quantity, price, discount = 0 } = options;
return quantity * price * (1 - discount);
}What AI sees:
## Function Impact Analysis: calculatePrice
**Definition**: `src/utils/pricing.ts:42`
**Parameters**: quantity, price
**Exported**: Yes
### Call Sites
Found **8** call site(s) across **3** file(s)
---
#### `src/components/Cart.tsx` (3 calls)
**Call at line 67**:
β 67 | const total = calculatePrice(item.quantity, item.price);
68 | setCartTotal(total);
**Call at line 89**:
88 | items.forEach(item => {
β 89 | subtotal += calculatePrice(item.qty, item.unitPrice);
90 | });
---
Total Impact: 8 call site(s) would be affected
Recommendations:
β οΈ Medium impact: 8 call sites - thorough testing recommended
- All callers pass 2 parameters - breaking change confirmed
- Consider backward compatibility or deprecation period
The AI can now intelligently warn that all 8 call sites need updating! π―
English, Russian, Spanish, French, German, Chinese, Japanese, Korean, Portuguese, Italian, Dutch, Polish, Turkish, Arabic, Hindi, and more...
- JavaScript/TypeScript - ESLint, AST parsing
- Python - Pylint, AST parsing
- Rust - Clippy, AST parsing
- C# - dotnet format analyzers
- Go - golangci-lint (custom integration)
- Java, PHP, Ruby, C++ - Basic analysis
- And more...
- Node.js 20+
- pnpm 9+
git clone https://github.com/zxcloli666/AI-Code-Review.git
cd AI-Code-Review
pnpm install
pnpm buildsrc/
βββ index.ts # Entry point
βββ types/ # TypeScript types
βββ ai/ # AI client & prompts
β βββ client.ts # OpenAI/compatible client
β βββ prompts.ts # System & user prompts
β βββ tools-registry.ts # 14 AI tools registry
βββ analysis/ # Code analysis engines
β βββ ast-parser.ts # AST parsing (Babel, TS, Acorn)
β βββ linter-runner.ts # Multi-language linter runner
β βββ call-graph.ts # Dependency & call graph analysis
βββ chunking/ # Smart chunking strategies
βββ github/ # GitHub API integration
βββ stats/ # Visualization & statistics
βββ utils/ # Utilities
pnpm run build
pnpm run type-checkCreate a test repository, set up the workflow, and verify the output.
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'feat: add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
MIT License - see LICENSE for details.
- OpenAI - GPT-5, O3 models
- Anthropic - Claude Opus 4
- Google - Gemini 2.5 Pro
- GitHub Actions
- @babel/parser - JavaScript/TypeScript AST
- @typescript-eslint/parser - TypeScript analysis
- Rust Clippy - Rust linting
- .NET Roslyn Analyzers - C# analysis
If you find AI Code Review useful, please:
- β Star this repository
- π Report bugs or request features
- π Share with your team
- π¬ Join discussions