code-review-gate
Skill400 starsChanged 4 days agoMITView on GitHub
Use when code has been written, before committing, or when merging a PR; also when the user says "review my code", "check before commit", "take a look at this change", "PR review", or asks for a strict review/merge gate.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- ultimatile/development-skillstheir own version, first seen Oct 20, 2026
- TienDat-Vna/BackSpectheir own version, first seen Sep 28, 2026
- wangheng19901021/skillstheir own version, first seen Jul 18, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- wangheng19901021/skills★ 16same name
- TienDat-Vna/BackSpec★ 1same name
- ultimatile/development-skills★ 0same name
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 repositoryOne other file it gives its agents.
- code-review-gate-zhSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. About 0 are common, 10 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 13
Run shell commands from the reviewed project root.
- Very specific: line 52
Use git diff <base> -- to collect staged and unstaged changes.
- Very specific: line 55
Committed range (commits): use the user-specified base/head, and collect the diff with git diff <base> <head> --.
- Distinctive: line 57
When head is omitted, use the current HEAD and review only that commit range.
- Distinctive: line 67
After collecting scope, initialize a new run before dispatching:
- Distinctive: line 76
Use a unique slug for a new review.
- Distinctive: line 77
Never dispatch two runs writing the same directory.
- Very specific: line 79
After a fix or a stale-review result, run snapshot {slug} to update the snapshot, re-run the affected probes, re-render the report, and …
- Very specific: line 82
Read the registry and determine the probe list: Read references/probes.yaml and decide by requires:
- Distinctive: line 91
If dependency source or contract material is already available, pass its path, version, and origin for on-demand reuse.
- Distinctive: line 94
Run in batches when concurrent slots are insufficient.
- Very specific: line 105
Add --branch {branch-coverage} when a branch value exists, or report only that item.
- Very specific: line 107
Aggregation: after all agents finish, the main executor runs the synchronization command.
- Distinctive: line 108
Do not deduplicate across probes yet.
- Distinctive: line 126
Run it even when there are no high findings, explicitly recording the zero result.
- Very specific: line 128
When there are unresolved issues (RECONCILE_PENDING > 0), still deliver the report this round and list the blocking items.
- Very specific: line 129
After follow-up fix tasks complete, re-review the affected parts.
- Distinctive: line 137
Run the following commands to generate the report's facts section from the JSON, validate the display, and obtain the final answer summary:
- Distinctive: line 186
Acceptance: when acceptance criteria are provided, check them off one by one before the final conclusion.
- Very specific: line 187
lessons: when a lessons/ directory exists and something that actually happened this round is worth reusing, record it with the specific …
- Very specific: line 191
Archive: when archiving is needed, move {output_root}/active/{slug}/ to {output_root}/archive/{YYYY}/.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Code Review
Check for code defects, test quality, and change impact, and confirm that the issues found are closed.
Resources and Execution Location
references/,scripts/, andassets/are relative to the directory containing theSKILL.mdread for this run.- Run shell commands from the reviewed project root;
docs/work/, code paths, and project rules all belong to the reviewed project. CODE_REVIEW_SKILL_DIRbelow is the absolute path of the skill installation directory. Set it on every shell invocation, or replace it directly with the actual absolute path; do not assume variables persist across different shell invocations.- Scripts require basic commands such as Bash 3.2+, Git, awk, grep, and sed. Invoke them via
bash; no executable bit is needed. - Report parsing requires Python 3.9+ and PyYAML;
pythonis invoked by default, andCODE_REVIEW_PYTHONcan specify the interpreter's absolute path. For installation, see the release repository README; the in-repo entry point isscripts/install.py.
Scope
- Review functional, bug-fix, refactoring, or configuration changes that affect code behavior.
- Pure documentation, formatting, or typo changes that do not affect code behavior may be skipped.
- Static review is still possible when tests fail or have not been run; the report must state the test status and must not claim that merge conditions are met.
Inputs
| Input | Required | Description |
| git repository + diffable changes | Yes | Specify whether to review uncommitted changes or a committed base/head range |
| Acceptance criteria | No | When provided, check them off one by one under "Optional Wrap-up" |
| Coverage data / command | No | When provided, used for the optional measurement in test-coverage; without it, static quality checks on the relevant test code still run |
| Rule pack | No | Defaults to the skill's built-in references/rules/; can be overridden with CODE_REVIEW_RULES_DIR |
| Review identifier | No | {slug}, defaults to <date>-<topic> |
The artifact root {output_root} defaults to docs/work; override it with project .code-review/config.json output_dir or CODE_REVIEW_OUTPUT_DIR. This run's artifacts are written to {output_root}/active/{slug}/.
Review Process
Check items are not hardcoded in this file; they are driven by the
references/probes.yamlregistry. Probe implementation details are inreferences/probes/<probe-name>.md; this file covers main workflow orchestration and shared probe execution boundaries.Execution boundary: static review by default. For coverage checks, prefer reusing an existing report; when measurement is needed, coverage commands may be run within what this round's task allows. Other checks remain read-only evidence. Do not modify the reviewed source code during review. Test and CI output are review evidence; all tests green does not mean the behavior is correct.
Determine the review scope:
Choose a mode; when unspecified, review uncommitted changes by default. The base/head below are recorded as concrete commit IDs.
- Uncommitted changes (worktree): base is the current HEAD.
Use
git diff <base> --to collect staged and unstaged changes; usegit ls-files --others --exclude-standard -zto collect untracked files, and review their full contents as newly added code. - Committed range (commits): use the user-specified base/head,
and collect the diff with
git diff <base> <head> --. When head is omitted, use the current HEAD and review only that commit range.
Read the corresponding source:
- In worktree mode, read the working tree files.
- In commits mode, use
git show <head>:<path>to read the target version, and read base when an older version is needed. File scans use only on-disk files consistent with the target version.
Record and hand off: save the mode, base, target (working tree or head), changed-file list, and diff, for use by all probes. Use NUL separators when processing the file list programmatically, and pass each path as a quoted argument.
After collecting scope, initialize a new run before dispatching:
bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" init {slug} --mode worktree # or: init {slug} --mode commits --base {base} --head {head}The returned JSON gives
review_dir,output_dir,line_target,branch_target, andsnapshot_id. With--mode, init also writesreview-snapshot.json, which pins the reviewed source (worktree file hashes or the fixed base/head commits). New runs must pass--mode; omitting it keeps the legacy behavior. Existing active directories, archived runs, or event history with the same slug are rejected. Use a unique slug for a new review; explicitly continuing the same run reuses its directory without init. Never dispatch two runs writing the same directory. Pass the actual directory and effective targets to all probes, overriding the registry's coverage defaults. Init creates the report template. After a fix or astale-reviewresult, runsnapshot {slug}to update the snapshot, re-run the affected probes, re-render the report, and check the gate again. Source inspection is read-only; the workflow writes reports, probe JSON, policy.json, review-snapshot.json, events, and archive metrics.- Uncommitted changes (worktree): base is the current HEAD.
Use
- Read the registry and determine the probe list: Read
references/probes.yamland decide byrequires:- Specified but missing / unreadable →
error - Optional input not provided →
skipped, stating what is missing - Available → execute
- Specified but missing / unreadable →
Run probes in parallel:
Dispatch: the main executor dispatches an independent agent per probe according to the registry, providing the review scope, diff, project root, skill path, that probe's inputs and
params, the path toreferences/probes/common.md, and the "Execution boundary" above. Require each agent to readcommon.mdbefore its probe-specific document. Also pass any provided requirements, acceptance criteria, and change context as text or file paths, and ask each probe to read relevant material. Note missing inputs without inventing them. If dependency source or contract material is already available, pass its path, version, and origin for on-demand reuse; do not pre-download all dependencies.The agent reads the instructions pointed to by the registry entry's
fileandreferences/output-schema.md, and executes according to the parameters. Run in batches when concurrent slots are insufficient; if independent agents are unavailable, run serially and record the limitation.Shared probe constraints: defined once in
references/probes/common.md. Include its path in every dispatch; do not repeat or paraphrase the rules per probe.Handoff: every probe must have JSON for this run. Record skip or error reasons according to the output contract; on execution errors, preserve findings already made and let the other probes continue. If an agent fails to start or returns no valid result, the main executor records
errorand the reason without reusing old results.test-coveragehands off the report path, target version, numerator/denominator, and percentage for valid coverage via its return message, and the main executor reports them;--lineaccepts only diff line coverage:bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" coverage {slug} --line {diff-line-coverage}Add
--branch {branch-coverage}when a branch value exists, or report only that item. Omit unmeasured or inapplicable metrics without filling in 0; do not call it when neither value is valid. A single-item report updates only that item, and the script does not verify the statistical basis.Aggregation: after all agents finish, the main executor runs the synchronization command. The script reads
requiredfrom the registry and computes counts at each level from the probe JSON; do not rewrite raw results or hand-fill counts. Do not deduplicate across probes yet; count by original finding ID, which may include duplicate records of the same root cause:bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" sync {slug} --probesThis step invalidates the previous batch's reconciliation state, and reconciliation is not recorded yet.
- Reconciliation completeness check:
Derive the final counts automatically from the probe JSON:
bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" sync {slug}requiredonly controls whether that probe'sfailed/errorexecution status directly blocks; it does not change the finding closure requirement. High findings from any probe enter reconciliation and still block merge until closed; medium/low are recorded in the report and excluded from the reconciliation total:
Run it even when there are no high findings, explicitly recording the zero result; do not substitute old counts or hand-filled numbers. Fix format errors first; if records are missing, IDs are duplicated, or statuses conflict, synchronization fails, no counts are written, and the old result must not be used to pass. When there are unresolved issues (RECONCILE_TOTAL = total number of high findings RECONCILE_DONE = number of those whose status is reconciled or false-positive RECONCILE_PENDING = TOTAL - DONERECONCILE_PENDING > 0), still deliver the report this round and list the blocking items; do not proceed toward merge. After follow-up fix tasks complete, re-review the affected parts; seeexecution.max_retryinreferences/probes.yamlfor the re-dispatch limit. Compile the report:
Fill in the review scope, explanation, fix suggestions, and limitations per the template; do not embed raw JSON in the body; when acceptance criteria are provided, complete the item-by-item check-off first.
The script displays
unverified_itemsas "Pending confirmation" in Findings without including them in severity counts; original records retain their IDs, evidence, and counts; when showing the number of distinct issues, group them by the same root cause and consequence and list the corresponding IDs, without raising severity due to duplication or substituting the displayed count for probe or reconciliation counts.Run the following commands to generate the report's facts section from the JSON, validate the display, and obtain the final answer summary:
bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" render-report {slug} bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" verify-report {slug} bash "$CODE_REVIEW_SKILL_DIR/scripts/collect-metrics" summary {slug}The scripts update only the
code-review:probes/gatemarker regions under Findings and Review Conclusion, preserving other body text and raw JSON. Rendering validates before an atomic update and can be repeated; it stops when markers are missing or duplicated. Validation covers IDs, locations, evidence, severity, status, and counts.summaryvalidates the report first and outputs the machine summary only when it is consistent. The high/medium/low counts, finding IDs, and blocking conclusion in the final answer must follow the summary; do not add unrecorded issues or omit recorded high findings. Deliver the report, blocking items, and unverified content to the user; you may add explanations and suggestions, but must not rewrite the automatic regions or overturn known blocking facts."No recorded blocking items" does not mean acceptance, coverage, tests, or CI have passed. Both
gate-pass {slug} code-reviewandarchivewith review records validate the report first, then synchronize counts, and do not automatically fix a rewritten display.verify-reportchecks only that the report regions match the probe JSON; it does not check source freshness.gate-pass {slug} code-reviewfirst re-computesreview-snapshot.json. If the reviewed source changed, it returnsstale-review(exit 3) without writing a gate event.
<HARD-GATE>
Any of the following conditions blocks merge. This round's report lists the blocking items; the table below gives the follow-up handling requirements:
| Blocking condition | Follow-up action |
A required probe is failed / error (PROBE_REQUIRED_FAILED > 0) | Handle the issues found or the execution error, then re-run the corresponding probe |
The reviewed source no longer matches review-snapshot.json (stale-review) | Update the snapshot and re-review per step 1 |
A high finding has not completed reconciliation (RECONCILE_PENDING > 0) | Handle per step 4, and re-dispatch the affected probes after fixing |
Reconciliation was never reported (RECONCILE_REPORTED=0) | Complete step 4; run the final synchronization even when there are no high findings |
| Coverage data was provided and is below baseline (below project line_target; default 85%) | List the coverage gaps, add tests, and re-review |
| Acceptance criteria were provided and not all pass, or the criteria themselves are ambiguous | List the failing items; clarify ambiguity first, and do not self-check them as passing |
A high finding remains in wontfix | Complete handling per the output contract; "won't fix" cannot offset a pending item |
See section 4 of references/output-schema.md for how execution status and input errors are determined.
Script validation verifies consistency between report records and counts; it cannot prove the checks were sufficient.
Output Contract
- Main report:
{output_root}/active/{slug}/code-review.md, generated per the sections and filling requirements inassets/code-review.md. - Machine records:
{output_root}/active/{slug}/probes/<probe-name>.json, format perreferences/output-schema.md; the human report's facts section is derived from them. - Review snapshot:
{output_root}/active/{slug}/review-snapshot.json, written byinit --mode;gate-pass code-reviewuses it to reject stale evidence.
Historical records must be explicitly migrated to standalone JSON; do not infer from free text or auto-fill zeros, and do not read old embedded blocks at the same time.
Optional Wrap-up
The following items are done conditionally, not as mandatory steps each round:
- Acceptance: when acceptance criteria are provided, check them off one by one before the final conclusion; otherwise skip and say so.
- lessons: when a
lessons/directory exists and something that actually happened this round is worth reusing, record it with the specific problem, cause, and handling:- Pitfalls hit during implementation →
lessons/pitfalls.md - Cases where AI output was corrected →
lessons/bad-cases.md - New architectural decisions →
lessons/arch-decisions.md
- Pitfalls hit during implementation →
- Archive: when archiving is needed, move
{output_root}/active/{slug}/to{output_root}/archive/{YYYY}/.
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.

