Standards Review
Review Priorities
Priority Source Focus
1 Existing code Search FIRST, import instead of creating
2 CLAUDE.md Project standards, conventions, patterns
3 rules/*.md Strict rules with numbers — check ALL [avoid#N] , [bp#N]
4 references/{stack}.md Stack-specific guidelines from this skill
Phase 0: User Confirmation
BEFORE any analysis, ask the user using AskUserQuestion tool:
"Run /simplify at the end for an additional review pass (efficiency, concurrency, hot-paths)? This will increase execution time."
Option Value
A "Yes - run /simplify after report"
B "No - standards review only"
Remember the answer. If "Yes" - execute Phase 7 after Phase 6. If "No" - stop after Phase 6.
Input
Input Example Action
Empty /standards-review
Branch vs main/master
Commit abc123
Single commit
Folder src/main/java/...
Folder contents
Arguments: $ARGUMENTS
Phase 1: Detect Tech Stack
Check project root for stack indicators:
Files Present Stack Reference
pom.xml , build.gradle , build.gradle.kts
Java/Kotlin references/java-kotlin.md
package.json with react/typescript TypeScript/React references/typescript-react.md
pyproject.toml , setup.py , requirements.txt
Python references/python.md
ACTION: When stack confirmed → READ references/{stack}.md (relative to this skill directory) and use as expert guidelines.
Multi-stack: If multiple detected, read ALL matching references, process each separately.
Unknown stack: Use only project's .claude/rules/ — skip stack reference.
Phase 2: Get Files
Based on detected stack, use appropriate patterns:
Stack Patterns Command
Java/Kotlin *.java , *.kt
git diff --name-only ... -- '.java' '.kt'
TypeScript/React *.ts , *.tsx , *.js , *.jsx
git diff --name-only ... -- '.ts' '.tsx'
Python *.py
git diff --name-only ... -- '*.py'
Commands by input type:
Commit
git diff --name-only {COMMIT}^..{COMMIT} -- {PATTERNS} | head -50
Branch (auto-detect main/master)
MAIN=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main") git diff --name-only ${MAIN}...HEAD -- {PATTERNS} | head -50
Folder
find {FOLDER} -type f ( {FIND_PATTERNS} ) | head -50
Phase 3: Load Context
Source Files Condition
Stack reference references/{stack}.md
Based on Phase 1 detection
Project rules .claude/rules/avoid.md , .claude/rules/best-practice.md , .claude/rules/-avoid.md , .claude/rules/-best-practice.md , .claude/rules/*.md
May not exist
Project standards CLAUDE.md , .claude/CLAUDE.md
May not exist
Search-First Protocol
Before reviewing code: identify new utilities/helpers/patterns/abstractions → search via grepai_search , check common locations → decide based on similarity.
Common Locations by Stack:
Stack Search Paths
Java/Kotlin **/util/ , **/common/ , **/shared/ , **/core/
TypeScript/React **/components/common/ , **/shared/ , **/hooks/ , **/utils/
Python **/utils/ , **/common/ , **/lib/ , **/helpers/
Similarity Decision Matrix:
Similarity Decision Action
90-100% REUSE Import existing
70-89% EXTEND Add params/config to existing
50-69% CONSIDER Evaluate effort vs benefit
<50% KEEP_NEW Justified new code
Phase 4: Expert Analysis
Step 4.1: Group Files by Type
From Phase 2 file list, group by pattern matching:
Java/Kotlin:
Group Pattern Focus
entities **/entity/.java , **/model/.kt
Entity suffix, DI, Lombok
services **/service/.java , **/service/.kt
Stream API, constructor injection
tests **/*Test.java , **/*Test.kt
AssertJ, BDD comments, no logs
build pom.xml , build.gradle , build.gradle.kts
Dependencies, plugins, versions
TypeScript/React:
Group Pattern Focus
styles **/styles.ts , **/*.styled.ts
Theme tokens, no hardcoded colors
components **/*.tsx
Hooks, functional components
tests **/.test.tsx , **/.spec.ts
Jest patterns, coverage
build package.json , tsconfig*.json , vite.config.* , webpack.config.*
Dependencies, scripts, bundler config
Python:
Group Pattern Focus
modules **/*.py (non-test) Type hints, docstrings
tests **/test_.py , **/_test.py
pytest patterns
configs */config.py , */settings.py
Environment handling
build pyproject.toml , setup.py , setup.cfg , requirements*.txt
Dependencies, tool configs
Step 4.2: Spawn Experts (haiku per group)
For each non-empty group, spawn parallel haiku agent:
Template:
Task(subagent_type="Explore", model="haiku", prompt="
Standards Review - {EXPERT_TYPE}
Stack: {STACK} SEARCH-FIRST: Use grepai_search for finding existing code before flagging duplicates.
Files: {FILE_LIST}
Project Rules: {RULES_CONTENT}
Stack Guidelines: {STACK_REFERENCE_CONTENT}
Output JSON: { "changes": [{ "location": "file:15-20", "description": "...", "existing": "path/to/similar|null", "reuse": "REUSE|EXTEND|CONSIDER|KEEP_NEW", "rating": "good|warning|bad" }], "violations": [{ "file": "path", "line": 42, "rule": "avoid#5|best-practice#3|stack:entity-suffix", "issue": "...", "fix": "...", "severity": "error|warning|info" }] } ")
Phase 5: Validation (sonnet)
Task(subagent_type="reviewer", model="sonnet", prompt=" Validate EACH finding from expert analysis. Read actual code at file:line locations. Verify rule actually applies in context.
Findings: {AGGREGATED_JSON}
Output: [ {"id": "1", "verdict": "CONFIRM|REJECT", "reason": "..."} ] ")
Phase 6: Report
Create Report Directory
TIMESTAMP=$(date +"%Y%m%d-%H%M%S") REPORT_DIR=".claude/reports/${TIMESTAMP}_standards-review" mkdir -p "${REPORT_DIR}"
REPORT.md Structure
Standards Review Report
Generated: {TIMESTAMP} Stack: {DETECTED_STACK} Scope: {INPUT_TYPE} - {INPUT_VALUE} Files Reviewed: {COUNT}
Summary
| Category | Count | Severity |
|---|---|---|
| Violations | X | Y errors, Z warnings |
| Reuse Opportunities | X | - |
| Good Patterns | X | - |
Violations
Errors
| File | Line | Rule | Issue | Fix |
|---|---|---|---|---|
| path | 42 | avoid#5 | Description | Suggested fix |
Warnings
| File | Line | Rule | Issue | Fix |
|---|
Reuse Opportunities
| New Code | Existing | Similarity | Action |
|---|---|---|---|
| path:15-20 | util/X.java | 85% | EXTEND |
Good Patterns Found
| File | Pattern | Description |
|---|---|---|
| path | stream-api | Proper use of Stream API |
Reuse Statistics
| Metric | Value |
|---|---|
| Total new code blocks | X |
| Reusable (>70%) | Y |
| Reuse rate | Z% |
Legend
Severity: error (must fix), warning (should fix), info (consider) Reuse: REUSE (import), EXTEND (modify existing), CONSIDER (evaluate), KEEP_NEW (justified) Rating: good (exemplary), warning (suboptimal), bad (violation)
Phase 7: Simplify Pass (conditional)
Execute ONLY if user answered "Yes" in Phase 0.
After Phase 6 report is written, invoke:
Skill(skill="simplify", args="{INPUT_VALUE}")
Where {INPUT_VALUE} is the same scope used in this review (commit, branch, or folder from Phase 2).
If user answered "No" in Phase 0 - skip this phase entirely.
Error Handling
Condition Action
No files found Exit: "No files to review for {SCOPE}"
50 files Warn user, suggest narrowing scope
Unknown stack Continue with project rules only
No rules found Continue with stack reference only
All compliant Report: "All code compliant with standards"