adversarial-review
Skill0 starsChanged 2 months agoMITView on GitHub
Hunts for ways code can be broken, abused, or made to do something its author did not intend, and reports each with the concrete input and path that does it. Use when you want an attacker's pass over a codebase or a change rather than a code review.
104 other projects use a version of this.
Adopted by
Most recently taken up by
- revisit-studies/studytheir own version, first seen Nov 9, 2026
- ozt88/skillstheir own version, first seen Nov 8, 2026
- selamy-labs/agent-skillstheir own version, first seen Nov 8, 2026
- kellen-miller/skillstheir own version, first seen Nov 8, 2026
- leinardi/adversarial-review-looptheir own version, first seen Nov 8, 2026
- artberri/skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use rethink, root-cause-analysis and 9 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
MicrosoftSkillroot-cause-analysis
Use when a Regional Retail Manager asks I'm seeing unusual inventory movement at our Northwest stores. Can you help me understand what's happening?
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
DockerSkillfix-issue
Fix a single GitHub issue end-to-end: triage, research, write the fix, review, and create a PR. Use when asked to fix an issue: "fix issue 1234", "resolve #500", "create a PR for issue 200".
Also in 3 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
juriwiensSkillcodex-review
Run code review via Codex CLI
Also in 3 projects that use this
- +1 more from microsoft
Other versions104 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 104
- PrefectHQ/fastmcp★ 28ksame name
- jlowin/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.5ksame name
- DanMcInerney/architect-loop★ 626same name
- deadlock-mod-manager/deadlock-mod-manager★ 584same name
- boraoztunc/skills★ 454same name
- syahiidkamil/Software-Engineer-AI-Agent-Atlas★ 404same name
94 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 repository16 other files it gives its agents.
- changelogSkill
- cve-patchSkill
- diagnoseSkill
- docs-driftSkill
- good-readmeSkill
- improve-designSkill
- improve-seoSkill
- janitorSkill
- kickoffSkill
- nta-scanSkill
- refactor-oopSkill
- repo-reconSkill
- software-architectureSkill
- spec-driven-devSkill
- stack-adviseSkill
- your-skill-nameSkill
The file
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 93 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
- Very specific: line 75
Read only. Do not fix anything you find, however trivial.
- Distinctive: line 86
Treat every file as guilty until you have traced why it is not, but report the trace rather than the suspicion.
- Distinctive: line 88
Do not inflate a plausible finding into a confirmed one, and do not stay quiet about one because you could not prove it.
- Distinctive: line 90
No remediation design. State a fix only where it is one obvious line.
- Distinctive: line 95
Every trust boundary in scope has been walked or listed under Not reached, most exposed first, and each candidate issue is either discarded …
- Distinctive: line 123
Never report "clean". Report what you attacked, and what you did not.
“Common” is measured: kept by at least 6 in 10 of the 93 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
Goal
A ranked list of the ways this code can be exploited, each one traced from an input an attacker controls to the bad outcome it produces, so the reader knows what to fix first.
Context
Check first:
- The scope you were pointed at — the whole tree, or a change (
git diff, a branch, a patch). Decide before reading and state it in the report. - Who the attacker is: an unauthenticated caller, a signed-in user of another tenant, someone who can open a pull request, someone already on the host. The threat model decides what counts as a finding.
- What the project already claims to defend with: auth middleware, a validation layer, a sandbox, CSP, allowlists, prepared statements. Test those claims instead of re-deriving them.
- The test suite, linters, and static analyzers already present, and how to run them.
git logandgit blamearound anything suspicious — a check removed in a hurry reads differently from one that was never there.
Steps
- Map the trust boundaries before reading line by line: every point where data
an attacker can influence (request headers, query, body, uploads, filenames,
env vars, config files, CLI args, subprocess output, third-party API
responses, deserialized payloads, database rows written by another actor)
crosses into something the code trusts (a path, a command, a query, a
template, a permission check, a size or loop bound). Find them by search,
not by reading file by file: route and handler definitions, CLI parsers,
upload and file-path handling, raw queries,
exec/eval, deserializers, template rendering. Then rank them by exposure — unauthenticated and internet-facing first, then cross-tenant, then local — and work them in that order. On a large codebase, hand independent areas to subagents where the tool supports them; whatever you did not reach goes under Not reached. - At each boundary, work through the attack classes and decide which apply:
injection (command, SQL, path traversal, template, log, header); auth and
authz bypass (missing check, confused deputy, IDOR, privilege escalation,
default-open config); unsafe deserialization or parsing of untrusted
structured data; races and TOCTOU; resource exhaustion from an
attacker-controlled size, loop, or recursion; SSRF and open redirects;
secrets or internals leaking through errors, logs, or client-visible
responses; cryptographic misuse (weak randomness, missing verification,
reused nonces, timing side channels); supply-chain trust (unpinned or
unverified dependencies,
eval-like loading of external content); and client/server trust inversion, where one side trusts a value the other can freely set. - Build the concrete scenario before writing a finding down: the specific input
or state the attacker controls, the exact path it takes through the code, and
the exact bad outcome — data read, data written, code executed, check
bypassed, service degraded. "This looks unsafe" is not a finding; "an
attacker who controls
XreachesYwithZ, which doesW" is. - Reproduce what you can: run the test suite, the linter, the static analyzer, or the suspected exploit itself against a disposable input, a scratch file outside the repo, or a throwaway process. Where proof would need mutating real state — a live database, a deployed service — write the proof-of-concept down instead of running it.
- Rank findings by exploitability and blast radius, worst first. Mark each CONFIRMED when you traced the whole path and it holds, or PLAUSIBLE when the path looks live but you could not finish it.
- Note briefly where a boundary defended itself — enough to show it was checked. The report is for what is exploitable, not a tour of the codebase.
Constraints
- Read only. Do not fix anything you find, however trivial. Report it. The
report file and its
.gitignoreline are the only writes. - The shell is for inspection and reproduction only: tests, analyzers,
git diff,git log,git blame. Never edit, move, or delete anything inside the target repo through it; scratch work goes outside the working tree. - Findings stay in the report. Do not post them to an issue tracker or a pull request, and do not probe, scan, or run an exploit against a live host.
- This is not a code review. Skip naming, formatting, dead code, missing abstractions, and every other quality-of-implementation concern unless it is itself the vulnerability — a naming collision that routes to the wrong handler, say. If it is not exploitable, it is not your finding.
- Treat every file as guilty until you have traced why it is not, but report the trace rather than the suspicion.
- Do not inflate a plausible finding into a confirmed one, and do not stay quiet about one because you could not prove it.
- No remediation design. State a fix only where it is one obvious line; anything longer is a different job.
Done when
Every trust boundary in scope has been walked or listed under Not reached, most exposed first, and each candidate issue is either discarded or written up with a concrete scenario and a CONFIRMED or PLAUSIBLE mark, ordered most severe first.
Output
Save the report to ADVERSARIAL-REVIEW.md at the repo root, replacing any
earlier one, and add it to .gitignore (creating the file if needed). It
describes working attacks, so it stays local unless the operator decides
otherwise.
Open with one line: whether anything exploitable was found, under which threat model, over which scope.
Then the findings, most severe first, each as:
path:line— attack class — CONFIRMED or PLAUSIBLE- What the attacker controls, the path it takes through the code, and the bad outcome it produces.
- For PLAUSIBLE, what would confirm it or rule it out.
Close with two short lists:
- Held — boundaries you attacked that defended themselves, one line each.
- Not reached — code in scope you could not trace, and the risk that leaves.
Never report "clean". Report what you attacked, and what you did not.
In chat, give only the opening line, the CONFIRMED findings, and where the report was written.
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.

