Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill code-review명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
| Use when this capability is needed.
> Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | code-review |
| description | > Use when this capability is needed. |
A good code review is not a style guide check — it is an act of professional responsibility. Your job is to catch the things that escape linters and unit tests: design violations that will haunt the codebase for years, reliability gaps that will wake someone up at 3 AM, and security flaws that will become breach headlines. It is also an act of communication — comments should be objective, specific, and kind.
Read for intent first. Before looking for problems, understand what the code is trying to do. A misunderstood patch produces shallow feedback.
Prioritize by severity. Lead with blockers, then architectural concerns, then style. Don't bury critical findings under minor comments.
Be specific. Point to the line or pattern. Explain why it matters, not just that it's wrong. If there's a better approach, show it.
Distinguish blocking from advisory. Mark every finding clearly:
needs change: or needs rework:)align:)level up:)Focus on the code, not the author. Use "we" not "you." Ask, don't command.
See references/comment-patterns.md for the full comment-writing framework.
Before reviewing a line of code, understand what you're looking at.
From the PR / change itself:
From the repository:
Repo convention rule: Changes should follow existing patterns unless the existing pattern is outdated, violates idiomatic language conventions, has a known security risk, or a clearly superior modern approach exists. When recommending a departure, say so explicitly and explain why.
Before reviewing any code, verify the diff actually does what was asked — nothing more, nothing less. This step is informational: findings don't block the review, but they are reported first so the submitter can address them before iterating on the detail feedback.
1. Identify stated intent.
Gather the stated intent from whichever sources are available:
gh pr view --json body --jq .body 2>/dev/null or equivalent)git log <base>..HEAD --oneline)TODOS.md or a linked ticket if presentSummarise the intent in one sentence. If none of these sources exist, note that and skip to Step 3 — there is nothing to compare against.
2. Identify what the diff actually does.
Run git diff <base>...HEAD --stat and scan the changed file list. What areas of the
codebase are touched? What is the net effect?
3. Compare and classify.
| Finding | Definition |
|---|---|
| SCOPE CREEP | Files or behaviour changed that are unrelated to the stated intent — "while I was in there" changes that expand blast radius without being asked for |
| REQUIREMENTS MISSING | Items from the PR description, ticket, or TODOS.md that the diff does not address — partial implementations or stated acceptance criteria not met |
| CLEAN | Diff matches stated intent; nothing missing, nothing extra |
4. Output before the main review begins:
Scope Check: [CLEAN / SCOPE CREEP / REQUIREMENTS MISSING / BOTH]
Intent: <one sentence — what was asked for>
Delivered: <one sentence — what the diff actually does>
Scope creep:
- <file or behaviour> — unrelated to stated intent because <reason>
Requirements missing:
- <requirement from PR/ticket/TODOS> — not addressed in the diff
Omit sections that don't apply. If CLEAN, a single line is sufficient.
Before applying the lenses below, work through the code in three passes. This prevents premature conclusions and ensures you review your own comments before the submitter sees them.
Pass 1 — Line by line. Read each file and changed line carefully. Note potential issues as you go: naming, correctness, patterns that look off. Don't filter yourself yet — just collect. If something is unclear, leave a placeholder question rather than assuming; the next pass may answer it.
Pass 2 — Big picture. Step back and look at how the changes fit together. Do you understand how all the changed files relate to each other? Does the architecture make sense at this scope? Are there interactions between components that weren't obvious line by line? This is the right moment to evaluate lenses that require systemic thinking — domain model integrity, reliability boundaries, security posture across the whole change.
Pass 3 — Review your own comments. Before submitting, re-read every comment from the submitter's perspective. Is each one clear? Is the severity label right? Did you back every suggestion with a reason? Did a later finding answer a question you flagged earlier? This pass is where you catch tone problems, redundant comments, and findings you can consolidate or drop.
Spawn the following specialist agents in parallel using the Agent tool. Give each agent the same diff and a reference to its checklist file. Collect their findings before writing the final report.
Testing checklist (references/testing.md) — always run.
Checks for: negative-path test gaps, edge-case coverage (zero/null/boundary/Unicode), test
isolation violations, flaky patterns, and missing security enforcement tests.
Red-team checklist (references/red-team.md) — run when diff > 200 lines, or when
significant security or reliability findings were identified during the lens review.
Adversarial analysis: attacking the happy path under load/concurrency, hunting silent failures,
exploiting trust assumptions, breaking edge cases, and finding cross-category issues the other
lenses missed.
Each specialist returns a numbered findings list with severity and suggested fix, or a "no issues found" statement. Incorporate their output into the appropriate severity buckets (🔴 Blockers, 🟡 Should Fix, 🔵 Consider) in the final report.
Work through each lens. Not all apply to every PR — use judgment.
Applies when: the code models a business domain — entities, aggregates, services, repositories, events.
Read references/domain-model.md for the full checklist. Key signals to watch for inline:
userData instead of Customer signals the model hasn't captured the domain.When to comment vs. when to escalate: Boundary violations and cross-cutting architectural
concerns are often too large to resolve inside a PR review thread. If a finding touches the
fundamental design of the system — not just this specific change — flag it with needs rework:
and suggest moving the conversation offline (a design doc, Slack, or a dedicated meeting).
Blocking a PR on an architectural debate the team hasn't had yet is unfair to the submitter and
unlikely to produce a good outcome in a comment thread.
Applies when: the code runs in production, handles I/O, calls external services, or is part of a distributed system.
Read references/reliability.md for the full checklist. Key signals to watch for inline:
Applies when: the code handles user input, calls a database, renders output, or manages authentication/sessions.
See references/security-checklist.md for the full OWASP-based checklist with Go and Rust
language-specific patterns. Critical checks inline:
Input validation and injection:
Authentication:
Authorization:
Cryptography and secrets:
Applies when: the code adds dependencies, modifies build configuration, or touches CI/CD pipelines.
Dependency provenance:
govulncheck ./...; ensure go.sum is committed.cargo audit; use cargo deny for policy enforcement; confirm Cargo.lock is
committed for binaries.npm audit, pip-audit, bundle audit, trivy.Build pipeline security:
AI-generated code:
Applies when: the code handles authentication, authorization, tokens, sessions, service accounts, API keys, or credentials.
JWT and token handling:
alg: none (no signature verification) is a critical vulnerability.
Validate the algorithm field against an explicit allowlist.exp claims. Tokens without expiry are permanent credentials.OAuth 2.0 / OIDC:
state parameter must be cryptographically random, tied to the user's session, and validated
on callback. Missing state enables CSRF against the OAuth flow.Non-human identities (service accounts, API keys, machine tokens):
Least privilege and authorization models:
Session management:
Applies to all code changes.
Correctness and logic:
case/switch/if-elsif
chains for unhandled fall-through to a wrong default; (3) check allowlists and arrays of
sibling values (e.g., %w[active pending]) to verify the new value is included where needed.
A new value in a frontend dropdown that the backend doesn't handle is a 🔴 blocker.Readability and maintainability:
Repo pattern adherence:
Tests:
See references/testing.md for the full testing checklist (applied in Step 4). Key signals
to flag inline during the main review:
Documentation:
Formatting and style: Code review is not the place for formatting preferences — that's what linters and formatters are for (ESLint, Prettier, Black, gofmt, rustfmt, etc.). If the repo has a formatter configured, these issues should already be caught in CI before the review even starts. If they aren't, the fix is to configure the tool, not to leave comments. Reserve your attention for things automation cannot catch.
Applies when: the code uses an LLM to generate values that are then stored, acted upon, or forwarded to other systems.
LLM outputs are untrusted data. An LLM can hallucinate emails, URLs, IDs, and structured values that look plausible but are invalid, malformed, or adversarially shaped via prompt injection. Treat LLM output at system boundaries exactly as you treat user input.
URI.parse, .strip, length caps) before persisting.eval() / exec() on LLM-generated code — 🔴 a blocker without sandboxing. LLMs
regularly produce plausible-looking code that contains escapes or shell commands.These items produce noise without actionable value. Skip them during the review.
If the change touches a web application accessible in a browser and browser tools are available:
package.json scripts, Makefile, or ask the user).Include specific observations (and screenshots if possible) in the review report.
Structure every finding using a severity label followed by the Triple-R pattern: Request (what to do) → Rationale (why, with references) → Result (what done looks like).
Severity labels:
needs change: / 🔴 Blocker — correctness, security, data consistency, policy violationneeds rework: — major structural problem; warrants offline discussion before proceedingalign: / 🟡 Should fix — works but violates conventions or strong best practiceslevel up: / 🔵 Consider — non-blocking improvement for a future PRnitpick: — purely subjective; never blocks a PR; use sparinglypraise: — something done genuinely well; use itTone rules: Use "we" not "you." Ask, don't command. Back every suggestion with an objective reason. Focus on the code, not the author.
See references/comment-patterns.md for the full framework: 5P process, Triple-R examples,
MMG Exchange for resolving disagreements, and MoSCoW / Conventional Comments alternatives.
## Code Review
### Summary
[2–3 sentences: overall assessment, most critical theme, and your verdict recommendation]
### 🔴 Blockers
[Findings that must be resolved before merge — security holes, data consistency bugs,
reliability risks. Use Triple-R format with file and line references.]
### 🟡 Should Fix
[Significant concerns that are strongly recommended but not strictly blocking.]
### 🔵 Consider
[Non-blocking suggestions worth thinking about in this or a future PR.]
### Specialist Findings
[Incorporate findings from the testing specialist and red-team specialist here, tagged with
their source. Omit this section if both specialists returned "no issues found."]
### Visual Validation
[Observations from browser-based testing, if applicable.]
### What's Working Well
[At least one genuine praise: — something done well, a clever solution, good coverage, etc.]
### Verdict
[ ] Approved — no changes needed
[ ] Approved with suggestions — non-blocking feedback only
[ ] Changes requested — one or more blockers must be resolved before approval
Before writing up findings, run through this mentally:
Scope — Diff matches stated intent; no unrelated files changed; all stated requirements addressed; no partial implementations left open.
Domain — Ubiquitous language used; single aggregate per transaction; value objects immutable; repositories load complete aggregates; domain events via outbox; bounded context boundaries respected.
Reliability — New paths emit metrics/logs/traces; all failure modes handled; external calls have timeouts and backoff retries; change is safely rollbackable; no new operational toil.
Security — All external inputs validated; no string concat into SQL/commands/HTML; auth uses strong hashing or SSO; authorization checked per-action; TLS everywhere; no hardcoded secrets.
Supply Chain — New dependencies scanned for CVEs; SBOM updated; pipeline changes reviewed; AI-generated code scrutinized; threat model updated for new trust boundaries.
Identity — JWT algorithm validated against allowlist; OAuth redirect URIs allowlisted with state+PKCE; no hardcoded API keys or machine credentials; service accounts follow least privilege; session tokens invalidated server-side on logout.
LLM Trust Boundary — LLM-generated data validated before storage; structured output shape-checked; LLM-generated URLs allowlisted before fetch; no stored prompt injection risk; no unsandboxed eval of LLM code.
Enum Completeness — New enum/status values traced through all consumers; case/switch chains handle the new value without falling through to a wrong default; sibling allowlists updated.
Code Quality — Logic correct and edge cases handled; enum completeness verified; code readable and consistent with repo conventions; DRY; negative-path tests exist; docs updated.
references/comment-patterns.md — Full comment-writing guide: 5P process, Triple-R examples,
Politeness Principles, MMG Exchange, MoSCoW and Conventional Comments systemsreferences/security-checklist.md — Full OWASP security checklist with Go and Rust
language-specific patterns (injection, auth, XSS, IDOR, CSRF, secrets, crypto, etc.)references/domain-model.md — Detailed DDD checklist: aggregates, value objects, repositories,
domain events, bounded contexts, transactionsreferences/reliability.md — Detailed SRE checklist: observability, error handling, resilience
patterns, deployment safety, toil reductionreferences/testing.md — Testing checklist: negative-path gaps, edge-case coverage,
isolation violations, flaky patterns, security enforcement testsreferences/red-team.md — Red-team checklist: adversarial analysis, silent failure hunting,
trust assumption exploitation, cross-category gap findingSource: bmshouse/skillz — distributed by TomeVault.