| name | dev-review |
| description | Review code against language-specific best practices |
| scope | core |
| argument-hint | <file-or-directory> [--lang <language>] |
| user-invocable | true |
Code Review Skill
Review code for best practices using language-specific expert agents.
When NOT to Use
| Scenario | Better Alternative |
|---|
| Formatting/style issues only | Run linter or formatter directly (prettier, gofmt, black) |
| Single syntax error | IDE/LSP diagnostics |
| Auto-generated code | Skip — generated code follows its own conventions |
| Pre-commit quick check | Git hooks with linter integration |
Pre-execution check: If the issue is purely formatting, run the appropriate formatter first.
Pre-flight Guards
Before executing the review workflow, the agent MUST run these checks:
Guard 1: Auto-generated Code Detection
Level: WARN
Check: Scan target files for auto-generation markers
grep -rl "DO NOT EDIT" {target} 2>/dev/null
grep -rl "auto-generated" {target} 2>/dev/null
grep -rl "@generated" {target} 2>/dev/null
Action: [Pre-flight] WARN: Auto-generated code detected in {file}. Generated code follows its own conventions — review may produce false positives. Continue? [Y/n]
Guard 2: Formatting-Only Changes Detection
Level: INFO
Check: If reviewing changed files (not full codebase), check if changes are formatting-only
git diff --stat {target} | grep -E '^\s+\d+ files? changed'
git diff -w {target}
Action: [Pre-flight] INFO: Changes in {file} appear to be formatting-only. Consider running the appropriate formatter instead (prettier, gofmt, black).
Guard 3: Single Syntax Error Detection
Level: INFO
Check: If target is a single file and the request mentions "error", "syntax", or "broken"
# Keyword detection in user request
keywords: error, syntax, broken, doesn't compile, won't build
# Single file check
target is exactly 1 file (not a directory)
Action: [Pre-flight] INFO: For single syntax errors, IDE/LSP diagnostics are faster. Proceeding with full review.
Guard 4: Linter/Formatter Available Detection
Level: INFO
Check: Detect if a project-appropriate linter exists
ls .eslintrc* .prettierrc* biome.json .golangci.yml pyproject.toml .rubocop.yml 2>/dev/null
Action: [Pre-flight] INFO: Linter config found ({config}). For style-only issues, run the linter directly.
Display Format
[Pre-flight] dev-review
├── Auto-generated code: PASS
├── Formatting-only changes: INFO — whitespace changes in src/util.ts
├── Single syntax error: PASS
└── Linter available: INFO — .eslintrc.json found
Result: PROCEED (0 GATE, 0 WARN, 2 INFO)
If any GATE: block and suggest alternative.
If any WARN: show warning, ask user to confirm.
If only PASS/INFO: proceed automatically.
Parameters
| Name | Type | Required | Description |
|---|
| path | string | yes | File or directory to review |
Options
--lang, -l Language (auto-detected if not specified)
Values: go, python, rust, kotlin, typescript, java
--focus, -f Focus area (style, performance, security, all)
--verbose, -v Detailed output
Workflow
0. Run pre-flight guards (see ## Pre-flight Guards)
1. Detect language (or use --lang)
2. Select appropriate expert agent
3. Load language-specific skill
4. Analyze code against best practices
5. Generate review report
- Artifact persistence (optional): Review agent saves findings to:
.claude/outputs/sessions/{YYYY-MM-DD}/dev-review-{HHmmss}.md
Tool: Writing artifacts under .claude/outputs/
Under mode: "bypassPermissions", direct Write/Edit/Bash on .claude/** paths is permitted (CC v2.1.121+, #1101) — no /tmp/*.sh wrapping is needed.
To write dev-review results under .claude/outputs/sessions/:
- Write the artifact body directly to
.claude/outputs/sessions/$(date +%Y-%m-%d)/dev-review-$(date +%H%M%S).md with the Write tool (every Agent tool call includes mode: "bypassPermissions", R010)
- Read-only Bash on
.claude/outputs/ (e.g., cat, head, wc) is allowed for verification
Reference: R006/R010 sensitive-path handling (CC v2.1.121+), #1101.
With metadata header:
```markdown
---
skill: dev-review
date: {ISO-8601 with timezone}
query: "{original user query}"
---
The review agent creates the directory and writes the artifact before returning results (R010 compliance).
CRG Integration (Optional Token-Efficiency)
crg-integration 스킬이 사용 가능한 경우 (MCP code-review-graph 연결 시), 리뷰 시작 전 먼저 호출하여 토큰 비용을 절감한다:
| Phase | CRG Tool | Purpose |
|---|
| Pre-review | get_impact_radius | 변경 영향 범위 사전 파악 (recall-우선) |
| Search | query_graph | AST 기반 호출자/피호출자 추적 |
| Diff analysis | get_minimal_context | 변경 코드의 최소 컨텍스트 |
| Semantic check | detect_changes | 두 시점 의미적 차이 |
Fallback (CRG 미설치 시)
CRG MCP 미연결 시 자동 fallback:
- grep/Grep 도구로 영향 범위 추적
- 전체 디렉토리 읽기 (R013 ecomode 트리거 가능성)
R013 Ecomode 정합
context >= 60% 시 CRG 호출 적극 권장. 8.2× 토큰 절감 (guides/token-efficiency/crg.md 벤치마크).
Refs: #1171 (CRG 통합), #1180 (본 cross-ref 추가)
Agent Selection
| File Extension | Agent | Skill |
|---|
| .go | lang-golang-expert | go-best-practices |
| .py | lang-python-expert | python-best-practices |
| .rs | lang-rust-expert | rust-best-practices |
| .kt | lang-kotlin-expert | kotlin-best-practices |
| .ts, .tsx | lang-typescript-expert | typescript-best-practices |
| .java | be-springboot-expert | springboot-best-practices |
| .jsx, .js (React) | fe-vercel-agent | react-best-practices |
Output Format
[dev:review src/main.go]
┌─ Agent: lang-golang-expert (sw-engineer)
├─ Skill: go-best-practices
└─ File: src/main.go
Review Results:
[Style] Line 15
Issue: Variable name should be camelCase
Found: user_name
Suggest: userName
[Error Handling] Line 42
Issue: Error not checked
Found: file.Close()
Suggest: if err := file.Close(); err != nil { ... }
[Performance] Line 78
Issue: Inefficient string concatenation in loop
Found: str += item
Suggest: Use strings.Builder
Summary:
Style: 1 issue
Error Handling: 1 issue
Performance: 1 issue
Total: 3 issues
Recommendation: Fix error handling issues first.