Adversarially review something just built — presume it is broken and find where. Use after implementing a feature, finishing a build, or before shipping, or whenever ATLAS or Boss wants a hostile second opinion on a diff, a running app, or a whole codebase. Spawns clean-context reviewers with opposing lenses (correctness, security, empty-world) and reproduces every finding by running the target before believing it. Distinct from /code-review, which statically reads a diff and never runs the app.
Installs into .claude/skills of the current project.
Are you the author of Adversarial Review?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/syahiidkamil-adversarial-review)
---
name: adversarial-review
description: Adversarially review something just built — presume it is broken and find where. Use after implementing a feature, finishing a build, or before shipping, or whenever ATLAS or Boss wants a hostile second opinion on a diff, a running app, or a whole codebase. Spawns clean-context reviewers with opposing lenses (correctness, security, empty-world) and reproduces every finding by running the target before believing it. Distinct from /code-review, which statically reads a diff and never runs the app.
---
# Adversarial review — presume it broken, find where
A normal review reads code and looks for reasons to approve it. An adversarial review starts from the
opposite prior: **this was just built, it is presumed broken, and the job is to find where.** The
builder believes in their work — that belief is exactly the blind spot. So the reviewer must be
incentivized to find failure, not confirm success, and must work *without the builder's context* so it
cannot inherit the builder's assumptions.
This skill is the canonical adversarial-review protocol for ATLAS. Reach for it autonomously after
building anything non-trivial, before shipping, or when handed unfamiliar code to harden.
## When to use it — and which review
- **Use this** when you want the thing *attacked*: a feature you just finished, a build before
delivery, a flow you suspect is fragile, an unfamiliar codebase you must trust.
- **Use `/code-review` instead** for a fast, conservative pass over a **diff or PR** — it statically
reads the change for bugs and cleanups, scores confidence, and **never runs the app**. That is the
right tool for routine change review.
- **The line between them:** `/code-review` reads; adversarial-review *runs*. This skill presumes
breakage, fans out diverse hostile lenses in clean contexts, and **reproduces findings against the
live target** before believing them. Heavier, empirical, used deliberately.
- **Scale down, don't skip:** for a small change one hostile reviewer is enough. Don't fan out a fleet
to attack a typo fix — deliberating everything ships nothing.
## The four invariants (what makes a review adversarial)
1. **Presumed-broken mandate.** Every reviewer gets one instruction: *"this was just built and is
presumed broken; find where."* Never "check if it looks ok."
2. **Context isolation.** Reviewers run in **clean contexts** (separate subagents) — they get the
target and the mandate, not the build's rationalizations. A separate context window is the closest
thing to a genuine second opinion.
3. **Empirical reproduction.** A finding is a hypothesis until reproduced against the real target.
Run it. A finding that can't be reproduced is an opinion, not a bug.
4. **Senior triage.** Reproduce before fixing, fix what's real, re-verify the fix, and name the false
alarms. The report is only trustworthy if it admits what wasn't real.
## How to run it
1. **Frame the target and scale.** Name what's under review (a diff, a feature, a running app, a whole
codebase) and how to exercise it (commands to run, URLs/flows to walk, entry points). Pick reviewer
count by stakes: 1 for a small change, 3–5 lenses for a feature or build.
2. **Fan out hostile reviewers in clean contexts.** Spawn subagents, each with the presumed-broken
mandate and **one lens**, blind to each other. Choose lenses that fit the target — typically:
- **Correctness** — edge cases, off-by-one, race conditions, broken flows, state that lies
- **Security** — injection, authz/authn holes, secrets in code, unvalidated input, SSRF/path traversal
- **The empty world** — first run, zero data, no config, expired token: does it still stand up?
- **Data integrity** — partial writes, lost updates, migrations, constraints that don't hold
- **Failure & limits** — network/dependency failure, timeouts, huge inputs, concurrent users
- **UX seams** — error messages, loading/empty states, the run instructions a stranger needs
(One-shot work dies at the seams and the empty world far more than the happy path — weight those.)
3. **Reproduce every finding.** Before fixing anything, run the target and confirm the failure
actually happens. Capture the evidence (output, screenshot, failing command). Unreproducible →
demote to "unconfirmed," don't fix on faith.
4. **Triage like a senior.** Fix what reproduced, re-run to confirm the fix closed it (and opened
nothing new), and record what looked like a bug but wasn't. If a fix opens a real design fork,
invoke `free-will`.
## Output — the report
One honest summary:
- **Confirmed & fixed** — what broke, the reproduction, the fix, the re-verification.
- **Confirmed & deferred** — real but consciously not fixed now, and why (goes on the gap list).
- **False alarms** — flagged then disproven. Listing these is what makes the rest credible.
- **Residual risk** — what this pass could not exercise, and what would attack it next.
Never report "no issues found" from a read alone — that claim requires having *run* the lenses and
reproduced nothing. Report what you actually exercised, not what you assume holds.