Use when user wants honest, evidence-backed code review. Every finding requires file:line proof. Covers security, architecture, performance, UI/UX for 33+ tech stacks.
When the skill is invoked, present a 3-step wizard. Ask questions conversationally with numbered options. Prefer multiple choice when possible, open-ended is fine too.
Fix Prompt — generate fix instructions grouped by severity
Feature Ideas — spawn a Feature Scout SubAgent that explores and suggests 3-5 implementable features
Verify Commits — run verification pipeline against recent git history
Review only (Recommended) — just the brutal review, no extras
Phase 2: Research + Discovery (automatic)
After the wizard completes, research runs automatically via SubAgents. The Main Chat stays lean — it only reads config files and builds a file list. All heavy reading is delegated.
Step 1: Stack Detection (Main Chat)
Read ONLY config files to detect the stack: package.json, go.mod, pyproject.toml, Cargo.toml, composer.json, etc. Use the Stack Detection table below. Do NOT read source files yet.
Step 2: File Collection (Main Chat)
Based on the scope selected in the wizard:
git diff: Run git diff --name-only (or git diff HEAD --name-only for staged changes) → file path list
After the File Scanner returns suspicious patterns, ask targeted questions based on REAL findings. Questions are asked one at a time in the chat.
Question Format
Ask each question as a numbered-option message. Every option MUST have a clear description explaining what it means and what happens if chosen:
Question 1/N: [Clear question about what was found]
1. **[Option label]** — [1-2 sentences explaining what this means and what the consequence is]
2. **[Option label]** — [1-2 sentences explaining what this means and what the consequence is]
3. **[Option label] (Recommended)** — [1-2 sentences explaining why this is recommended]
(Answer with the number, or ask if something is unclear)
When to Ask
Ask the user when the File Scanner found something that COULD be a deliberate decision:
Disabled features — "Feature X is disabled via early return. Intentional?"
Unusual patterns — "Found dangerouslySkipPermissions: true. On purpose?"
Outdated versions — "[Framework] v[old] detected, current stable is v[new]. Flag as MAJOR?"
Deactivated code — "Code block is commented out / feature-flagged off. Intended?"
Security concerns — "Found [potential issue]. Deep security audit?"
Rules
ONE question per message — never batch multiple questions. Ask one, wait for the answer, then ask the next
Only ask about things the File Scanner ACTUALLY FOUND — never hypothetical questions
Every option has a description — no bare labels. The user must understand what each option means without reading code
Include (Recommended) on the option you'd suggest, based on what the Scanner found
If the user asks "what do you mean?" → explain the context in more detail and re-ask the same question. NEVER skip a question because the user didn't understand it
If nothing suspicious found → skip Phase 3 entirely — don't ask questions for the sake of asking
When in doubt: ASK — one unnecessary question is infinitely better than one false finding
Answers inform the review — intentional patterns are excluded from findings, confirmed bugs are flagged
Do NOT use the AskUserQuestion tool — ask in regular chat messages with numbered options
Phase 4: Parallel SubAgent Reviews
Spawn one SubAgent per selected review domain using the Agent tool. Only spawn agents for domains the user selected in Phase 1 Step 1. Launch ALL selected agents in parallel (single message with multiple Agent tool calls).
What Each Agent Receives
The relevant checklist section (pasted inline — NOT a file reference)
File paths to review (NOT file contents — agents read files themselves using the Read tool)
File Scanner summaries from Phase 2 (1-2 sentence context per file, so agents know what to focus on)
Research results from Phase 2 (framework versions, CVE findings, best practices, API docs)
User's answers from Phase 3 (what's intentional, what to ignore)
The Iron Rules (copied into every agent prompt)
Stack-specific checklist items for their domain
Agent Definitions
Security Agent
Checklist: Security section from references/checklists.md
Focus: OWASP top 10, hardcoded secrets, auth patterns, input validation, CSRF, dependency CVEs, AI security
Must: Check every import, every API call, every user input handler, every env variable usage
Architecture & Code Agent
Checklist: Architecture + Testing sections from references/checklists.md
Focus: File structure, God objects/functions, circular dependencies, DRY violations, error handling, type safety, test coverage
Only spawn for web/mobile/game projects — skip for CLI tools, libraries, APIs without UI
Agent Prompt Template
Use this template when dispatching each agent via the Agent tool:
You are a {DOMAIN} review agent performing a brutal-honest code review.
## Iron Rules (non-negotiable)
1. Read EVERY file before judging — no exceptions
2. Include file:line for EVERY finding — no evidence = no finding
3. Use Grep to verify patterns before claiming they're missing
4. If uncertain → mark as "UNVERIFIED" and explain what you couldn't confirm (you cannot ask the user directly — only the lead agent can)
5. If something looks intentional → flag as "POSSIBLY INTENTIONAL" instead of a finding
6. NEVER invent findings — hallucinated findings are worse than no findings
## Your Checklist
{PASTE RELEVANT CHECKLIST SECTION}
## Stack-Specific Items
{PASTE STACK-SPECIFIC CHECKLIST ITEMS FOR THIS DOMAIN}
## Research Context
{PASTE FRAMEWORK VERSION + CVE + BEST PRACTICE FINDINGS FROM PHASE 2}
## User Clarifications
{PASTE PHASE 3 ANSWERS — what's intentional, what to ignore}
## Files to Review
{LIST OF FILE PATHS — you MUST read each file yourself using the Read tool before reviewing it}
## File Scanner Context
{PASTE 1-2 SENTENCE SUMMARIES PER FILE FROM PHASE 2 SCANNER — use these to prioritize, but always read the actual files}
## Instructions
Review every file against your checklist. For each finding report:
- **Severity:** CRITICAL / MAJOR / MEDIUM / MINOR (use severity guide definitions)
- **Location:** file:line
- **Issue:** What's wrong
- **Impact:** Why it matters
- **Fix:** Suggested fix (one sentence)
Report ONLY real findings backed by evidence. Zero tolerance for guessing.
DO NOT write any code or make any changes. Review and report only.
## Return Protocol
End your review with one of these statuses:
- **DONE** — Review complete, all findings have file:line evidence.
- **DONE_WITH_CONCERNS** — Review complete, but some areas couldn't be fully verified. List what and why.
- **NEEDS_CONTEXT** — Can't complete review without more information. List exactly what you need.
- **BLOCKED** — Can't review at all (files unreadable, wrong stack, etc.). Explain the blocker.
Phase 5: Aggregation + Output
After all SubAgents complete, aggregate their findings into a single review.
Step 1: Collect
Gather all findings from all review agents.
Step 2: Deduplicate
If multiple agents flagged the same issue, keep the most detailed finding and note which agents found it.
Step 3: Sort
Order by severity: CRITICAL → MAJOR → MEDIUM → MINOR
Step 4: Format Output
## BRUTAL REVIEW: [Topic]
**Stack:** [detected] | **Scope:** [diff/project/files] | **Agents:** [which ran]
### CRITICAL
- [Finding] — `file:line` — [why it matters]
### MAJOR
- [Finding] — `file:line` — [why it matters]
### MEDIUM
- [Finding] — `file:line`
### MINOR
- [Finding] — `file:line`
### VERDICT
One brutal sentence. No sugarcoating.
Omit empty severity sections. If no findings in a severity level, don't include that heading.
Phase 6: Action Wizard
After presenting the review, ask the user what to do next:
How do you want to handle the findings?
Fix via SubAgents (Recommended) — Phase-by-phase: Implement → Spec Review → Code Quality Review → Commit. Cheapest and most reliable.
Fix via Agent Teams — Same phase structure as SubAgents, but uses TeamCreate for parallel persistent agents. 3-5x more expensive in tokens.
Fix it yourself — I'll assist in chat but you drive the fixes.
Discuss first — Let's talk through the findings before deciding on action.
Phase 7: Fix Cycle
When "Fix via SubAgents" or "Fix via Agent Teams" is selected, group findings into phases by severity. For Agent Teams, use TeamCreate and assign tasks to persistent teammates instead of spawning fresh SubAgents per step — otherwise the phase structure is identical.
Phase 1: CRITICAL fixes (must fix immediately)
Phase 2: MAJOR fixes (ship blockers)
Phase 3: MEDIUM + MINOR fixes (combined, lowest priority)
Skip empty phases. If no CRITICAL findings, start with Phase 2.
Create all phase tasks upfront using TaskCreate. One task per phase (e.g. "Phase 1: CRITICAL fixes", "Phase 2: MAJOR fixes", "Phase 3: MEDIUM + MINOR fixes"). Set blockedBy so Phase 2 is blocked by Phase 1, Phase 3 is blocked by Phase 2. Then work through them in order — mark each as in_progress when starting, completed when done. This gives the user a clear progress view.
Never skip findings without asking the user. Fix ALL findings in each phase. If you think a finding should be skipped (e.g. "cosmetic", "by design", "app-wide"), ask the user first — don't decide on your own. The user confirmed these findings during the review; skipping them silently wastes that decision.
Per Fix Phase
Step 1: Implementer SubAgent
Spawn via Agent tool:
Receives: All findings for this severity phase (Severity + file:line + Issue + Impact + Fix) and the relevant file paths
Does NOT receive file contents — reads files itself using the Read tool
Job: Implement each fix, write tests where appropriate, commit changes, self-review
Must follow Iron Rules: read files before changing, verify fixes work
Include in the agent prompt:
## Before You Begin
If you have questions about requirements, approach, or scope — ask them now.
Raise any concerns before starting work.
## While You Work
If you encounter something unexpected or unclear — ask, don't guess.
## Return Protocol
End your work with one of these statuses:
- **DONE** — All fixes implemented and verified.
- **DONE_WITH_CONCERNS** — Fixes implemented but I have concerns about [X]. Review carefully.
- **NEEDS_CONTEXT** — Can't complete without more information: [what you need].
- **BLOCKED** — Can't proceed: [blocker]. Do NOT force a bad fix.
## When You're in Over Your Head
It is always OK to stop and say "this is too hard for me."
Bad work is worse than no work. You will not be penalized for escalating.
Step 2: Spec Review SubAgent
Spawn via Agent tool after Implementer completes:
Receives: Original findings for this phase + Implementer's report + relevant file paths
Does NOT receive file contents — reads files itself using the Read tool
Job: Verify EACH finding is actually fixed by reading the actual code
Does NOT trust the Implementer's claims — reads code independently
Checks: Was the finding addressed? Is the fix correct? Were any findings missed?
Uses the same Return Protocol (DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED)
Run the project's test/build/lint command (auto-detect from package.json scripts, Makefile, Cargo.toml, etc.)
Read the full output, check exit code
If tests fail → the fix broke something. Re-dispatch Implementer with the failure context
If no test command exists → at minimum run syntax check (node --check, go vet, cargo check, python -m py_compile, etc.)
Only proceed when verification passes
Step 5: Commit + Push
After verification passes, ensure all changes are committed and pushed. Then proceed to next severity phase.
Handling Agent Status
After each SubAgent returns, check its status:
DONE → proceed to next step
DONE_WITH_CONCERNS → review the concerns, decide if they're blocking or acceptable, note them for the user
NEEDS_CONTEXT → provide the missing context and re-dispatch the same agent
BLOCKED → assess the blocker:
Context problem → provide more context, re-dispatch
Task too complex → break into smaller pieces, re-dispatch
Plan itself is wrong → escalate to user, ask how to proceed
Never ignore a BLOCKED status. Never force-retry without changes.
Feature Scout (if selected in Phase 1 wizard)
After all fix phases complete (or after review-only), spawn a separate SubAgent:
Explores the entire project: structure, patterns, features, architecture
Suggests 3-5 concrete, implementable features
Each suggestion includes: what it does, why it adds value, rough complexity (small/medium/large)
Presents suggestions for the user to pick favorites
Verify Commits (if selected in Phase 1 wizard)
Run verification against recent git history:
Detect phases from commit subjects (pattern matching)
Extract plan items from commit bodies
Check: existence + correctness, cross-references, regressions
Report as verification table with pass/fail per item
Phase 8: Final Summary
After all phases complete, present a human-readable summary of everything.
Summary Content
What was reviewed (scope, stack, which domains)
What was found (count per severity, key issues in plain language)
What was fixed (if fix cycle ran)
What remains open (if anything was skipped or deferred)
No line numbers in the summary. Write in human words, not technical jargon. Example:
"Reviewed the full Aria project (Electron + React). Found 2 critical security issues (hardcoded endpoint exposed to network, missing CSP headers), 5 major architecture problems, and 8 minor code style issues. All critical and major issues fixed and committed. Minor issues left as-is per your decision."
Final Question
Ask the user:
What now?
Another review — review a different project or set of files
Re-review same files — check if everything is clean after fixes
Done — finished, end the review session
Stack Detection (Step 0 — before analysis)
Detect the project's tech stack before applying any checklist. This determines which severity items and checklist sections are relevant.
File Found
Stack
Checklist Focus
package.json with "react"
React/Next.js
React-specific + Universal
package.json with "vue"
Vue/Nuxt
Vue-specific + Universal
package.json with "svelte"
Svelte/SvelteKit
Svelte-specific + Universal
package.json with "@angular"
Angular
Angular-specific + Universal
requirements.txt / pyproject.toml with django
Python (Django)
Python (Django) + Universal
requirements.txt / pyproject.toml with fastapi
Python (FastAPI)
Python (FastAPI) + Universal
requirements.txt / pyproject.toml (no django/fastapi)
Python (generic)
Universal only
go.mod
Go
Go-specific + Universal
Cargo.toml
Rust
Rust-specific + Universal
composer.json
PHP/Laravel
PHP-specific + Universal
pom.xml / build.gradle
Java/Kotlin
JVM-specific + Universal
*.csproj / *.sln
C#/.NET
.NET-specific + Universal
pubspec.yaml
Flutter/Dart
Flutter-specific + Mobile + Universal
astro.config.*
Astro
Astro-specific + Universal
package.json with "@remix-run"
Remix
Remix-specific + Universal
package.json with "solid-js"
SolidJS
Solid-specific + Universal
package.json with "hono"
Hono
Hono-specific + Universal
Gemfile with rails
Ruby/Rails
Rails-specific + Universal
mix.exs
Elixir/Phoenix
Elixir-specific + Universal
CMakeLists.txt / *.cpp + Makefile
C/C++
C/C++-specific + Universal
Package.swift / *.xcodeproj
Swift/iOS
Swift-specific + Mobile + Universal
build.gradle.kts with kotlin
Kotlin (native/multiplatform)
Kotlin-specific + Universal
*.html (standalone, no framework)
Vanilla HTML/JS/CSS
Web standards + Universal
package.json with "react-native"
React Native
Mobile + Universal
Assets/ + ProjectSettings/ + *.unity
Unity
Unity-specific + Game + Universal
*.uproject
Unreal Engine
Unreal-specific + Game + Universal
project.godot
Godot
Godot-specific + Game + Universal
package.json with "phaser"
Phaser
Phaser-specific + Game + Universal
package.json with "three"
Three.js
Three.js-specific + Game + Universal
package.json with "pixi.js"
PixiJS
Phaser/Web 2D-specific + Game + Universal
package.json with "kaplay"
Kaplay
Phaser/Web 2D-specific + Game + Universal
Cargo.toml with bevy
Bevy
Bevy-specific + Game + Universal
conf.lua + main.lua
Love2D
Love2D-specific + Game + Universal
*.py with import pygame
Pygame
Pygame-specific + Game + Universal
*.html with <canvas> + game loop (heuristic: requestAnimationFrame or setInterval with update/draw pattern)
Web Canvas Game
Game + Web standards + Universal
No recognizable config
Ask user
—
Important: Only apply stack-specific items when that stack is detected. A Python API does not get React checklist items. A vanilla HTML game does not get Next.js items.
Multi-stack projects: If multiple config files are detected (e.g., package.json + pyproject.toml in a monorepo), apply ALL matching stack-specific checklists. Review each sub-project against its own stack.
Input Handling
Context Awareness: Check for framework config files (package.json, pyproject.toml, go.mod, etc.) to detect versions. Flag outdated framework versions (2+ major versions behind current stable). (Exception: game engines — LTS versions are standard; only flag end-of-life or unsupported versions.) Check current stable version of the detected framework using available tools or training knowledge — flag anything 2+ major versions behind; if unable to verify, state the assumption.
Files/Folders:
Single file: Read it
Multiple files:
Glob: Use pattern appropriate to detected stack. Default: **/*.{js,ts,jsx,tsx,vue,svelte,astro,html,css,py,go,rs,java,kt,php,rb,cs,dart,swift,ex,exs,cpp,hpp,c,h,erl,gd,tscn,tres,unity,uproject,lua}
Max 30 files: If more, analyze entry points + configs only
Monorepos: If >3 config files detected at different paths, treat as multi-project. Analyze workspace root config + one entry point per sub-project. Distribute the 30-file limit proportionally. When user specifies a sub-project, focus on that one.
Images: Use Read tool to analyze screenshots/mockups for colors, contrast, typography, spacing, layout issues. Supports PNG, JPG, WebP. If no image provided, skip.
Reference Loading
STEP 1: Locate Skill Directory
Try reading from skill installation path: ./references/[file]
Check your AI tool's skill/plugin directory for the references/ folder (e.g., ~/.claude/skills/brutal-honest/references/, project-level .agents/skills/brutal-honest/references/, or equivalent)
STEP 2: Attempt to Load (in order)
references/severity-guide.md → If NOT FOUND, use "Embedded Severity Guide" below
references/checklists.md → If NOT FOUND, use "Embedded Checklists" below
references/ui-patterns.md → If NOT FOUND, use "Embedded UI Patterns" below
STEP 3: If files found, external overrides embedded; fill gaps with embedded defaults
These embedded sections are fallbacks only. If you have the references/ folder installed, the external files take priority and these are ignored.
Use this if references/severity-guide.md not found.
CRITICAL - Fix yesterday
AI vulnerabilities — Prompt injection (user input reaches LLM unsanitized), AI tools with DELETE permissions without confirmation, auth tokens in AI conversation logs
Security — Hardcoded secrets, SQL injection, XSS, CSRF without protection, no input validation at system boundaries
Data loss — No backups, no transaction safety, destructive operations without confirmation
Soft-lock — Player cannot progress and cannot load a prior save (game projects)
Save corruption — Save data can be lost or corrupted without detection/recovery (game projects)
Determinism failure — Desyncs in multiplayer from non-deterministic simulation (multiplayer games)
MAJOR - Ship blocker
Outdated framework — Using a version 2+ major versions behind current stable release (check against latest stable, not a hardcoded version number; for game engines: locking to an LTS version is standard; flag only if engine version is end-of-life or unsupported)
Architecture — 2000+ line files without clear section separation (unless architecturally intentional, e.g., single-file apps, embeddable widgets, Go's copy-over-dependency idiom), God objects/functions, circular dependencies
Type safety — No strict mode (where language supports it), any/object/interface{} everywhere at boundaries
UX — No loading states, broken mobile/responsive, no error feedback to users
AI Architecture — Client-side LLM calls instead of server-side (exposes API keys)
Missing error handling — No try/catch in async operations, silent failures, unhandled promise rejections / panics / exceptions
No object pooling — Frequently spawned objects (bullets, particles, enemies) allocated/destroyed per frame causing GC pauses (game projects)
Wrong update loop — Physics in render loop or rendering in physics loop, causing frame-rate-dependent behavior (game projects)
No frame budget discipline — No profiling, no performance targets, frame time exceeds 16.6ms in core gameplay (game projects)
No worker offloading — Heavy simulation running on main thread blocking rendering; use Web Worker for game logic, transferable ArrayBuffers for data (web game projects with large entity counts)
MEDIUM - Code review nightmare
Not using framework idioms — Not leveraging the framework's recommended patterns and latest stable features
Performance — No image/asset optimization, missing lazy loading, no caching strategy
Missing tests — No unit tests, no integration tests for critical paths
No CI/CD — No automated builds, no linting on PR, manual deployments (lower priority for solo/indie/game jam projects)
State management — Prop drilling / global mutation / spaghetti state where framework provides better patterns (game singletons like GameManager/AudioManager are standard architecture, not spaghetti)
AI-generated aesthetic — Generic design with no brand identity: purple gradients, single sans-serif font, three-column icon grids, uniform rounded corners, 0.1 opacity shadows on everything (web projects)
Missing keyboard navigation — No keyboard shortcuts for power users (where applicable)
No monitoring — No error tracking, no performance monitoring, no logging strategy
No input rebinding — Hardcoded controls with no remapping option (game projects — accessibility baseline)
No game accessibility — Missing colorblind mode, subtitles, or difficulty options (game projects — 2026 baseline)
No spatial partitioning — Brute-force collision detection with many entities, no quadtree/octree/spatial hash (game projects)
MINOR - Nitpick, but fix it
Inconsistent code style — Mixed formatting, naming conventions, quote styles within the same file
Missing documentation — Public APIs / exported functions without types or docs
Debug code in production — console.log, print(), debug flags, TODO comments left in shipped code
Non-semantic markup — div soup, inline styles (web projects)
Anchor Positioning: CSS anchor-name + position-area for popovers without JS
Anti-AI-Slop Signals
Red flags: purple/indigo gradients, single sans-serif font (Inter/Roboto), three-column icon grids, generic CTAs, uniform rounded corners, 0.1 opacity shadows everywhere
Professional signals: intentional font pairing (serif+sans or display+body), semantic color system via CSS custom properties, 8px spacing grid, benefit-driven CTA language, social proof near decision points
Visual Hierarchy
60-30-10 Color Rule: 60% neutral, 30% primary, 10% accent
Semantic Color System: CSS custom properties with semantic names (--text-primary, --surface, --accent), light-dark() for dark mode, `color-mix
…(truncated)
1---2name: brutal-honest3description: Use when user wants honest, evidence-backed code review. Every finding requires file:line proof. Covers security, architecture, performance, UI/UX for 33+ tech stacks.4---56# brutal-honest
78Ruthless expert analysis with evidence. No guessing, no hallucinating, no ego.
910<HARD-GATE>
11## Iron Rules (non-negotiable, every phase)
12131. **Read EVERY file before judging** — SubAgents read files themselves; the Main Chat only reads config files for stack detection
142. **file:line for EVERY finding** — no evidence = no finding
153. **Grep to verify** before claiming a pattern is missing
164. **If uncertain → ASK the user or RESEARCH** — never guess
175. **If something looks intentional → ASK, don't flag** — one question too many > one false finding
186. **NEVER invent findings** — hallucinated findings are worse than no findings
19</HARD-GATE>
2021## Red Flags — STOP Immediately
2223If you catch yourself thinking any of these, STOP and correct:
2425| Thought | Reality |
26|---------|---------|
27| "I'll just skim this file" | Read it fully or don't review it |
28| "This pattern is probably missing" | Grep first. No grep = no claim |
29| "The file is too large to read" | Read it in chunks. Size is not an excuse |
30| "I'm confident without checking" | Confidence without evidence = hallucination |
31| "This is obviously wrong" | Obvious to whom? Verify with code |
32| "I'll flag it just in case" | No evidence = no finding. Period |
33| "The user probably knows about this" | If it's a real finding, report it with evidence |
34| "I don't need to research this" | If uncertain about versions/CVEs/patterns — research |
35| "I'll paste file contents to the SubAgent" | SubAgents have Read tool access. Send paths, not contents |
3637## Process Flow
3839```
40/brutal-honest → Wizard (Phase 1) → Research (Phase 2) → Follow-Up Questions (Phase 3) → SubAgent Review (Phase 4) → Output (Phase 5) → Action Wizard (Phase 6) → Fix Cycle (Phase 7) → Summary (Phase 8)
41```
4243## Phase 1: Interactive Wizard
4445When the skill is invoked, present a 3-step wizard. Ask questions conversationally with numbered options. Prefer multiple choice when possible, open-ended is fine too.
4647### Step 1 — What to Review
4849Ask the user (multiple selections allowed):
50511. **Security** — OWASP, secrets, auth, input validation, AI security, dependency audit
522. **Architecture & Code** — File structure, dependencies, DRY, error handling, types, testing coverage
533. **Performance** — Core Web Vitals / frame budget, assets, caching, lazy loading, N+1 queries
544. **UI/UX & Accessibility** — WCAG 2.2, mobile/responsive, visual hierarchy, anti-AI-slop patterns
5556Or they can describe a custom focus area.
5758### Step 2 — Review Settings
5960Ask two things:
6162**Scope — What files should I review?**
631. git diff only (Recommended) — only changed files since last commit
642. Entire project — all project files (max 30, prioritized by importance)
653. Specific files/folders — user specifies which files or directories
6667**Stack — How should I detect your tech stack?**
681. Auto-detect (Recommended) — check config files (package.json, go.mod, etc.) automatically
692. Manual override — user tells you which stack
7071### Step 3 — After the Review
7273Ask the user (multiple selections allowed):
74751. **Fix Prompt** — generate fix instructions grouped by severity
762. **Feature Ideas** — spawn a Feature Scout SubAgent that explores and suggests 3-5 implementable features
773. **Verify Commits** — run verification pipeline against recent git history
784. **Review only (Recommended)** — just the brutal review, no extras
7980## Phase 2: Research + Discovery (automatic)
8182After the wizard completes, research runs automatically via SubAgents. The Main Chat stays lean — it only reads config files and builds a file list. All heavy reading is delegated.
8384### Step 1: Stack Detection (Main Chat)
8586Read ONLY config files to detect the stack: `package.json`, `go.mod`, `pyproject.toml`, `Cargo.toml`, `composer.json`, etc. Use the Stack Detection table below. Do NOT read source files yet.
8788### Step 2: File Collection (Main Chat)
8990Based on the scope selected in the wizard:
91- **git diff:** Run `git diff --name-only` (or `git diff HEAD --name-only` for staged changes) → file path list
92- **Entire project:** Glob for source files → file path list. Prioritize: 1) Config files 2) Entry points 3) Core logic. Max 30 files.
93- **Specific files:** Use the user's specified paths → file path list
9495Output: A list of file paths. Do NOT read these files in the Main Chat.
9697### Step 3: Dispatch SubAgents (parallel)
9899Launch TWO SubAgents in parallel (single message with multiple Agent tool calls):
100101**File Scanner SubAgent:**
102- Receives: The file path list from Step 2
103- Job: Read EVERY file on the list. For each file, produce:
104 - **Summary** (1-2 sentences): What the file does, its role in the project
105 - **Suspicious patterns**: Disabled features, commented-out code, unusual patterns, feature flags
106 - **Dependencies**: Import statements, version references
107- Return: Structured summary of all files + list of suspicious patterns for Phase 3
108109**Web Research SubAgent:**
110- Receives: Stack info + dependency list from config files (read in Step 1)
111- Job: Research everything the model cannot know from training data:
112 - **Current stable versions** of all detected frameworks and major dependencies
113 - **Known CVEs** for detected dependencies (always, not just for Security reviews)
114 - **API documentation** for project-specific tools (e.g., Ollama API, specific SDKs)
115 - **Competitor implementations** — how similar projects solve the same problems
116 - **Domain-specific patterns** — best practices the model might not know
117 - **Anything uncertain** — if the agent encounters something it's not confident about, it searches
118- Principle: "If you can't be 100% sure from training data alone → search for it"
119- Return: Research findings organized by topic
120121<HARD-GATE>
122The Web Research SubAgent is MANDATORY. It ALWAYS runs, even for small projects. At minimum it checks current stable versions of detected dependencies. The "when uncertain" trigger from v3.1 was too passive — agents never triggered it. Now it's mandatory.
123</HARD-GATE>
124125### Step 4: Collect Results
126127Main Chat receives summaries from both SubAgents. These summaries (NOT raw file contents) are used for:
128- Phase 3 follow-up questions (based on suspicious patterns)
129- Phase 4 review agent context (summaries + research + file paths)
130131## Phase 3: Informed Follow-Up Questions
132133After the File Scanner returns suspicious patterns, ask targeted questions based on REAL findings. Questions are asked **one at a time** in the chat.
134135### Question Format
136137Ask each question as a numbered-option message. Every option MUST have a clear description explaining what it means and what happens if chosen:
138139```
140Question 1/N: [Clear question about what was found]
1411421. **[Option label]** — [1-2 sentences explaining what this means and what the consequence is]
1432. **[Option label]** — [1-2 sentences explaining what this means and what the consequence is]
1443. **[Option label] (Recommended)** — [1-2 sentences explaining why this is recommended]
145146(Answer with the number, or ask if something is unclear)
147```
148149### When to Ask
150151Ask the user when the File Scanner found something that COULD be a deliberate decision:
152153- **Disabled features** — "Feature X is disabled via early return. Intentional?"
154- **Unusual patterns** — "Found `dangerouslySkipPermissions: true`. On purpose?"
155- **Outdated versions** — "[Framework] v[old] detected, current stable is v[new]. Flag as MAJOR?"
156- **Deactivated code** — "Code block is commented out / feature-flagged off. Intended?"
157- **Security concerns** — "Found [potential issue]. Deep security audit?"
158159### Rules
1601611. **ONE question per message** — never batch multiple questions. Ask one, wait for the answer, then ask the next
1622. **Only ask about things the File Scanner ACTUALLY FOUND** — never hypothetical questions
1633. **Every option has a description** — no bare labels. The user must understand what each option means without reading code
1644. **Include (Recommended)** on the option you'd suggest, based on what the Scanner found
1655. **If the user asks "what do you mean?"** → explain the context in more detail and re-ask the same question. NEVER skip a question because the user didn't understand it
1666. **If nothing suspicious found → skip Phase 3 entirely** — don't ask questions for the sake of asking
1677. **When in doubt: ASK** — one unnecessary question is infinitely better than one false finding
1688. **Answers inform the review** — intentional patterns are excluded from findings, confirmed bugs are flagged
1699. **Do NOT use the AskUserQuestion tool** — ask in regular chat messages with numbered options
170171## Phase 4: Parallel SubAgent Reviews
172173Spawn one SubAgent per selected review domain using the Agent tool. Only spawn agents for domains the user selected in Phase 1 Step 1. Launch ALL selected agents in parallel (single message with multiple Agent tool calls).
174175### What Each Agent Receives
1761771. The relevant checklist section (pasted inline — NOT a file reference)
1782. **File paths to review** (NOT file contents — agents read files themselves using the Read tool)
1793. **File Scanner summaries** from Phase 2 (1-2 sentence context per file, so agents know what to focus on)
1804. Research results from Phase 2 (framework versions, CVE findings, best practices, API docs)
1815. User's answers from Phase 3 (what's intentional, what to ignore)
1826. The Iron Rules (copied into every agent prompt)
1837. Stack-specific checklist items for their domain
184185### Agent Definitions
186187**Security Agent**
188- Checklist: Security section from references/checklists.md
189- Focus: OWASP top 10, hardcoded secrets, auth patterns, input validation, CSRF, dependency CVEs, AI security
190- Must: Check every import, every API call, every user input handler, every env variable usage
191192**Architecture & Code Agent**
193- Checklist: Architecture + Testing sections from references/checklists.md
194- Focus: File structure, God objects/functions, circular dependencies, DRY violations, error handling, type safety, test coverage
195- Must: Trace dependency graph, check module boundaries, verify error paths, assess test quality
196197**Performance Agent**
198- Checklist: Performance section from references/checklists.md
199- Focus: Core Web Vitals / frame budget, asset optimization, caching strategy, lazy loading, N+1 queries, bundle size
200- Must: Check asset sizes, loading patterns, database queries, render paths, memory usage
201202**UI/UX & Accessibility Agent**
203- Checklist: Accessibility section from references/checklists.md + references/ui-patterns.md
204- Focus: WCAG 2.2, keyboard navigation, screen readers, mobile/responsive, visual hierarchy, anti-AI-slop patterns
205- Must: Check semantic HTML, ARIA labels, color contrast, focus management, layout patterns
206- Only spawn for web/mobile/game projects — skip for CLI tools, libraries, APIs without UI
207208### Agent Prompt Template
209210Use this template when dispatching each agent via the Agent tool:
211212````
213You are a {DOMAIN} review agent performing a brutal-honest code review.
214215## Iron Rules (non-negotiable)
2161. Read EVERY file before judging — no exceptions
2172. Include file:line for EVERY finding — no evidence = no finding
2183. Use Grep to verify patterns before claiming they're missing
2194. If uncertain → mark as "UNVERIFIED" and explain what you couldn't confirm (you cannot ask the user directly — only the lead agent can)
2205. If something looks intentional → flag as "POSSIBLY INTENTIONAL" instead of a finding
2216. NEVER invent findings — hallucinated findings are worse than no findings
222223## Your Checklist
224{PASTE RELEVANT CHECKLIST SECTION}
225226## Stack-Specific Items
227{PASTE STACK-SPECIFIC CHECKLIST ITEMS FOR THIS DOMAIN}
228229## Research Context
230{PASTE FRAMEWORK VERSION + CVE + BEST PRACTICE FINDINGS FROM PHASE 2}
231232## User Clarifications
233{PASTE PHASE 3 ANSWERS — what's intentional, what to ignore}
234235## Files to Review
236{LIST OF FILE PATHS — you MUST read each file yourself using the Read tool before reviewing it}
237238## File Scanner Context
239{PASTE 1-2 SENTENCE SUMMARIES PER FILE FROM PHASE 2 SCANNER — use these to prioritize, but always read the actual files}
240241## Instructions
242Review every file against your checklist. For each finding report:
243- **Severity:** CRITICAL / MAJOR / MEDIUM / MINOR (use severity guide definitions)
244- **Location:** file:line
245- **Issue:** What's wrong
246- **Impact:** Why it matters
247- **Fix:** Suggested fix (one sentence)
248249Report ONLY real findings backed by evidence. Zero tolerance for guessing.
250DO NOT write any code or make any changes. Review and report only.
251252## Return Protocol
253254End your review with one of these statuses:
255256- **DONE** — Review complete, all findings have file:line evidence.
257- **DONE_WITH_CONCERNS** — Review complete, but some areas couldn't be fully verified. List what and why.
258- **NEEDS_CONTEXT** — Can't complete review without more information. List exactly what you need.
259- **BLOCKED** — Can't review at all (files unreadable, wrong stack, etc.). Explain the blocker.
260````
261262## Phase 5: Aggregation + Output
263264After all SubAgents complete, aggregate their findings into a single review.
265266### Step 1: Collect
267Gather all findings from all review agents.
268269### Step 2: Deduplicate
270If multiple agents flagged the same issue, keep the most detailed finding and note which agents found it.
271272### Step 3: Sort
273Order by severity: CRITICAL → MAJOR → MEDIUM → MINOR
274275### Step 4: Format Output
276277````
278## BRUTAL REVIEW: [Topic]
279280**Stack:** [detected] | **Scope:** [diff/project/files] | **Agents:** [which ran]
281282### CRITICAL
283- [Finding] — `file:line` — [why it matters]
284285### MAJOR
286- [Finding] — `file:line` — [why it matters]
287288### MEDIUM
289- [Finding] — `file:line`
290291### MINOR
292- [Finding] — `file:line`
293294### VERDICT
295One brutal sentence. No sugarcoating.
296````
297298Omit empty severity sections. If no findings in a severity level, don't include that heading.
299300## Phase 6: Action Wizard
301302After presenting the review, ask the user what to do next:
303304**How do you want to handle the findings?**
3053061. **Fix via SubAgents (Recommended)** — Phase-by-phase: Implement → Spec Review → Code Quality Review → Commit. Cheapest and most reliable.
3072. **Fix via Agent Teams** — Same phase structure as SubAgents, but uses TeamCreate for parallel persistent agents. 3-5x more expensive in tokens.
3083. **Fix it yourself** — I'll assist in chat but you drive the fixes.
3094. **Discuss first** — Let's talk through the findings before deciding on action.
310311## Phase 7: Fix Cycle
312313When "Fix via SubAgents" or "Fix via Agent Teams" is selected, group findings into phases by severity. For Agent Teams, use TeamCreate and assign tasks to persistent teammates instead of spawning fresh SubAgents per step — otherwise the phase structure is identical.
314315- **Phase 1:** CRITICAL fixes (must fix immediately)
316- **Phase 2:** MAJOR fixes (ship blockers)
317- **Phase 3:** MEDIUM + MINOR fixes (combined, lowest priority)
318319Skip empty phases. If no CRITICAL findings, start with Phase 2.
320321**Create all phase tasks upfront using TaskCreate.** One task per phase (e.g. "Phase 1: CRITICAL fixes", "Phase 2: MAJOR fixes", "Phase 3: MEDIUM + MINOR fixes"). Set blockedBy so Phase 2 is blocked by Phase 1, Phase 3 is blocked by Phase 2. Then work through them in order — mark each as in_progress when starting, completed when done. This gives the user a clear progress view.
322323**Never skip findings without asking the user.** Fix ALL findings in each phase. If you think a finding should be skipped (e.g. "cosmetic", "by design", "app-wide"), ask the user first — don't decide on your own. The user confirmed these findings during the review; skipping them silently wastes that decision.
324325### Per Fix Phase
326327**Step 1: Implementer SubAgent**
328329Spawn via Agent tool:
330- Receives: All findings for this severity phase (Severity + file:line + Issue + Impact + Fix) and the relevant file paths
331- Does NOT receive file contents — reads files itself using the Read tool
332- Job: Implement each fix, write tests where appropriate, commit changes, self-review
333- Must follow Iron Rules: read files before changing, verify fixes work
334335Include in the agent prompt:
336337```
338## Before You Begin
339340If you have questions about requirements, approach, or scope — ask them now.
341Raise any concerns before starting work.
342343## While You Work
344345If you encounter something unexpected or unclear — ask, don't guess.
346347## Return Protocol
348349End your work with one of these statuses:
350351- **DONE** — All fixes implemented and verified.
352- **DONE_WITH_CONCERNS** — Fixes implemented but I have concerns about [X]. Review carefully.
353- **NEEDS_CONTEXT** — Can't complete without more information: [what you need].
354- **BLOCKED** — Can't proceed: [blocker]. Do NOT force a bad fix.
355356## When You're in Over Your Head
357358It is always OK to stop and say "this is too hard for me."
359Bad work is worse than no work. You will not be penalized for escalating.
360```
361362**Step 2: Spec Review SubAgent**
363364Spawn via Agent tool after Implementer completes:
365- Receives: Original findings for this phase + Implementer's report + relevant file paths
366- Does NOT receive file contents — reads files itself using the Read tool
367- Job: Verify EACH finding is actually fixed by reading the actual code
368- Does NOT trust the Implementer's claims — reads code independently
369- Checks: Was the finding addressed? Is the fix correct? Were any findings missed?
370- Uses the same Return Protocol (DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED)
371- ✅ All fixed → proceed to Step 3
372- ❌ Issues found → describe what's wrong → Implementer fixes → Spec Review re-runs
373374**Step 3: Code Quality Review SubAgent**
375376Spawn via Agent tool after Spec Review passes:
377- Receives: git diff of all changes in this phase
378- Job: Verify fix quality — no new bugs, no regressions, clean code, consistent style
379- Uses the same Return Protocol (DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED)
380- ✅ Approved → proceed to Verification Gate
381- ❌ Issues found → describe what's wrong → Implementer fixes → Code Quality re-reviews
382383**Step 4: Verification Gate (mandatory)**
384385Before committing and moving to the next phase:
3863871. Run the project's test/build/lint command (auto-detect from package.json scripts, Makefile, Cargo.toml, etc.)
3882. Read the full output, check exit code
3893. If tests fail → the fix broke something. Re-dispatch Implementer with the failure context
3904. If no test command exists → at minimum run syntax check (node --check, go vet, cargo check, python -m py_compile, etc.)
3915. Only proceed when verification passes
392393<HARD-GATE>
394Do NOT claim fixes are complete without running verification. Do NOT commit broken code.
395</HARD-GATE>
396397**Step 5: Commit + Push**
398399After verification passes, ensure all changes are committed and pushed. Then proceed to next severity phase.
400401### Handling Agent Status
402403After each SubAgent returns, check its status:
404405- **DONE** → proceed to next step
406- **DONE_WITH_CONCERNS** → review the concerns, decide if they're blocking or acceptable, note them for the user
407- **NEEDS_CONTEXT** → provide the missing context and re-dispatch the same agent
408- **BLOCKED** → assess the blocker:
409 1. Context problem → provide more context, re-dispatch
410 2. Task too complex → break into smaller pieces, re-dispatch
411 3. Plan itself is wrong → escalate to user, ask how to proceed
412413Never ignore a BLOCKED status. Never force-retry without changes.
414415### Feature Scout (if selected in Phase 1 wizard)
416417After all fix phases complete (or after review-only), spawn a separate SubAgent:
418- Explores the entire project: structure, patterns, features, architecture
419- Suggests 3-5 concrete, implementable features
420- Each suggestion includes: what it does, why it adds value, rough complexity (small/medium/large)
421- Presents suggestions for the user to pick favorites
422423### Verify Commits (if selected in Phase 1 wizard)
424425Run verification against recent git history:
426- Detect phases from commit subjects (pattern matching)
427- Extract plan items from commit bodies
428- Check: existence + correctness, cross-references, regressions
429- Report as verification table with pass/fail per item
430431## Phase 8: Final Summary
432433After all phases complete, present a human-readable summary of everything.
434435### Summary Content
436437- What was reviewed (scope, stack, which domains)
438- What was found (count per severity, key issues in plain language)
439- What was fixed (if fix cycle ran)
440- What remains open (if anything was skipped or deferred)
441442**No line numbers in the summary.** Write in human words, not technical jargon. Example:
443444> "Reviewed the full Aria project (Electron + React). Found 2 critical security issues (hardcoded endpoint exposed to network, missing CSP headers), 5 major architecture problems, and 8 minor code style issues. All critical and major issues fixed and committed. Minor issues left as-is per your decision."
445446### Final Question
447448Ask the user:
449450**What now?**
4511. **Another review** — review a different project or set of files
4522. **Re-review same files** — check if everything is clean after fixes
4533. **Done** — finished, end the review session
454455## Stack Detection (Step 0 — before analysis)
456457Detect the project's tech stack before applying any checklist. This determines which severity items and checklist sections are relevant.
458459| File Found | Stack | Checklist Focus |
460|---|---|---|
461| `package.json` with `"react"` | React/Next.js | React-specific + Universal |
462| `package.json` with `"vue"` | Vue/Nuxt | Vue-specific + Universal |
463| `package.json` with `"svelte"` | Svelte/SvelteKit | Svelte-specific + Universal |
464| `package.json` with `"@angular"` | Angular | Angular-specific + Universal |
465| `requirements.txt` / `pyproject.toml` with `django` | Python (Django) | Python (Django) + Universal |
466| `requirements.txt` / `pyproject.toml` with `fastapi` | Python (FastAPI) | Python (FastAPI) + Universal |
467| `requirements.txt` / `pyproject.toml` (no django/fastapi) | Python (generic) | Universal only |
468| `go.mod` | Go | Go-specific + Universal |
469| `Cargo.toml` | Rust | Rust-specific + Universal |
470| `composer.json` | PHP/Laravel | PHP-specific + Universal |
471| `pom.xml` / `build.gradle` | Java/Kotlin | JVM-specific + Universal |
472| `*.csproj` / `*.sln` | C#/.NET | .NET-specific + Universal |
473| `pubspec.yaml` | Flutter/Dart | Flutter-specific + Mobile + Universal |
474| `astro.config.*` | Astro | Astro-specific + Universal |
475| `package.json` with `"@remix-run"` | Remix | Remix-specific + Universal |
476| `package.json` with `"solid-js"` | SolidJS | Solid-specific + Universal |
477| `package.json` with `"hono"` | Hono | Hono-specific + Universal |
478| `Gemfile` with `rails` | Ruby/Rails | Rails-specific + Universal |
479| `mix.exs` | Elixir/Phoenix | Elixir-specific + Universal |
480| `CMakeLists.txt` / `*.cpp` + `Makefile` | C/C++ | C/C++-specific + Universal |
481| `Package.swift` / `*.xcodeproj` | Swift/iOS | Swift-specific + Mobile + Universal |
482| `build.gradle.kts` with `kotlin` | Kotlin (native/multiplatform) | Kotlin-specific + Universal |
483| `*.html` (standalone, no framework) | Vanilla HTML/JS/CSS | Web standards + Universal |
484| `package.json` with `"react-native"` | React Native | Mobile + Universal |
485| `Assets/` + `ProjectSettings/` + `*.unity` | Unity | Unity-specific + Game + Universal |
486| `*.uproject` | Unreal Engine | Unreal-specific + Game + Universal |
487| `project.godot` | Godot | Godot-specific + Game + Universal |
488| `package.json` with `"phaser"` | Phaser | Phaser-specific + Game + Universal |
489| `package.json` with `"three"` | Three.js | Three.js-specific + Game + Universal |
490| `package.json` with `"pixi.js"` | PixiJS | Phaser/Web 2D-specific + Game + Universal |
491| `package.json` with `"kaplay"` | Kaplay | Phaser/Web 2D-specific + Game + Universal |
492| `Cargo.toml` with `bevy` | Bevy | Bevy-specific + Game + Universal |
493| `conf.lua` + `main.lua` | Love2D | Love2D-specific + Game + Universal |
494| `*.py` with `import pygame` | Pygame | Pygame-specific + Game + Universal |
495| `*.html` with `<canvas>` + game loop (heuristic: `requestAnimationFrame` or `setInterval` with update/draw pattern) | Web Canvas Game | Game + Web standards + Universal |
496| No recognizable config | Ask user | — |
497498**Important:** Only apply stack-specific items when that stack is detected. A Python API does not get React checklist items. A vanilla HTML game does not get Next.js items.
499500**Multi-stack projects:** If multiple config files are detected (e.g., `package.json` + `pyproject.toml` in a monorepo), apply ALL matching stack-specific checklists. Review each sub-project against its own stack.
501502## Input Handling
503504**Context Awareness:** Check for framework config files (package.json, pyproject.toml, go.mod, etc.) to detect versions. Flag outdated framework versions (2+ major versions behind current stable). (Exception: game engines — LTS versions are standard; only flag end-of-life or unsupported versions.) Check current stable version of the detected framework using available tools or training knowledge — flag anything 2+ major versions behind; if unable to verify, state the assumption.
505506**Files/Folders:**
507- Single file: Read it
508- Multiple files:
509 - Glob: Use pattern appropriate to detected stack. Default: `**/*.{js,ts,jsx,tsx,vue,svelte,astro,html,css,py,go,rs,java,kt,php,rb,cs,dart,swift,ex,exs,cpp,hpp,c,h,erl,gd,tscn,tres,unity,uproject,lua}`
510 - Prioritize: 1) Config files (package.json, pyproject.toml, go.mod, etc.) 2) Entry points 3) Core logic
511 - Max 30 files: If more, analyze entry points + configs only
512 - Monorepos: If >3 config files detected at different paths, treat as multi-project. Analyze workspace root config + one entry point per sub-project. Distribute the 30-file limit proportionally. When user specifies a sub-project, focus on that one.
513- Images: Use Read tool to analyze screenshots/mockups for colors, contrast, typography, spacing, layout issues. Supports PNG, JPG, WebP. If no image provided, skip.
514515## Reference Loading
516517**STEP 1: Locate Skill Directory**
518- Try reading from skill installation path: `./references/[file]`
519- Check your AI tool's skill/plugin directory for the `references/` folder (e.g., `~/.claude/skills/brutal-honest/references/`, project-level `.agents/skills/brutal-honest/references/`, or equivalent)
520521**STEP 2: Attempt to Load (in order)**
5221. `references/severity-guide.md` → If NOT FOUND, use "Embedded Severity Guide" below
5232. `references/checklists.md` → If NOT FOUND, use "Embedded Checklists" below
5243. `references/ui-patterns.md` → If NOT FOUND, use "Embedded UI Patterns" below
525526**STEP 3: If files found, external overrides embedded; fill gaps with embedded defaults**
527- External files OVERRIDE embedded defaults (for customization)
528- If external incomplete, fill gaps with embedded
529530---
531532## Embedded Severity Guide (Fallback)
533534> These embedded sections are fallbacks only. If you have the `references/` folder installed, the external files take priority and these are ignored.
535536Use this if `references/severity-guide.md` not found.
537538### CRITICAL - Fix yesterday
539- **AI vulnerabilities** — Prompt injection (user input reaches LLM unsanitized), AI tools with DELETE permissions without confirmation, auth tokens in AI conversation logs
540- **Security** — Hardcoded secrets, SQL injection, XSS, CSRF without protection, no input validation at system boundaries
541- **Accessibility** — WCAG 2.2 violations = legal risk
542- **Stability** — Crashes, infinite loops, memory leaks, unhandled exceptions in critical paths
543- **Data loss** — No backups, no transaction safety, destructive operations without confirmation
544- **Soft-lock** — Player cannot progress and cannot load a prior save (game projects)
545- **Save corruption** — Save data can be lost or corrupted without detection/recovery (game projects)
546- **Determinism failure** — Desyncs in multiplayer from non-deterministic simulation (multiplayer games)
547548### MAJOR - Ship blocker
549- **Outdated framework** — Using a version 2+ major versions behind current stable release (check against latest stable, not a hardcoded version number; for game engines: locking to an LTS version is standard; flag only if engine version is end-of-life or unsupported)
550- **Architecture** — 2000+ line files without clear section separation (unless architecturally intentional, e.g., single-file apps, embeddable widgets, Go's copy-over-dependency idiom), God objects/functions, circular dependencies
551- **Type safety** — No strict mode (where language supports it), `any`/`object`/`interface{}` everywhere at boundaries
552- **UX** — No loading states, broken mobile/responsive, no error feedback to users
553- **AI Architecture** — Client-side LLM calls instead of server-side (exposes API keys)
554- **Framework-specific rendering errors** — Hydration mismatches (SSR frameworks), template compilation errors, runtime binding failures
555- **Missing error handling** — No try/catch in async operations, silent failures, unhandled promise rejections / panics / exceptions
556- **No object pooling** — Frequently spawned objects (bullets, particles, enemies) allocated/destroyed per frame causing GC pauses (game projects)
557- **Wrong update loop** — Physics in render loop or rendering in physics loop, causing frame-rate-dependent behavior (game projects)
558- **No frame budget discipline** — No profiling, no performance targets, frame time exceeds 16.6ms in core gameplay (game projects)
559- **No worker offloading** — Heavy simulation running on main thread blocking rendering; use Web Worker for game logic, transferable ArrayBuffers for data (web game projects with large entity counts)
560561### MEDIUM - Code review nightmare
562- **Not using framework idioms** — Not leveraging the framework's recommended patterns and latest stable features
563- **Performance** — No image/asset optimization, missing lazy loading, no caching strategy
564- **Missing tests** — No unit tests, no integration tests for critical paths
565- **No CI/CD** — No automated builds, no linting on PR, manual deployments (lower priority for solo/indie/game jam projects)
566- **State management** — Prop drilling / global mutation / spaghetti state where framework provides better patterns (game singletons like GameManager/AudioManager are standard architecture, not spaghetti)
567- **AI-generated aesthetic** — Generic design with no brand identity: purple gradients, single sans-serif font, three-column icon grids, uniform rounded corners, 0.1 opacity shadows on everything (web projects)
568- **Missing keyboard navigation** — No keyboard shortcuts for power users (where applicable)
569- **No monitoring** — No error tracking, no performance monitoring, no logging strategy
570- **No input rebinding** — Hardcoded controls with no remapping option (game projects — accessibility baseline)
571- **No game accessibility** — Missing colorblind mode, subtitles, or difficulty options (game projects — 2026 baseline)
572- **No spatial partitioning** — Brute-force collision detection with many entities, no quadtree/octree/spatial hash (game projects)
573574### MINOR - Nitpick, but fix it
575- **Inconsistent code style** — Mixed formatting, naming conventions, quote styles within the same file
576- **Missing documentation** — Public APIs / exported functions without types or docs
577- **Debug code in production** — console.log, print(), debug flags, TODO comments left in shipped code
578- **Non-semantic markup** — div soup, inline styles (web projects)
579- **Inconsistent naming** — Mixed camelCase/snake_case, unclear variable names
580- **Audio mixing issues** — No separate volume controls for music/SFX/dialogue, or sound clipping from too many simultaneous voices (game projects)
581582---
583584## Embedded Checklists (Fallback)
585586Use this if `references/checklists.md` not found.
587588### Universal Checklist (applies to ALL projects)
589590**Security:**
591- [ ] No secrets in code — API keys, tokens, passwords in env vars / secret manager only
592- [ ] Input validation — Validate at system boundaries (user input, external APIs, file uploads)
593- [ ] Injection prevention — ORM / parameterized queries / sanitized output (SQL, XSS, command injection)
594- [ ] Dependency audit clean — No known CVEs
595- [ ] CSRF protection — Anti-forgery tokens or SameSite cookies (web apps)
596- [ ] Auth best practice — OAuth 2.1, OIDC, or framework-recommended auth patterns
597- [ ] AI security (if applicable) — Prompt injection prevention, LLM output sanitization, AI tool permissions gated
598599**Performance:**
600- [ ] Appropriate for platform — Web: Core Web Vitals (LCP ≤2.5s, INP ≤200ms, CLS ≤0.1) | Games: 60fps (16.6ms frame budget), consistent frame pacing | Mobile: startup <2s | API: p95 <200ms
601- [ ] Asset optimization — Images (modern formats), fonts (font-display: swap), bundle sizes appropriate for target
602- [ ] Caching strategy — HTTP caching, application-level caching, CDN where appropriate
603- [ ] Lazy loading — Below-fold content, heavy dependencies, routes/pages loaded on demand (not applicable to games)
604- [ ] No unnecessary computation — Database queries optimized, N+1 queries eliminated, pagination for large datasets
605606**Architecture:**
607- [ ] Separation of concerns — No God objects/functions, clear module boundaries
608- [ ] Clean dependency graph — No circular dependencies, clear import direction
609- [ ] DRY without over-abstraction — Repeated code extracted, but no premature abstraction
610- [ ] Error handling — Graceful failures, user-facing error messages, structured logging
611- [ ] Configuration management — Environment-specific config separated from code
612- [ ] Database patterns — Connection pooling, migrations versioned, proper ORM usage (if applicable)
613614**Testing:**
615- [ ] Unit tests — Core business logic covered with meaningful assertions
616- [ ] Integration tests — Critical paths tested (API endpoints, database operations, auth flows)
617- [ ] E2E tests — Key user flows covered (where applicable)
618- [ ] Test isolation — Tests don't depend on external services or shared state
619- [ ] Coverage strategy — Coverage thresholds defined for critical modules (not vanity 100%)
620- [ ] Mocking boundaries — External services mocked at integration boundary, not deep internals
621- [ ] Test naming — Test names describe behavior, not implementation
622623**CI/CD:**
624- [ ] Automated builds — Build runs on every PR
625- [ ] Linting/formatting — Enforced in CI, not just local
626- [ ] Tests run on PR — Failing tests block merge
627- [ ] Deployment strategy — Automated deploy with rollback capability
628629**Accessibility (web/mobile):**
630- [ ] WCAG 2.2 compliance — Focus rings, keyboard navigation, screen reader support
631- [ ] Semantic markup — Correct elements for their purpose (button not div, nav not div, etc.)
632- [ ] ARIA labels — Interactive elements accessible, landmarks defined
633- [ ] Color contrast — 4.5:1 minimum for normal text, 3:1 for large text
634- [ ] Reduced motion — Respect prefers-reduced-motion
635- [ ] Focus management — Focus trap in modals, return focus on close
636637### Stack-Specific (applied ONLY when detected)
638639**React/Next.js:** RSC usage, Server Actions, React 19+ hooks (useActionState, useOptimistic), PPR, App Router patterns, error.tsx + loading.tsx
640**Vue/Nuxt:** Composition API, auto-imports, Nuxt 4 patterns, defineModel, Pinia stores
641**Svelte/SvelteKit:** Runes ($state, $derived, $effect), $props() for component props, server load functions, form actions
642**Angular:** Signals, standalone components, zoneless change detection, control flow (@if, @for)
643**Python:** Type hints (3.13+), async patterns (Django, FastAPI), proper ORM usage, virtual environments
644**Go:** Error handling patterns (errors.Is/As), goroutine management, interfaces, go vet/staticcheck
645**Rust:** Ownership patterns, error handling (Result/Option), unsafe audit, clippy clean
646**PHP/Laravel:** Eloquent patterns, middleware, queue patterns, Laravel 12 features
647**Astro:** Content Collections, island architecture, zero-JS by default, View Transitions
648**Remix:** Loaders/actions, nested routes, progressive enhancement, error boundaries
649**SolidJS:** Fine-grained signals, no virtual DOM, createResource, JSX without re-renders
650**Hono:** Web Standards (Request/Response), middleware chains, edge-first, multi-runtime
651**Ruby/Rails:** Active Record patterns, concerns, Hotwire/Turbo, N+1 prevention, Rails 8 conventions
652**Elixir/Phoenix:** OTP/GenServer patterns, LiveView, fault tolerance, supervision trees
653**C/C++:** RAII, smart pointers, memory safety, modern C++20/23, no raw new/delete
654**Swift:** Structured concurrency (async/await, actors), protocol-oriented design, SwiftUI vs UIKit
655**Kotlin:** Coroutines, null safety, multiplatform patterns, sealed classes, Flow
656**Java / Kotlin (JVM):** Spring Boot dependency injection, JPA/Hibernate entity mapping, N+1 prevention, modern Java (records, sealed classes, virtual threads), JUnit 5 + Mockito
657**C# / .NET:** Project architecture (web API / Blazor / WPF / MAUI), Entity Framework Core with migrations, async/await with cancellation tokens, nullable reference types enabled, dependency injection lifetimes
658**Vanilla HTML/JS/CSS:** Progressive enhancement, semantic HTML, no-build patterns, Web Standards
659**Mobile (React Native / Flutter / SwiftUI):** Platform conventions (iOS HIG / Material Design), framework navigation, appropriate state management, 60fps scrolling, VoiceOver/TalkBack support
660**Unity:** Game loop separation (FixedUpdate/Update), object pooling, DOTS/ECS for data-heavy systems, Addressables, draw call batching
661**Unreal Engine:** UPROPERTY/UFUNCTION macros, Blueprint vs C++ separation, Nanite/Lumen usage, PCG framework, actor lifecycle
662**Godot:** Process separation (_physics_process/_process), signal patterns, Jolt physics (4.6+), @export variables, scene composition
663**Phaser/Web 2D:** Scene lifecycle, sprite batching via texture atlases, audio context gesture handling, object pooling, WebGL context management
664**Three.js/Web 3D:** WebGPU with WebGL 2 fallback, InstancedMesh for repeated geometry, dispose() for GPU memory, frame budget with delta time, frustum culling + LOD
665**Bevy:** ECS architecture, Required Components (0.15+), AssetServer loading, plugin architecture, system scheduling with .before()/.after()
666**Pygame/Love2D:** Fixed timestep game loop, assets loaded once at init, input abstraction with rebinding, no per-frame allocations, game state machine
667**Web Canvas Game:** Worker thread offloading (sim in Worker, render on main), zero-copy ArrayBuffer transfer, TypedArray hot data (Int32Array/Float32Array for counters and spatial indices), adaptive quality auto-tuning, GC-free hot path (ring buffers, object pooling, swap-and-pop, dirty tracking)
668669---
670671## Embedded UI Patterns (Fallback)
672673Use this if `references/ui-patterns.md` not found.
674675### Layout Architecture
676- **Bento Grid (Asymmetric)**: Visual hierarchy through size, not symmetry
677- **View Transitions API**: Same-document (`startViewTransition()`) + cross-document (`@view-transition { navigation: auto; }`)
678- **Anchor Positioning**: CSS `anchor-name` + `position-area` for popovers without JS
679680### Anti-AI-Slop Signals
681- Red flags: purple/indigo gradients, single sans-serif font (Inter/Roboto), three-column icon grids, generic CTAs, uniform rounded corners, 0.1 opacity shadows everywhere
682- Professional signals: intentional font pairing (serif+sans or display+body), semantic color system via CSS custom properties, 8px spacing grid, benefit-driven CTA language, social proof near decision points
683684### Visual Hierarchy
685- **60-30-10 Color Rule**: 60% neutral, 30% primary, 10% accent
686- **Semantic Color System**: CSS custom properties with semantic names (`--text-primary`, `--surface`, `--accent`), `light-dark()` for dark mode, `color-mix
687688…(truncated)
Run npx skillmds add majiayu000/brutal-honest in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Use when user wants honest, evidence-backed code review. Every finding requires file:line proof. Covers security, architecture, performance, UI/UX for 33+ tech stacks. It is listed under Security on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Capability flags: reads secrets. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
majiayu000 (@majiayu000) published this skill. Their other Agent Skills are listed on their SkillMD profile.