adversarial-review
Skill337 starsChanged 5 months agoApache-2.0View on GitHub
Adversarially review a code change — assume it's broken, try to break it, and only report findings that survive an independent refutation pass. Use when the user wants a deep, skeptical review of a diff, PR, or branch ("adversarial review", "try to break this", "find what's wrong before I ship", "review this like a skeptic", "what will break in production"). Scales from a single inline pass to a multi-agent fan-out (one skeptic per domain → adversarial verify → synthesis). Distinct from a normal code review: it leads with concrete failure scenarios over style, distrusts the tests, and is honest about what it could not verify.
We split this skill into the rules it gives an agent
6 rules. 0 are common, 5 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 86 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Use this when the cost of a missed bug is high: before shipping, on a large or half-finished diff, on a new code path with no test history, …
- Distinctive: line 37
Be honest about coverage: Never imply you checked more than you did.
- Distinctive: line 52
Read the full diff plus enough surrounding code to know the invariant each hunk touches.
- Very specific: line 60
Read CLAUDE.md / AGENTS.md / README / docs/ for documented invariants, "this was the bug, keep it" notes, architecture rules, and gotchas.
- Distinctive: line 107
Default to refuted unless you can confirm the exact failure path.
- Distinctive: line 114
Only findings that *survive* refutation go in the report.
“Common” is measured: kept by at least 6 in 10 of the 86 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
Adversarial Review
A normal review confirms a change looks right. An adversarial review assumes it is broken and tries to prove it — then refuses to trust its own findings until each one survives an independent attempt to refute it. The output is not "looks good" or a list of nitpicks; it is a ranked set of concrete failure scenarios that withstood scrutiny, plus an honest account of what could not be checked.
Use this when the cost of a missed bug is high: before shipping, on a large or half-finished diff, on a new code path with no test history, or any time the user says "try to break this."
The stance (this is the whole skill)
Adopt these as hard rules for the duration of the review:
- Assume it's broken until proven otherwise. A review that finds nothing is a failed review unless you can show you tried hard to break it. Your job is to find the input that crashes it, the sequence that corrupts data, the change that silently regresses a fixed bug.
- Distrust the tests. Passing tests prove the tested paths work — not that the change is correct. Ask what isn't tested. Look for assertions that would still pass if the code were wrong, or tests weakened to make the diff go green.
- Distrust comments and commit messages. Review what the code does, not what it claims. If a comment says "killed on exit," verify the kill actually fires.
- Every finding is a failure scenario, not an opinion. "This could be cleaner" is
not a finding. "This panics on a 0-byte file because
extractMetaunwraps the page count" is. Each finding needs: concrete inputs/sequence → observed bad outcome, and afile:line. - Lead with correctness. Data loss, crashes, regressions, security, race conditions first. Quality/clarity findings are a separate, lower section.
- Be honest about coverage. Never imply you checked more than you did. End every review with what you could not verify (paths you couldn't reproduce, anything that needs the app running, cited lines you couldn't confirm).
Method
1. Stabilize the target
Pin down exactly what you're reviewing so findings cite a stable state and the user can revert cleanly.
- Working-tree changes: snapshot them onto a branch (
git checkout -b review/<topic> && git add -A && git commit), or note the exactgit diffrange. This prevents findings from drifting as the tree changes and lets the user restore easily. - A PR: review
git diff <base>...<head>(three-dot — the changes the PR introduces). - Read the full diff plus enough surrounding code to know the invariant each hunk touches. Never review a hunk in isolation.
2. Discover the invariants
The highest-value bugs violate a rule the codebase already established. Before reviewing, spend a few minutes learning the project's rules — do not invent generic ones:
- Read
CLAUDE.md/AGENTS.md/README/docs/for documented invariants, "this was the bug, keep it" notes, architecture rules, and gotchas. - Skim recent commit messages and the tests for behavior the project treats as load-bearing.
- A diff that violates a documented invariant is a bug, even if it compiles and tests pass. Cite the invariant in the finding.
3. Discover the domains
Split the diff into independent failure domains so each gets focused, deep attention instead of one shallow context-switching pass. Derive the split from this diff — common cuts:
- By language / layer (backend vs frontend vs schema/migration).
- By brand-new code (a fresh module/importer/parser with no test history is its own domain — it's where invariants are most likely unhonored).
- By cross-cutting boundary (API/IPC contracts: a signature changed on one side but not the other — compiles in each language, breaks at the boundary; a new command not registered; a missing capability/permission; docs claiming behavior the code lacks).
For each domain, hunt for the failure modes that domain is prone to. A starting checklist (extend per project):
- Data integrity: idempotency (re-run duplicates rows?), dedup keys that don't compose, partial writes on error, schema/contract drift, nullable fields assumed non-null.
- Resource & lifecycle: leaked processes/handles/listeners, per-request clients that should be shared, work that should stop on cancel/unmount but doesn't, O(n²) hidden in a loop, locks held across I/O or parsing.
- Network & trust: SSRF (guard the initial host and every redirect hop), missing size/time caps, unvalidated input reaching a query (injection), secrets cleared on a transient failure when they should be kept.
- Concurrency / state: stale closures, missing effect deps, optimistic UI desyncing from the persisted write, double-invocation under StrictMode, races between batches.
- Input robustness: empty / huge / malformed / Unicode / multibyte input; offsets computed on one string and applied to another; unwraps/panics on bad input.
4. Verify before you believe (the adversarial pass)
This is what separates an adversarial review from a thorough one. Do not report a finding until you've tried to refute it. For each candidate finding, take the opposite side: read the cited code and surrounding context and ask —
- Does the failure actually reproduce? Construct the concrete repro if you can.
- Is there an existing guard the first pass missed? Is the cited line even reachable?
- Is the severity inflated?
Default to refuted unless you can confirm the exact failure path. When the domains are large or correctness matters a lot, give each finding to a fresh perspective (a separate agent, or a deliberate second pass) prompted to refute it — independence catches the plausible-but-wrong findings that confirmation bias keeps. For findings that can fail in more than one way, verify along distinct lenses (does-it-reproduce / security / does-the-guard-hold) rather than re-checking the same way N times.
Only findings that survive refutation go in the report. Track refuted ones too — "I checked X and it's actually guarded at line N" is useful signal.
5. Synthesize honestly
Produce a tight report:
- One-line verdict on the change's overall risk.
- Findings by severity (Critical → Low). Each: title,
file:line, the concrete failure scenario, the violated invariant/expectation, and a one-line fix direction. Flag low-confidence survivors as "needs a human check." - Single most likely thing to break in production — the one finding that fires on the most common path, even if it's not the most severe.
- What could not be verified — paths you couldn't reproduce, anything needing the app running, cited lines you couldn't confirm, areas out of scope. Be specific; never imply coverage you didn't achieve.
Scaling
Match effort to the request and the stakes:
- Quick / small diff: one inline adversarial pass — find, then a deliberate refute pass on each candidate, then synthesize. No orchestration needed.
- Larger diff or "be thorough / audit this": spawn one skeptic agent per discovered
domain (use the Agent tool, or a Workflow if the user has opted into multi-agent
orchestration), each loaded with the discovered invariants; verify each finding with an
independent refuter; synthesize the survivors. A parameterized Workflow template that
encodes exactly this — discover → per-domain skeptics → adversarial verify →
synthesis — is in
workflow.js. Treat it as a starting point: fill in the discovered domains and invariants, don't ship the placeholders.
Note: the Workflow path requires the user to have opted into multi-agent orchestration (e.g. "ultracode", "use a workflow", or an explicit ask). Without that, run the inline path or a handful of Agent calls — never silently fan out dozens of agents.
Anti-patterns (don't do these)
- Reporting a finding you didn't try to refute.
- Padding the report with style nits to look thorough — they bury the real bugs.
- "Looks good to me" with no account of what you actually probed.
- Trusting a green test suite as proof of correctness.
- Inventing generic invariants instead of reading the project's actual rules.
- Claiming coverage of areas you never opened.
Other versions98 projects use a version of this.
Word for word · 1
- florattu/claude-skills★ 0100% same
Edited · 0
None found.
Wrote their own version · 97
- jlowin/fastmcp★ 28ksame name
- PrefectHQ/fastmcp★ 28ksame name
- mengxi-ream/read-frog★ 10ksame name
- epicenter-md/epicenter★ 4.8ksame name
- EpicenterHQ/epicenter★ 4.8ksame name
- basicmachines-co/basic-memory★ 4.4ksame name
- DanMcInerney/architect-loop★ 626same name
- deadlock-mod-manager/deadlock-mod-manager★ 489same name
- syahiidkamil/Software-Engineer-AI-Agent-Atlas★ 404same name
- microsoft/XBOX-Godot-Sample★ 240same name
87 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.
Used alongsideProjects with it also use rethink, design-doc and 10 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.
fabioespindulaSkillrethink
Reframe a plan, idea, or decision before the user commits to it. Use when the user asks to rethink, step back, pressure-test, gut-check, decide, right-size, simplify, think bigger about, or evaluate a concrete plan or decision in product, strategy, technical architecture, career, life, company direction, or personal priorities. This skill improves decision quality before action: clarify the real question, challenge assumptions, compare alternatives, calibrate ambition, classify the operating mode, surface risks, and recommend a next move. Do not use for broad future exploration without a concrete decision; that belongs to a think-big or research-style skill.
Also in 3 projects that use this
maragudkSkilldesign-doc
For when you're asked to write a design doc or specification, especially after a brainstorm or feature design session.
Also in 3 projects that use this
anasahmed07Skillbetter-auth-best-practices
Skill for integrating Better Auth - the comprehensive TypeScript authentication framework.
Also in 4 projects that use this
MicrosoftSkillpull-request
Write concise, focused pull request descriptions for Wassette — at most three sentences on the what and why, with an explicit note on any breaking public-API change and how users adapt. Use when opening or editing a Wassette pull request.
Also in 3 projects that use this
Hugging FaceSkillsimplify
Refactor code after tests pass. The "Refactor" phase of Red-Green-Refactor.
Also in 4 projects that use this
MicrosoftSkilltypescript
TypeScript best practices for this monorepo. Use this skill when: (1) writing new TypeScript code, (2) reviewing TypeScript code, (3) working with API responses, fetch calls, or JSON parsing, (4) adding or modifying types and interfaces.
Also in 3 projects that use this
- +3 more from microsoft
In this repository70 other files it gives its agents.
- vercel-react-best-practices/AGENTS.mdAGENTS.md
- analytics-trackingSkill
- animejsSkill
- apple-designSkill
- app-store-screenshotsSkill
- beam-glow-statesSkill
- beautiful-shadowsSkill
- better-accessibilitySkill
- better-colorsSkill
- better-interfaceSkill
- better-layoutSkill
- better-typographySkill
- better-uiSkill
- better-writingSkill
- competitor-alternativesSkill
- conductor-rewrite-performanceSkill
- container-linesSkill
- content-strategySkill
- contribute-catalogSkill
- copy-editingSkill
- copywritingSkill
- corner-diagonalsSkill
- css-animationsSkill
- css-border-gradientSkill
- documentary-brutalist-agencySkill
- editorial-portfolio-chaptersSkill
- emil-design-engSkill
- framed-grid-layoutSkill
- frontend-designSkill
- glass-dark-uiSkill
- gsapSkill
- hyperframes-cliSkill
- hyperframes-mediaSkill
- hyperframes-registrySkill
- hyperframesSkill
- impeccableSkill
- interface-reviewSkill
- landing-pageSkill
- linear-local-first-architectureSkill
- liquid-metal-borderSkill
- lottieSkill
- mesh-gradient-dark-blue-cleanSkill
- minimal-zine-posterSkill
- ogilvy-copywritingSkill
- operational-enterprise-aiSkill
- page-croSkill
- pricing-pageSkill
- product-proof-saasSkill
- programmatic-seoSkill
- progressive-blurSkill
- remotion-to-hyperframesSkill
- reveal-hover-effectSkill
- schema-markupSkill
- seo-auditSkill
- service-booking-flowSkill
- shaders-cursor-ripplesSkill
- skeuomorphic-uiSkill
- staggered-word-revealSkill
- stop-slopSkill
- tailwindSkill
- The first 60 shown.
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.

