review-lenses
Skill42 starsChanged 41 days agoApache-2.0View on GitHub
Named lenses for reviewing a PR (correctness, security and data, maintainability, UX and journey, performance) and the way to sort findings into act on, consider, noted and dismissed. Use for every cross-family review; apply the lenses the diff touches.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- nikhilw/structured-agentic-workflowtheir own version, first seen Nov 6, 2026
- alyssa-dahlberg/agent-skillstheir own version, first seen Jul 7, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- nikhilw/structured-agentic-workflow★ 7same name
- alyssa-dahlberg/agent-skills★ 2same 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 repository9 other files it gives its agents.
- starter-kit/AGENTS.mdAGENTS.md
- agent-stackSkill
- blast-radiusSkill
- bug-review-boardSkill
- openrig-project-setupSkill
- project-onboardingSkill
- technical-writingSkill
- unslopSkill
- verification-guideSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Write one paragraph: what the PR is meant to do, from the slice SPEC, the PR description and the commits.
- Distinctive: line 23
When you suspect a bug, trace the call chain that triggers it.
- Distinctive: line 52
Only report what you can point at.
- Distinctive: line 57
Use the disposition buckets below when responding to findings already raised by another reviewer.
≈ “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 lenses
A review from the other model family is the merge gate's main input. It finds what the author's family misses because it looks from a different angle, not because it plays a role. Apply the lenses the diff touches, and say which ones you applied and which you skipped.
Start with the intent
Write one paragraph: what the PR is meant to do, from the slice SPEC, the PR description and the commits. If you can't tell, ask the author before reviewing. Every finding is judged against that intent.
The lenses
Correctness. Does the code do what the intent says?
- Edge cases: empty input, nulls, boundaries, very large values, concurrent access.
- Errors: caught, passed on, or silently swallowed?
- Running twice, or after a crash halfway: is the result still right?
- When you suspect a bug, trace the call chain that triggers it. Don't only say "this could be null".
- Is it fixing the cause or hiding a symptom (a guard that masks a broken invariant, a retry that hides a broken contract, a cast that silences a type error)?
Security and data. For each finding, trace the input path.
- User input reaching SQL, a shell,
evalor HTML without escaping. - New endpoints or pages without the right auth check.
- Secrets in code, logs, errors or client bundles.
- Migrations: destructive, locking, not backward compatible with the code still running (projects that deploy on merge need ship-safe migrations).
- Personal data copied where it shouldn't be.
Maintainability.
- Could it be simpler without losing correctness? Push for the restructuring that deletes code, not one that only moves it.
- New special cases scattered through unrelated code; logic in the wrong layer; a helper that duplicates an existing one.
- An abstraction with one caller, options nobody uses yet, dead code, an old path kept alive after its callers moved.
- A file pushed past about 1000 lines without a strong reason.
- Tests that check behaviour rather than implementation; a bug fix without a test for the bug.
UX and journey. For anything a user sees.
- Does the journey in
docs/VERIFY.mdand the acceptance tests still work end to end? - Visible labels, error messages next to the field, focus order, empty and loading states, mobile width.
- Copy that says something untrue.
Performance.
- N+1 queries, missing indexes on new filters, unbounded lists or loops, work repeated per request that could run once.
- Anything on a hot path that now blocks: network calls, sync file access.
- Only report what you can point at. No speculative micro-optimisation.
List only problems you'd block the merge for. For each one, give the file and line, why it's wrong, and how to show it fails.
Use the disposition buckets below when responding to findings already raised by another reviewer. They do not require a list of optional suggestions in a new review.
Sort every finding
- Act on: a real problem for correctness, security, data or maintainability. It blocks the PR.
- Consider: a real point, but it may not be worth the cost now. The author decides and says why.
- Noted: true but not actionable at this stage.
- Dismissed: wrong, or missing context. Say why in one line.
Each finding gives the lens, file:line, what goes wrong, how to show it fails, and the fix or the question.
Output
Post on the PR: the intent paragraph, the lenses applied and skipped, the findings grouped as above, and a verdict (any
"act on" item means changes requested). Put the same verdict in the independent-review status description, and set
the status's target_url to your review comment's URL: the merge gate trusts only the report the status links to. Write it
with the unslop skill. If the diff touches shared code, migrations, env or jobs, check that the PR carries a
blast-radius result, or run one.
Adapted from the review rubric, code-quality lens and lead-judgment buckets of interrogate in
pstack by Lauren Tan (v0.15.5, commit fae2c6e, 2026-09-29), MIT
licence; the licence text is in LICENSE beside this file. Changes: only the review panel. No model table, no subagent
spawning, and no auto-applied fixes. Our reviewer seat of the other model family applies the lenses and posts the
result on the PR.
The merge-blocking prompt follows Getting the most out of Opus 5.5. The implementer and test-author check paragraph follows Building with Claude Sonnet 5.5.
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.

