review-core
Skill1 starsChanged 12 days agoMITView on GitHub
Evidence-backed, advisory code review of a change (working tree, branch, commit range or PR). A fresh-context reviewer works from a script-built review packet; a refuter tries to disprove every P0/P1 finding; deep effort (only for TRUNK, cross-subsystem or contract changes) adds consumer-impact reviewers driven by the caller tree, base-vs-change differential tests, and a red team that leaves proof tests behind. Reports P0–P3 severity, evidence tier (PROVEN/TRACED/INFERRED) instead of a confidence %, measured blast radius (LOCAL/MODULE/CROSS/CONTRACT), a validation ledger of what was and wasn't checked, and a machine-readable JSON report for future gating. Loads a project lens pack from the repo's .claude/review/ folder when present (domain lenses such as QuantLib numerics or RAG/LLM flows). Use when asked for a "deep", "thorough", "evidence-backed", "adversarial" or "pre-merge" review, a review "with blast radius", or by name (/review-core). Complements the built-in /code-review; does not replace it.
- Commits and pushes
2 other projects use a version of this.
Adopted by
Most recently taken up by
- amirbena/code-review-skilltheir own version, first seen Nov 8, 2026
- lucavb/skillstheir own version, first seen Aug 28, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- amirbena/code-review-skill★ 8same name
- lucavb/skills★ 3same 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 repository6 other files it gives its agents.
- skills/review-core/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ai-harness-engineeringSkill
- cost-reportSkill
- rag-ui-redesignSkill
- tdd-specSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. About 0 are common, 5 are distinctive, and 16 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
16
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 38
Intent: Write it from the PR's commits list in the summary.
- Very specific: line 40
Advisory mode: Never edit the reviewed repo or change its git state.
- Distinctive: line 79
Intent: write one line from the commit messages, the PR body or the user's request.
- Very specific: line 80
Prep: run review.py prep --repo <repo> [--target …] --intent "…" --effort <level> --work $W.
- Very specific: line 98
Review: run review.py start --work $W, then spawn the reviewer(s) using agents.md.
- Very specific: line 110
Report: run review.py report --work $W --findings $W/reviewer-1.json […] [--refuter $W/refuter.json] [--skipped "what — why"].
- Distinctive: line 119
Don't hand-edit the report.
- Very specific: line 120
Cost: always pass --cost "reviewer=<n>,refuter=<n>,…", using each Agent result's subagent_tokens.
- Very specific: line 128
Post to the PR (GitHub; only when the user asked): add --post-dry-run to show what would be sent, then --post.
- Very specific: line 150
Instead, hand the fixes back to the authoring session with a ready prompt to paste there.
- Very specific: line 184
if its cited code changed, it is recorded as fixed.
- Very specific: line 185
if its cited function is gone, it is recorded as superseded.
- Very specific: line 186
if the code is unchanged, it is left unlabelled and flagged.
- Very specific: line 187
When the user says a PR merged: run review.py outcomes --repo <repo> --pr <n>.
- Distinctive: line 237
Escalate: if P0/P1 findings survive 3 rounds.
- Very specific: line 246
Run scripts/codemap.py scan --repo <repo>.
- Very specific: line 248
Read those CLAUDE.md files and design docs.
- Very specific: line 255
Only after approval, write it into profile.md and run codemap.py build --repo <repo>.
- Distinctive: line 262
Evidence over assertion: No confidence percentages.
- Very specific: line 264
Deterministic work lives in
review.py: Don't redo by hand what it computes (scope, blast map, gate, report). - Distinctive: line 388
Only branch and working-tree reviews chain as rounds.
≈ “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
review-core — accountable code review
Args: [quick|standard|deep] [target] [--repo <path>]. Defaults: standard, the cwd repo.
Target: nothing, <rev>, <a>..<b>, --staged, or a pull/merge request:
--pr <url|number>, which accepts a GitHub …/pull/N URL, a GitLab …/-/merge_requests/N
URL, or a bare number (resolved against origin).
- The fetch.
prepfetches the PR head and its base fromorigin(nogh/glabneeded). It checks that the URL's repo matchesorigin, then reviewsmerge-base..headfrom a temp worktree. The user's checkout and branch are never touched. - PR code is not executed by default. The gate and
deepdifferential tests are skipped for--pr(the ledger says so). Pass--run-pr-codeonly for a PR whose author you trust, such as your own branch: pytest imports its conftest and tests. - The pack comes from your checkout, never from the PR. The PR's own
.claude/review/is replaced by yours, or dropped if you have none. A PR can't suppress its own findings or change the gate. - Agents read the PR code from
review_repoin the summary, not the user's checkout. reportremoves the worktree (--keep-worktreekeeps it). Reports go to the user's checkout, in.claude/review/out/.- Base branch. Pass
--base <branch>when the PR doesn't target the default branch. - Already merged PRs are reviewed against their pre-merge base; the summary says so.
- Intent. Write it from the PR's
commitslist in the summary.
Advisory mode. Never edit the reviewed repo or change its git state. The one exception is
<repo>/.claude/review/out/ (gitignored), where reports go. Offer fixes afterwards; apply them
only if asked.
| File | What it is |
| contract.md | The standard: scales, finding schema, report template, ledger |
| rubric.md | The condensed contract; prep embeds it in the packet, so don't paste it |
| agents.md | Reviewer, refuter and red-team briefs |
| lenses/ | The global change-integrity lens |
| project-pack.md | How a repo adds profile.md and domain lenses |
| scripts/review.py | prep and report, all the deterministic review work |
| scripts/codemap.py | Code graph (transitive callers, test selection) and the TRUNK/BRANCH/LEAF code map |
Effort
| Level | Reviewers | Extra evidence | Refuter | Red team |
quick | you, inline, reading the packet (ledger: fresh context: no) | — | inline, P0–P1 only | — |
standard | 1 fresh breadth agent covering all selected lenses | — | 1 agent, only if P0–P1 | — |
deep | 1 breadth agent + 0–3 consumer-impact agents (one per downstream subsystem from the caller tree), launched together | differential tests: the selected tests run on base vs change | 1 agent, only if P0–P1 | 1 agent: proof tests + targeted attack |
deep is gated. prep keeps deep only when a touched file is TRUNK, reach is
CROSS/CONTRACT, or a contract surface is touched. Otherwise it falls back to standard
and says so in the summary and the report header ("deep requested → standard"). Follow the
effort that prep prints, not the one requested. If the user insists ("force deep"), pass
--force-deep. Suggest deep (never auto-run it) when a standard report says "consider
deep".
Proof budget per agent: quick 0 · standard 3 · deep 8 commands. All agents use
model: sonnet and run in the foreground (run_in_background: false). The run needs
their output to finish, and a background agent can outlive an orchestrator that is itself a
subagent.
Procedure
$W is a scratch work dir. Run Python with the project's command, e.g. PowerShell
conda run --no-capture-output -n py312 python <skill>/scripts/review.py ….
- Intent: write one line from the commit messages, the PR body or the user's request.
- Prep: run
review.py prep --repo <repo> [--target …] --intent "…" --effort <level> --work $W. Give the shell at least a 10-minute timeout, because the gate runs tests; a background shell slows it down.- It resolves the scope and selects lenses.
- It runs the pack's gate on the tests that import the changed modules.
- It builds the transitive blast map, with the code-map tier of each touched file.
- It writes
$W/packet.md. - At effective
deep, it also writes onepacket-impact-<n>.mdper consumer target and runs the differential tests ($W/diff_tests.json). Git state stays untouched; the base is agit archivesnapshot. - It prints a summary: effective effort and the deep verdict, impact targets, the differential-test line, lenses, gate exit codes, reach, tiers, code-map status and packet sizes.
- Gate failures are recorded, not turned into findings.
- A missing or stale code map is reported, not fatal. Mention it, and offer the Code map workflow below.
- Over ~3,000 changed lines: review by top-level module and pass the uncovered parts as
--skippedin step 5.
- Review: run
review.py start --work $W, then spawn the reviewer(s) using agents.md. The start mark times the review itself, for the cost record.- At
deep, launch the breadth reviewer (packet.md) and every impact reviewer (packet-impact-<n>.md) in one message. - Save each JSON result as
$W/reviewer-<n>.json.
- At
- Refute and red-team:
- Refute, only if any finding is P0 or P1: spawn the refuter with just those findings
(merged across reviewers) and save its result as
$W/refuter.json. - Red team (
deeponly, after the refuter):- Part A writes proof tests to
$W/proofs/test_*.py. - Fold its upgrades into the reviewer JSON.
- Save its PROVEN-only new findings as another
--findingsfile.
- Part A writes proof tests to
- Refute, only if any finding is P0 or P1: spawn the refuter with just those findings
(merged across reviewers) and save its result as
- Report: run
review.py report --work $W --findings $W/reviewer-1.json […] [--refuter $W/refuter.json] [--skipped "what — why"].- The report is written to
<repo>/.claude/review/out/, with or without a pack. The folder ignores itself (its own.gitignorecontains*), so it never shows up ingit status. Don't redirect it to a scratchpad with--out-dir: another session can't find a report there. - At
deep, the ledger adds the impact reviewers, the differential-test verdict, and the proof tests as proposed regression tests. - Print its stdout as the answer, plus any stderr warnings that matter.
- Don't hand-edit the report.
- Cost: always pass
--cost "reviewer=<n>,refuter=<n>,…", using each Agent result'ssubagent_tokens. The ledger then records the review's cost; without it the run is markedcost_missing. - History:
reportalso records the run and its findings inreview-history/under the config directory (see Outcomes below). Aquickrun is recorded asauthor-quick, and any other effort asindependent. Pass--kind testfor synthetic or trial runs, which never count. Re-runningreporton the same review, such as a dry run and then--post, updates the same record.
- The report is written to
- Post to the PR (GitHub; only when the user asked): add
--post-dry-runto show what would be sent, then--post. Use--title-prefixonly if requested.- What gets posted:
- one summary comment, edited in place on re-review;
- inline comments only for P0/P1 on diff lines, as a COMMENT review (never approve/request changes);
- labels:
ai-verdict:*,review:trunk,review:contract,review:deep.
- On re-review, findings that have gone are replied to and their threads resolved. Resolving needs repository write access. With a read-only agent token (Contents: read, Pull requests: write), the reply is posted and the report says which threads the human must resolve on GitHub.
- Token needs: posting works with Pull requests: read and write; Contents can stay
read-only. The agent never pushes: the human pushes the branch, then the agent may open
the PR (
gh pr create --head <branch>) and post. - Refusals: posting is refused when the PR head moved since the review
(
--allow-staleoverrides), and for GitLab (not supported yet). - The PR is the
--prtarget, or the current branch's PR, or--pr-number N.
- What gets posted:
- Close. Who fixes depends on where the review ran.
- The same session that wrote the code (a
quickround in the author loop): offer a fix in one line, P0/P1 first. - A fresh session (the final review, or a review of someone else's change): don't
offer to fix. A reviewer that fixes its own findings ends up checking its own work.
Instead, hand the fixes back to the authoring session with a ready prompt to paste
there. Cite the report repo-relative and by its timestamped name, e.g.
"Address findings 1, 3 from
.claude/review/out/<timestamp>-<sha>.json; reply 'disputed' with a reason for any you reject." Notlatest.json, which the author's nextquickround overwrites. Name the findings that need a human decision rather than a code fix. - Either way, offer to add rejected findings to
suppressions.mdwith reasonfalse-positive|accepted-risk|wontfix. Only a human adds them (see Author loop).
- The same session that wrote the code (a
Talking about findings later (fixing, reporting progress, handing over): never refer to
findings by number alone; the user can't see the report. Run
python scripts/review.py status --repo <repo> [--report <json>] and show its table. It lists
the number, severity, location, a one-line problem and fix, and a status for each finding:
- open: the cited code is the same as when it was reviewed;
- changed — recheck: the cited code has been edited since;
- unknown: this checkout doesn't contain the reviewed commit (a PR you haven't checked out, another branch), or the report predates fingerprints;
- suppressed: with the reason from
suppressions.md(--alllists these too).
report stores a fingerprint of each finding's cited code (code_fp), and status
compares the current code against it. This works the same for working-tree, commit and PR
reviews.
Show it before proposing fixes and again after making them. Status reads the code; only a fresh review marks a finding fixed.
Outcomes, labels and the monthly retro
This is the data a future gate will rest on. Per-lens precision needs to know what happened to each finding, and recall needs to know which bugs got through. Design: design/outcomes-and-retro.md.
- Between review rounds, inference is automatic. When a later review of the same PR or
branch no longer reports a finding:
- if its cited code changed, it is recorded as
fixed; - if its cited function is gone, it is recorded as
superseded; - if the code is unchanged, it is left
unlabelledand flagged.
- if its cited code changed, it is recorded as
- When the user says a PR merged: run
review.py outcomes --repo <repo> --pr <n>.- It shows the last review's findings that still need an outcome, against the merged code.
Changed code suggests
fixed; unchanged code means shipped as-is. - With the user's go-ahead,
--accept-suggestedrecords the suggestions. - The user labels the rest. Run
review.py label --repo <repo> <finding> <outcome> "<reason>"with their decision, using one offixed,false-positive,accepted-risk,wontfixorsuperseded.false-positive,accepted-riskandwontfixalso go intosuppressions.md.
- It shows the last review's findings that still need an outcome, against the merged code.
Changed code suggests
- Only the human decides outcomes. On your own judgement you may only run
label --by author <finding> disputed "<reason>"; the human confirms or overrides it. Monthly retro:
outcomesreminds you when the last retro was more than 30 days ago. Then runreview.py retro --repo <repo>, which covers the last 30 days, or--month <yyyy-mm>. It reports:- per merged PR: review rounds, findings per round, P0/P1 left at merge, cost, and comments that didn't come from review-core;
- bug attribution candidates. It finds fix commits in the period, blames the lines they
changed back to the PR that introduced the bug (any lag; renames and reformats are
followed), and classifies each as
missed,dismissed-real-bug,accepted-materialisedorunreviewed. A class matched only by function is marked provisional. - findings still unlabelled.
It then compacts closed months.
- Confirming a candidate: show the user each one. With their decision, run
review.py escape --repo <repo> --fix <sha> --confirm --class <class>. Use--class not-a-bugfor a commit that wasn't a bug fix. For a bug with no fix yet, useescape --file <path> --symbol <name> --pr <n> --note "…". - Precision:
review.py precision [--repo-name R] [--lens L] [--severity P0,P1] [--window 12m | --since-lens-change]. Per lens it shows true and false positives, labelled and unlabelled counts, and the Wilson 95% lower bound. Fewer than 40 labelled findings are reported as "insufficient". - Storage: history is plain files under the config directory. It may name private code, so
it stays out of public repos; follow the user's own rule for versioning it. Full detail is kept for 12 months; after that, aggregates plus ids and locations are kept,
so attribution still works.
review.py history-importbackfills old reports.
Author loop (iterating on review findings)
- Rounds. Iterate with
quick(cheap, inline) and fix P0/P1 between rounds. Each round re-reviews the whole branch, so a regression introduced by a fix also shows up. - The final pre-MR review runs at
standardin a fresh session (new terminal or/clear), with the intent taken from the commit messages, not the author's framing. That report is what gets posted. - Fixes from the final review go back to the authoring session. Hand over the
repo-relative path of the JSON report, not a copied table: the JSON has the full failure, fix and proof text. Check
the fixes with a
quickround there. Run one more freshstandardonly if the fixes were substantial. - The loop ends when no P0/P1 remains, not when a review comes back empty. A fresh reviewer always finds some P2/P3, so "zero findings" never converges. P2/P3 are fixed or accepted at the author's discretion; a SHIP-WITH-NOTES verdict can merge.
- The author never suppresses its own findings. It marks them disputed in its reply;
only a human adds them to
suppressions.md. Self-suppression would corrupt the precision data that gating depends on. - Escalate if P0/P1 findings survive 3 rounds. That's usually a design problem, so stop and bring in a human.
Code map (one time per repo; refresh after broad refactors)
TRUNK / BRANCH / LEAF reflects what the system is for, so it comes from a committed declaration that you approve. Nothing is inferred at review time. See project-pack.md for the keys and rules.
- Run
scripts/codemap.py scan --repo <repo>. It lists the CLAUDE.md files, design docs, routes, CLI modules, top modules by PageRank, and the current declaration. - Read those CLAUDE.md files and design docs. Draft
criticality:outputs: what the system produces;data_edges: file-mediated flows;non_value;pins. Show it to the user, or show a diff against the existing one, and call out the judgement calls.
- Only after approval, write it into
profile.mdand runcodemap.py build --repo <repo>. - Present the tier counts, the infra and pinned modules, and samples of each tier. Turn
disagreements into
pinsor declaration edits and rebuild.codemap.py explain <path>shows one module's reasoning.
Principles
- Evidence over assertion. No confidence percentages. An INFERRED finding says what wasn't verified.
- Deterministic work lives in
review.py. Don't redo by hand what it computes (scope, blast map, gate, report). - Coverage is part of the result. The ledger always shows what was read, run and skipped.
- The contract is stable. Changing a scale or the JSON shape means bumping
schemaincontract.mdand mirroring the change inrubric.md(a test checks the scale names).
Changelog
- 2026-09-30 — review-core/1: initial contract, 4 global lenses, advisory mode.
- 2026-09-30 — pilot on faultline: PROVEN now requires a demonstrated failure;
ai-authored P3 anchor for coverage-overstating comments; brace globs allowed in
applies_to. - 2026-10-01 — refactor for cost and modularity:
- Standard effort uses 1 reviewer; the refuter runs only for P0–P1.
- Agents run on Sonnet in the foreground.
- One script,
review.py, with two subcommands:prep(scope, lenses, gate, blast map, packet) andreport. correctness+ai-authoredmerged into the gap-onlychange-integritylens;securityandconfig-provenanceremoved (on-prem projects).- Layout flattened from 19 files to 9; the profile gained manifest frontmatter.
deepis unchanged apart from the lens set and is pending its own redesign.
- 2026-10-01 — code graph and code map (
scripts/codemap.py):- The blast map follows transitive callers through wrappers (3 hops) and reports the path that justifies its reach.
- Tiers come from the committed
criticalitydeclaration, plus structural centrality and co-change. - The gate runs only the tests that import the changed modules, labels environment failures, and times out at 300 s.
- 2026-10-02 —
deepredesign:- A qualification gate: deep stays deep only for TRUNK, CROSS/CONTRACT reach or contract
surfaces; otherwise it visibly falls back to standard.
--force-deepoverrides. - Per-lens reviewers are replaced by 1 breadth reviewer plus 0–3 consumer-impact reviewers from the caller tree.
- Differential tests: the selected tests run on a
git archivebase snapshot and on the change. - The red team writes proof tests to
$W/proofs/; it attacks along the caller-tree paths. - The deep suggestion now also fires on CONTRACT reach.
- Gate and diff runs set
PYTHONDONTWRITEBYTECODE.
- A qualification gate: deep stays deep only for TRUNK, CROSS/CONTRACT reach or contract
surfaces; otherwise it visibly falls back to standard.
- 2026-10-02 — review quality:
reportvalidates each cited line against the file and symbol span and relocates wrong ones (keepingline_reported, with a warning). Validation runs before merging, so the correct citation wins on an evidence tie.- The terminal report clips fields to 1–2 sentences and proofs by length; the JSON keeps the full text.
- The
Skippedlist is de-duplicated and capped at 5.
- 2026-10-02 — test reach in the code map: each module gets
test_coveragedirect|indirect|none, where test-file reach follows imports transitively through helpers.buildreportstrunk_test_coverageandtrunk_untested; the packet shows the coverage of each touched file. This replaces the misleading "without direct tests" list. - 2026-10-02 — PR/MR targets without
gh:--prtakes a GitHub or GitLab URL, or a number. URLs are parsed strictly and checked againstorigin.- The head and base are fetched from
originand reviewed from a temp worktree, whichreportremoves. - Merged PRs are diffed against their pre-merge base.
- The
gh-based--pr Npath, which could not build a blast map, was removed.
- 2026-10-02 — posting and cost:
report --post/--post-dry-runpublish to GitHub PRs: a summary comment (edited in place), inline P0/P1 comments as a COMMENT review,ai-verdict:*/review:*labels, and an optional--title-prefix.- Re-review resolves threads for findings that have gone.
- A stale-head guard refuses to post when the PR moved since the review.
--costrecords per-agent tokens; the ledger gainstokensandwall_s.- New "Author loop" guidance:
quickiterations, a fresh-session final review, no self-suppression, escalation after 3 rounds.
- 2026-10-02 — fixes from review-core's own review:
- The merge no longer collapses distinct defects. Ids match ignoring the lens prefix; different ids merge only across reviewers, on the same file, non-empty symbol and severity, within 5 lines.
--prno longer runs PR code unless--run-pr-codeis passed. Gate paths with shell metacharacters or spaces are left out and listed underunsafe_paths_skipped.prepsurvives tracked files deleted in the working tree and untracked nested repos.- The diff parser pins
a//b/prefixes and unquotes git's C-quoted paths. prepstores the changed-line map inscope.json, soreportcan be re-run after the PR worktree is gone.- Stale junit files are deleted before each differential test run.
- A refuter "kept" may narrow blast or weaken evidence, never raise either; PROVEN stands.
- 2026-10-02 — the close step depends on where the review ran:
- A fresh-session review no longer offers to fix its own findings. It hands them back to the authoring session as a report path plus a ready prompt.
- The author loop adds the hand-off and a stop rule: the loop ends when no P0/P1 remains, not when a review returns zero findings.
reportwrites to<repo>/.claude/review/out/even without a pack, and the folder ignores itself. A hand-off path is then repo-relative, so the authoring session reads it directly instead of searching another session's scratchpad.
- 2026-10-02 — fixes from the second self-review:
- PR reviews take the pack only from the user's checkout. The PR's own
.claude/review/is replaced, or dropped when the user has none. - Re-posting replies "no longer reported" once per gone finding: our replies carry a state marker. A finding reported again gets a reply and its thread reopened.
- PR reviews take the pack only from the user's checkout. The PR's own
- 2026-10-02 —
review.py statusand refuter hardening:statusprints a saved report's findings as a table, each marked open, changed since review (recheck) or suppressed. The close step and any later talk about findings use it, never bare numbers.- A refuter can only cut:
downgradedcan't raise anything, a downgrade that lowers nothing counts as kept, and an unknown verdict is warned about instead of crashing. - contract.md §6 now lists the ledger keys
reportactually writes.
- 2026-10-02 — fixes from a further self-review:
statuscompares a fingerprint of each finding's cited code (code_fp, stamped byreport) instead of diffing againsthead_sha. Working-tree reviews no longer read as "changed" straight away. It reports "unknown" when the checkout doesn't contain the reviewed commit, such as a PR viewed from the base branch.- PR
reportre-runs read suppressions from the user's checkout, so a dry run followed by--postno longer loses them. Location checks are skipped, with a warning, once the worktree is gone. - A PR
reportre-run fingerprints the reviewed head from the user's checkout, so the posted report keepscode_fp. The ledger says "fresh context: no" forquick.
- 2026-10-03 — read-only agent token: posting was verified with a fine-grained token (Contents read-only, Pull requests read and write). Everything posts except thread resolution, which needs repo write. The report now says which threads the human must resolve, instead of claiming they were resolved.
- 2026-10-03 — outcomes, bug attribution and the monthly retro (
scripts/history.py; design indesign/outcomes-and-retro.md):reportrecords every run inreview-history/under the config directory. Re-runs update the same record. Runs areindependent,author-quickortest, and carry tokens, review time, skill version and model. The report schema is nowreview-core/2, and itsrepois the origin repo's name, not the PR worktree's.- Outcomes are inferred between rounds (
fixed,superseded, orunlabelledand flagged), suggested at merge (outcomes --pr), and labelled by the human (label). retroattributes later bug fixes to the PR that introduced them, at any lag, and reports process stats.escapeconfirms the attributions;precisionreports Wilson bounds;compactkeeps 12 months of detail;history-importbackfills old reports.
- 2026-10-03 — fixes from the outcomes review:
- Outcome file names are much shorter (≤ ~110-character repo paths, for Windows path
limits);
compactrenames old ones. PR worktrees are created withcore.longpaths. - Only branch and working-tree reviews chain as rounds. A review of an explicit commit or range never infers outcomes for another run.
escape --prrecomputes the class and covering findings for the overriding PR.outcomes --prrefuses when the merge commit isn't available locally, instead of suggestingsupersededfor everything.- A history error no longer costs a review its report; it becomes a loud warning.
- Confirming a provisional attribution requires
--class.
- Outcome file names are much shorter (≤ ~110-character repo paths, for Windows path
limits);
- 2026-10-04 — Phase A housekeeping:
render()and the merge-outcomes table escape|and newlines in table cells.- The code map is no longer reported stale just because a review added untracked files.
- The run id is one per
prep(prepared_at), so adding a red-team findings file to a re-run ofreportupdates the same run.compactmerges older duplicates.
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.

