deep-review
Skill1 starsChanged 14 days agoMITView on GitHub
Thorough post-implementation review of the work done in this branch/session, in any repo, done twice by default: your own pass plus an independent reviewer agent running in parallel (skipped only when the user says so). Compares the changes against the plan and the ticket/story requirements, hunts bugs and regressions in existing code, checks the edge cases /deep-test and /deep-ui-test covered have tests (without generating its own edge-case sweep), checks code quality and unnecessary complexity, verifies unit and e2e tests exist, are meaningful and pass, runs formatter/linter/typecheck and fixes their issues, checks docs are updated, then fixes every straightforward issue itself and asks the user about the rest with recommended options. Use whenever the user invokes /deep-review, or asks to "review everything we've done", "compare to the plan", "check we didn't break anything", "make sure requirements are met", "check tests and lint", or wraps up an implementation and wants it verified before a PR.
44 other projects use a version of this.
Adopted by
Most recently taken up by
- anorth/agent-skillstheir own version, first seen Nov 8, 2026
- daytona/clientstheir own version, first seen Nov 8, 2026
- compozy/compozytheir own version, first seen Nov 7, 2026
- lobehub/lobehubtheir own version, first seen Nov 5, 2026
- MagicJosh/rastheir own version, first seen Nov 2, 2026
- edxleon/runspectortheir own version, first seen Nov 1, 2026
Used with
Projects with it also use react, testing-strategy and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
VercelSkillreact
React renderer for json-render that turns JSON specs into React components. Use when working with @json-render/react, building React UIs from JSON, creating component catalogs, or rendering AI-generated specs.
Also in 3 projects that use this
BlockSkilltesting-strategy
Guidelines for writing effective tests in this project
Also in 3 projects that use this
SentrySkilldeslop
Strip AI-generated noise from the diff before pushing — extra comments a human wouldn't write, defensive try/catch in trusted code paths, casts to any, inline imports in Python, and other style inconsistencies with the surrounding file. Use this immediately before commit so the diff stays clean.
Also in 3 projects that use this
SentrySkillreview
Fixture review skill.
Also in 5 projects that use this
AnthropicSkilldebug
Structured debugging session — reproduce, isolate, diagnose, and fix. Trigger with an error message or stack trace, "this works in staging but not prod", "something broke after the deploy", or when behavior diverges from expected and the cause isn't obvious.
Also in 3 projects that use this
NVIDIASkilltesting
Run Python and Rust tests for physicsnemo-curator using uv + pytest with coverage reporting via pytest-cov, and cargo-nextest for Rust tests. Includes benchmark workflows with pytest-benchmark and criterion.
Also in 3 projects that use this
- +1 more from getsentry
Other versions44 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 44
- lobehub/lobe-chat★ 84ksame name
- lobehub/lobehub★ 84ksame name
- dyad-sh/dyad★ 22ksame name
- coder/coder★ 17ksame name
- tikv/tikv★ 17ksame name
- apache/cassandra★ 10ksame name
- gitkraken/vscode-gitlens★ 10ksame name
- compozy/compozy★ 2.9ksame name
- pedronauck/skills★ 649same name
- microsoft/regorus★ 367same name
34 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- deep-featureSkill
- deep-planSkill
- deep-pr-commentsSkill
- deep-shipSkill
- deep-testSkill
- deep-ui-testSkill
- deep-uxSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 7 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 38 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 15
Did we build what was asked?: Every requirement of the story/plan is implemented and nothing unrequested slipped in.
- Distinctive: line 16
Is it correct?: No bugs or unhandled edge cases in the new code.
- Distinctive: line 19
Is it clean and documented?: No unnecessary complexity, matches repo conventions, docs are current.
- Very specific: line 23
Repo instructions win: Read CLAUDE.md / AGENTS.md / CONTRIBUTING.md / docs index first.
- Distinctive: line 26
Report reality: Test, lint and build results are the actual output of commands you ran.
- Very specific: line 76
Coverage against the plan: every planned test exists, and every requirement and handled edge case has a test that would fail if it broke.
- Distinctive: line 90
Test documentation matches the tests that actually exist.
- Distinctive: line 108
After fixing, review the fixes themselves (they can introduce new problems) and re-run the affected tests, lint, typecheck and build.
- Distinctive: line 116
When the user answers, apply the decisions, re-run the checks they affect, and post a short delta report rather than the whole report again.
- Very specific: line 130
Before acting, echo a compact mapping (Q1 → A: <short>, Q3 → <free text, short>) so a misread is caught at once.
“Common” is measured: kept by at least 6 in 10 of the 38 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Deep Review
A full review of the implementation just done, the way a careful senior reviewer would do it before approving a PR, followed by fixing what can be fixed without the user and a clear list of what needs their decision.
It runs after /deep-test and /deep-ui-test in the deep-* flow; references/workflow.md describes the flow and the work doc this review reads and writes.
The review answers five questions, in this order of importance:
- Did we build what was asked? Every requirement of the story/plan is implemented and nothing unrequested slipped in.
- Is it correct? No bugs or unhandled edge cases in the new code.
- Did we break anything? Existing behavior in every caller, screen and mode still works.
- Is it proven? Meaningful tests cover the requirements and edge cases, and the full relevant suites, lint, format and typecheck pass.
- Is it clean and documented? No unnecessary complexity, matches repo conventions, docs are current.
Ground rules
- Repo instructions win. Read
CLAUDE.md/AGENTS.md/CONTRIBUTING.md/ docs index first. Their rules are review criteria (a violated repo rule is a finding), and their conventions (output style, commands, doc locations, commit policy) override this skill. - Verify every finding before reporting it. Re-read the code around it, check callers, and try to disprove it. A reviewer who reports false positives wastes the user's attention and gets ignored. Mark anything you couldn't fully confirm as "plausible" rather than stating it as fact.
- Stay inside the change. Review the diff and its blast radius. Don't reformat, refactor, or lint-fix code the change didn't touch; list pre-existing problems separately as out-of-scope observations.
- Report reality. Test, lint and build results are the actual output of commands you ran. If something couldn't be run, say so and why. Never weaken a test, skip it, add a lint-disable, or loosen a type to get green.
- No commits or pushes unless the repo's working agreement or the user says so.
- Two reviewers by default. Every review has two passes: your own, and an independent reviewer agent started in parallel with only the scope and the reference, never your conclusions (Phase 1b). A single reviewer anchored on its own reading keeps missing what an outside reviewer (e.g. Copilot) then finds. Skip the second pass only when the user says so ("quick review", "no agent", "just you"), and say in the report that it was skipped.
Workflow
Phase 1 — Establish scope and the reference
- The diff. Find the base: the branch this work will merge into (from the repo's conventions, the PR target, or
git merge-basewith the default/development branch). Reviewgit diff <base>...HEADplus uncommitted and untracked changes. List every changed file. If the scope is ambiguous (e.g. the branch contains unrelated earlier commits), state what you're reviewing and why. - Scoped rounds aren't enough on their own. A round asked for one delta (e.g. "only the UX changes") reviews that delta in full, and also re-reads the rest of the branch for interactions with it (Phase 3b). The last review before the PR is marked ready, or before
/deep-shipafter several scoped rounds, covers the whole branch against the base, including the user's own commits and earlier review fixes: bugs from later fixes meeting earlier work are only visible there. - The reference. Collect what the work is supposed to do: the plan (from this conversation, a plan file, or a
/deep-planoutput), the ticket/story with its acceptance criteria and comments (fetch it if a ref is in the branch name, commits or conversation), designs, and any answers the user gave during planning. Read the work doc first: its plan, decisions, and the "Unit test pass" / "UI test pass" / "UX review" sections are part of the reference. If there is no plan and no ticket, reconstruct the intent from commit messages and the conversation and say that's what you did. - The checks. Find the repo's test, lint, format, typecheck and build commands (see
references/checks.md).
Phase 1b — Start the independent reviewer
Right after Phase 1, launch one background subagent (the general-purpose type, same model) as an independent reviewer, then continue with your own pass while it runs. Brief it with references/independent-reviewer.md: the repo path, base branch, the exact scope (diff + untracked files), where the plan/ticket/decisions live, the repo rules files, and the checklist; ask for findings with a concrete trigger each, written to a scratch file and returned as a compact list. Don't pass your own findings or suspicions; an anchored second reviewer only confirms what you already think.
While it runs, don't edit files in its scope (its file:line references would go stale); do your own Phases 2-8 read-only, then wait for it before Phase 9. If it fails or times out, say so in the report and continue with your own findings.
Phase 2 — Requirements and plan conformance
Build a traceability table: each requirement (R#) or acceptance criterion → where it's implemented (file:line) → which test proves it → status (done / partial / missing / untested).
Then compare the plan to the diff:
- Planned changes that didn't happen.
- Changes that weren't planned: justified deviations (note why) vs scope creep (candidate for removal).
- Answers the user gave during planning: check each one is reflected in the code.
- Edge cases the plan said it would handle: check each one actually is.
Phase 3 — Correctness
Read every changed hunk with its surrounding context, not the diff alone; many bugs are only visible next to the unchanged code. Walk references/review-checklist.md sections 1-3 against the change. For each potential issue, trace the concrete input or state that would trigger it. If you can't name one, it's probably not a real bug.
Generating edge cases belongs to /deep-test (logic) and /deep-ui-test (browser); don't build a second sweep here. If they ran, check their case lists cover every changed unit and every R#, and that each kept case has its test. If they didn't run (or the code changed since), say so in the report and recommend running them, scoped to what's missing.
Phase 3b — Interactions between decisions
Each decision, fix and feature can be right on its own and wrong together, especially when they were made in different rounds (planning, review fixes, UX answers, the user's own commits). List them from the work doc's Decisions and the commit log, with the UI element or state each one touches (a header, a count, a card, a tooltip, a sort, a mode). For every pair that touches the same element, ask: when both apply at once, does the user still see something true and reachable? Typical misses: an "order stays" decision next to a sort indicator that still claims a sort; a popover that flips sides next to a tooltip forced to one side; "show a summary only when there's no link" next to "opens on keyboard focus" in a mode with nothing focusable. Each pair that breaks is a finding with its trigger.
Phase 4 — Regressions in existing code
For every changed symbol (function, component input, style, shared util, API call, type, config key), find all its callers and consumers using the best tool available (code graph/LSP, else grep). Check each one still behaves correctly, including in every mode/context the code runs in (roles, public/shared/export, feature flags, mobile/desktop, locales). Check that tests touching these callers still pass and still assert what they used to (an existing test silently changed to match new behavior is a regression hiding in plain sight). Section 4 of the checklist lists what to look for.
Phase 5 — Code quality and simplicity
Walk checklist sections 5-6. The central question: would a senior engineer on this repo say this is overcomplicated, or that it doesn't look like the rest of the codebase? Look for unnecessary abstractions, duplicated logic that an existing utility already covers, dead code and orphans the change created, leftover debug code, unclear naming, comments that restate code, and violations of the repo's own rules.
Phase 6 — Tests
- Coverage against the plan: every planned test exists, and every requirement and handled edge case has a test that would fail if it broke. Reuse the test audits from
/deep-testand/deep-ui-test(verdicts, mutation checks) instead of redoing them; re-check only tests changed since. - Quality: tests assert behavior, not implementation; deterministic; meaningful names; no
.only/fit/fdescribe/skip/xitleft behind; no assertions weakened compared to the base branch. For each important test, do the thought experiment: if the line it protects were reverted or subtly broken, would this test fail? If not, the test isn't doing its job. - Run them: new and changed tests first, then the wider relevant suite, then e2e if the plan or repo calls for it. If e2e can't run here (missing backend, env, browser), say exactly what's needed and what the user should run.
- Existing tests updated correctly: changes to existing tests match intended behavior changes, not accommodations of a regression.
Phase 7 — Lint, format, types, build
Run the repo's formatter check, linter, typecheck and build per references/checks.md, scoped to changed files where the tool allows it, so fixes don't sprawl into unrelated code. Fix errors and warnings in lines the change touched. For warnings in untouched code within changed files, list them and ask rather than fixing (they'd add unrelated noise to the diff), unless the repo's rules say otherwise. Re-run after fixing until clean.
Phase 8 — Docs
- Docs the repo expects for this kind of change exist and are current (feature write-ups, docs index, README, API docs, changelog, test documentation).
- Docs that the change made stale are updated (a fixed backlog item, a changed behavior, a closed known gap).
- New user-facing strings exist in every locale the repo supports.
- Test documentation matches the tests that actually exist.
Phase 9 — Triage and fix
Merge the two passes first: deduplicate, then verify every independent-reviewer finding in the code yourself exactly as you verify your own (ground rule 2). Its findings are claims, not facts: confirm, mark "plausible", or reject with the reason. Reproduce UI findings in the running app when that settles them faster than reading.
Sort every confirmed finding:
Fix now, without asking, when all of these hold:
- there's one clearly correct fix, and it's small;
- it's inside the change's scope (code this work added or modified);
- it doesn't change product behavior the user decided, public contracts, or shared code outside the change;
- it doesn't delete or weaken tests.
Typical examples: lint/format/type errors in changed lines, a missed null guard with obvious handling, a leftover debug statement, an orphaned import, a missing translation key with the copy already known, a test the plan specified but that wasn't written, a stale doc line.
Ask the user for anything else: product/UX choices, several valid fixes with different tradeoffs, changes to shared or unrelated code, contract or schema changes, removing work that looks like scope creep, pre-existing problems, anything risky.
After fixing, review the fixes themselves (they can introduce new problems) and re-run the affected tests, lint, typecheck and build. Keep fixing and re-running until they pass, or until a remaining failure needs the user's input.
Phase 10 — Report
Use references/report-template.md. Lead with a one-line verdict (ready for PR / ready after the open items / not ready). Questions for the user follow the same format as /deep-plan: numbered (Q1, Q2, ...), context with file refs, options A / B / C with the recommended option first, marked (Recommended) with a reason.
Record the review in the work doc ("Review" section, dated round) and set "Resume here" to the next step (/deep-ship when ready).
When the user answers, apply the decisions, re-run the checks they affect, and post a short delta report rather than the whole report again. Repeat until nothing is open.
Reading the user's answers
The user usually answers as a plain numbered list, one line per question:
1. answer
2. another answerN.answers QN of the most recent message that asked questions. That's why every message that asks questions numbers them from Q1, in one sequence.- Accept any answer form: a letter ("B"), a letter with a tweak ("A, but keep the old label"), "ok" / "yes" / "recommended" (the recommended option), or free text. Free text that matches no option is the answer; don't force it into one.
- A missing number leaves that question open. Ask again only about the unanswered ones.
- Before acting, echo a compact mapping (
Q1 → A: <short>,Q3 → <free text, short>) so a misread is caught at once. If an answer doesn't fit its question (the list looks shifted, or it answers a different question), ask instead of guessing. - Record every answer in the delta report under a Decisions list with the question's short title, so answers survive context compaction and later rounds can refer to them.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

