원클릭으로
critique-code
Critique changed code — find bugs, check conventions, raise design questions
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Critique changed code — find bugs, check conventions, raise design questions
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | critique-code |
| description | Critique changed code — find bugs, check conventions, raise design questions |
| disable-model-invocation | true |
| user-invocable | true |
| allowed-tools | Bash, Read, Glob, Grep, AskUserQuestion |
Critique recent code changes. Find real bugs, check project conventions, and — most importantly — raise thoughtful design questions that surface competing viewpoints and tradeoffs.
This is a thinking partner, not a gatekeeper. The Questions section is always present, even for perfect code. Present alternatives honestly, steelman both sides, and let the developer decide.
If $0 is a git range (e.g. main..HEAD, HEAD~3..HEAD), use it directly and skip the prompt.
Otherwise, ask the user what to critique:
git diff --cached)git diff)git diff HEAD~1..HEAD)Run git diff --stat <range> to get the file list. If the diff exceeds 500 lines, warn the user and suggest breaking the change into smaller commits — but proceed.
Based on file extensions in the diff, activate conditional lenses:
.py files present → activate Python lens.ts or .tsx files present → activate TypeScript/React lens.css files in bristlenose/theme/ present → activate CSS/Theme lensRead the root CLAUDE.md (always). Then read only the CLAUDE.md files relevant to changed paths:
| Changed path prefix | Read |
|---|---|
bristlenose/stages/ | bristlenose/stages/CLAUDE.md |
bristlenose/llm/ | bristlenose/llm/CLAUDE.md |
bristlenose/server/ | bristlenose/server/CLAUDE.md |
bristlenose/theme/ | bristlenose/theme/CLAUDE.md |
frontend/ | frontend/CLAUDE.md |
Do not read all CLAUDE.md files every time — only the relevant ones.
Run git diff <range> to get the full diff content. If you need surrounding context to understand a function signature, type, or import — read that source file.
Output this structure:
# Critique
**Scope:** <summary, e.g. "3 staged files (2 Python, 1 TypeScript)">
## Bugs & Issues
<numbered list, or "None found." if clean>
## Convention Notes
<numbered list, or "All conventions followed." if clean>
## Questions
<numbered list — always present>
file:line — [HIGH/MEDIUM] description. Why it matters. 2–4 sentences max.file:line — what deviates. Ref: which CLAUDE.md, which rule.Python lens (when .py files are in the diff):
analysis/ which uses plain dataclasses)asyncio.Semaphore + asyncio.gather for concurrencyTypeScript/React lens (when .ts/.tsx files are in the diff):
useSyncExternalStore, not Context for shared statestopPropagation on keydown handlers (known bug class in this codebase)<a> or <Link> for clickable navigation, not <div onClick>resetStore() in beforeEach, vi.mock hoisting awarenessCSS/Theme lens (when .css files in bristlenose/theme/ are in the diff):
--bn-* custom properties, never hardcoded valueslight-dark() function, no JS--bn-weight-* tokens, never hardcode@media query commentsBe brief. Each finding or question: 2–4 sentences. The developer is smart and knows the codebase — provide the signal, not an explanation of what the code does. If the change is trivial (typo, version bump) with nothing interesting to say, say "Nothing to flag — trivial change." and stop.
Start work in an ISOLATED git worktree (the exception path — use only when two envs must be live at once, the work is multi-day and main must stay shippable meanwhile, or it's a throwaway spike). Creates the branch + worktree + venv + frontend build + smoke test + BRANCHES.md entry. For ordinary work, use /new-feature (trunk) instead. Any Kind — captured in Step 3.5. The `--from-cloud` flag instead ADOPTS an existing `origin/claude/*` cloud branch (built on phone/cloud, never compiled): fetch → build the Mac env → run the tests the cloud couldn't → preview the merge against main.
End-of-session ritual — verify, document for humans and robots, commit, close out
Ship a release — bump version, finalise changelog/readme, tag, push, and verify PyPI. The ONLY workflow command that touches public distribution (PyPI, Homebrew, the public changelog, the tag). Evening window on weekdays. Supports --dry-run.
Finish a piece of trunk work on main — runs tests + lint, surfaces human-QA checks, trues docs, adds a changelog line, marks the 100days item done, and commits. No merge (you're already on main). If you're on a branch, it offers to close the branch properly instead.
Archive a merged feature branch — stale marker, detach worktree, update BRANCHES.md (preserves local directory)
Start a piece of work on main (trunk — the DEFAULT path). Loads the plan / 100days item, checks recent history, agrees a plan, and records the task. No branch, no worktree, no env setup. For work that needs an isolated live environment, use /new-branch instead.