agent-skills-code-review-router
💡 摘要
该技能根据变更特征智能地将代码审查路由到最佳CLI。
🎯 适合人群
🤖 AI 吐槽: “看起来很能打,但别让配置把人劝退。”
风险:Medium。建议检查:是否执行 shell/命令行指令;是否发起外网请求(SSRF/数据外发);API Key/Token 的获取、存储与泄露风险;文件读写范围与路径穿越风险。以最小权限运行,并在生产环境启用前审计代码与依赖。
name: code-review-router description: Intelligently routes code reviews between Gemini CLI and Codex CLI based on tech stack, complexity, and change characteristics. Use when you want an automated code review of your current changes.
Code Review Router
Routes code reviews to the optimal CLI (Gemini or Codex) based on change characteristics.
When NOT to Use This Skill
- For non-code reviews (documentation proofreading, prose editing)
- When reviewing external/third-party code you don't control
- For commit message generation (use a dedicated commit skill)
- When you need a specific reviewer (use that CLI directly)
Step 0: Environment Check
Verify we're in a git repository:
git rev-parse --git-dir 2>/dev/null || echo "NOT_A_GIT_REPO"
If not a git repo: Stop and inform the user: "This directory is not a git repository. Initialize with git init or navigate to a repo."
Step 1: Prerequisites Check
Verify both CLIs are available:
# Check for Gemini CLI which gemini || echo "GEMINI_NOT_FOUND" # Check for Codex CLI which codex || echo "CODEX_NOT_FOUND"
If neither CLI is found: Stop and inform the user they need to install at least one:
- Gemini: Check Google's Gemini CLI installation docs
- Codex: Check OpenAI's Codex CLI installation docs
If only one CLI is available: Use that CLI (no routing needed).
If both are available: Proceed with routing analysis.
Step 2: Analyze Git Diff
Run these commands to gather diff statistics:
# Get diff stats (staged + unstaged) git --no-pager diff --stat HEAD 2>/dev/null || git --no-pager diff --stat # Get full diff for pattern analysis git --no-pager diff HEAD 2>/dev/null || git --no-pager diff # Count changed files git --no-pager diff --name-only HEAD 2>/dev/null | wc -l # Count total changed lines git --no-pager diff --numstat HEAD 2>/dev/null | awk '{added+=$1; removed+=$2} END {print added+removed}'
If no changes detected: Report "Nothing to review - no uncommitted changes found." and stop.
Step 3: Calculate Complexity Score
Initialize complexity_score = 0, then add points:
| Condition | Points | Detection Method |
|-----------|--------|------------------|
| Files changed > 10 | +2 | git diff --name-only \| wc -l |
| Files changed > 20 | +3 | (additional, total +5) |
| Lines changed > 300 | +2 | git diff --numstat sum |
| Lines changed > 500 | +3 | (additional, total +5) |
| Multiple directories touched | +1 | Count unique dirs in changed files |
| Test files included | +1 | Files matching *test*, *spec* |
| Config files changed | +1 | Files: *.config.*, *.json, *.yaml, *.yml, *.toml |
| Database/schema changes | +2 | Files: *migration*, *schema*, *.sql, prisma/* |
| API route changes | +2 | Files in api/, routes/, containing endpoint, handler |
| Service layer changes | +2 | Files in services/, *service*, *provider* |
Step 4: Detect Language & Framework
Analyze file extensions and content patterns:
Primary Language Detection
.ts, .tsx → TypeScript
.js, .jsx → JavaScript
.py → Python
.go → Go
.rs → Rust
.java → Java
.rb → Ruby
.php → PHP
.cs → C#
.swift → Swift
.kt → Kotlin
Framework Detection (check imports/file patterns)
React/Next.js → "import React", "from 'react'", "next.config", pages/, app/
Vue → ".vue" files, "import Vue", "from 'vue'"
Angular → "angular.json", "@angular/core"
Django → "django", "models.py", "views.py", "urls.py"
FastAPI → "from fastapi", "FastAPI("
Express → "express()", "from 'express'"
NestJS → "@nestjs/", "*.module.ts", "*.controller.ts"
Rails → "Gemfile" with rails, app/controllers/
Spring → "springframework", "@RestController"
Security-Sensitive Patterns
Detect by file path OR code content:
File paths:
**/auth/**
**/security/**
**/*authentication*
**/*authorization*
**/middleware/auth*
Code patterns (in diff content):
password\s*=
api_key\s*=
secret\s*=
Bearer\s+
JWT
\.env
credentials
private_key
access_token
Config files:
.env*
*credentials*
*secrets*
*.pem
*.key
Step 5: Apply Routing Decision Tree
Routing Priority Order (evaluate top-to-bottom, first match wins):
Priority 1: Pattern-Based Rules (Hard Rules)
| Pattern | Route | Reason | |---------|-------|--------| | Security-sensitive files/code detected | Codex | Requires careful security analysis | | Files > 20 OR lines > 500 | Codex | Large changeset needs thorough review | | Database migrations or schema changes | Codex | Architectural risk | | API/service layer modifications | Codex | Backend architectural changes | | Changes span 3+ top-level directories | Codex | Multi-service impact | | Complex TypeScript (generics, type utilities) | Codex | Type system complexity | | Pure frontend only (jsx/tsx/vue/css/html) | Gemini | Simpler, visual-focused review | | Python ecosystem (py, Django, FastAPI) | Gemini | Strong Python support | | Documentation only (md/txt/rst) | Gemini | Simple text review |
Priority 2: Complexity Score (if no pattern matched)
| Score | Route | Reason | |-------|-------|--------| | ≥ 6 | Codex | High complexity warrants deeper analysis | | < 6 | Gemini | Moderate complexity, prefer speed |
Priority 3: Default
→ Gemini (faster feedback loop for unclear cases)
Step 6: Execute Review
Explain Routing Decision
Before executing, output:
## Code Review Routing
**Changes detected:**
- Files: [X] files changed
- Lines: [Y] lines modified
- Primary language: [language]
- Framework: [framework or "none detected"]
**Complexity score:** [N]/10
- [List contributing factors]
**Routing decision:** [Gemini/Codex]
- Reason: [primary reason for choice]
**Executing review...**
CLI Commands
Note: Gemini receives the diff via stdin (piped), while Codex has a dedicated
reviewsubcommand that reads the git context directly. If debugging, check thatgit diff HEADproduces output before running Gemini.
For Gemini:
# Pipe diff to Gemini with review prompt git --no-pager diff HEAD | gemini -p "Review this code diff for: 1) Code quality issues, 2) Best practices violations, 3) Potential bugs, 4) Security concerns, 5) Performance issues. Provide specific, actionable feedback."
For Codex:
# Use dedicated 'review' subcommand for non-interactive code review # Note: --uncommitted and [PROMPT] are mutually exclusive codex review --uncommitted
Step 7: Handle Failures with Fallback
If the chosen CLI fails (non-zero exit or error output):
-
Report the failure:
[Primary CLI] failed: [error message] Attempting fallback to [other CLI]... -
Try the alternative CLI
-
If fallback also fails:
Both review CLIs failed. - Gemini error: [error] - Codex error: [error] Please check CLI installations and try manually.
Step 8: Format Output
Present the review results clearly:
## Code Review Results
**Reviewed by:** [Gemini/Codex]
**Routing:** [brief reason]
---
[CLI output here]
---
**Review complete.** [X files, Y lines analyzed]
Quick Reference
| Change Type | Route | Reason | |-------------|-------|--------| | React component styling | Gemini | Pure frontend | | Django view update | Gemini | Python ecosystem | | Single bug fix < 50 lines | Gemini | Simple change | | New API endpoint + tests | Codex | Architectural | | Auth system changes | Codex | Security-sensitive | | Database migration | Codex | Schema change | | Multi-service refactor | Codex | High complexity | | TypeScript type overhaul | Codex | Complex types |
优点
- 自动化代码审查路由。
- 考虑复杂性和变更特征。
- 与现有CLI工具集成。
缺点
- 需要安装两个CLI。
- 可能无法处理所有边缘情况。
- 复杂性评分计算可能是主观的。
相关技能
免责声明:本内容来源于 GitHub 开源项目,仅供展示和评分分析使用。
版权归原作者所有 win4r.
