Adversarial Review
When to use
Use this skill when:
- You've completed a plan, design, or proposed fix and are about to present it.
- The change is non-trivial (affects multiple files, changes behavior, touches critical paths).
- You're about to recommend an architecture or design decision.
- The user submits finished work (draft, post, naming decision, design proposal) and asks for an honest critical take — "what do you actually think?", "be brutal", "was hältst du wirklich davon". The flow is the same Attack-Defend-Revise loop, but on the user's artifact rather than the agent's plan.
Do NOT use when:
- The task is trivial (renaming, formatting, simple config change).
- The user explicitly asked for a quick/rough draft.
- You're exploring options, not committing to one yet.
Inbound delegation: decision-record
§ Weighted-matrix mode delegates a scoped attack here after the weighted
sums ("attack the winner, using the losing options' strongest criteria")
— treat the matrix + sensitivity block as the artifact under review.
Procedure: Adversarial review
- Inspect the artifact — Read the plan, diff, or draft you are about to critique; note its scope, assumptions, and the explicit asks before attacking.
- Attack — Run Step 1 below as the grumpy senior engineer.
- Defend — Run Step 2 as the balanced engineer; classify each criticism as must-fix / defer / reject.
- Revise — Run Step 3 to fold valid fixes back in, then report every criticism with its disposition. Deciding which trade-offs matter is the user's pass, not this step's.
Step 1: Attack (Grumpy Senior Engineer)
Assume your plan/fix is flawed. Ask yourself:
- What's the weakest assumption?
- Where will this break under load, at scale, or with edge cases?
- What did I ignore or hand-wave?
- Is this over-engineered for the actual problem?
- Would a simpler approach work just as well?
- What will the next developer curse me for?
Step 2: Defend (Balanced Engineer)
Counter the criticism fairly:
- Which criticisms are valid and must be addressed now?
- Which are theoretical and can be deferred?
- What's the pragmatic middle ground?
Step 3: Revise
- Fix the valid issues in your plan/fix.
- Move deferred concerns to "Open Questions" or "Known Limitations".
- Present the improved version to the user.
Debate internally, report completely. The user sees the improved result
rather than the blow-by-blow — but every criticism raised reaches the report
with its disposition (must-fix / deferred / rejected, each with one line of
reason). Do not decide on the user's behalf which concerns were worth their
attention.
This clause used to read "surface only the trade-offs that need the user's
input", and that is the pre-filter defect: an instruction to report a subset is
followed literally — the review finds the defects, then withholds the ones it
judged unimportant, and the loss is invisible because the withheld set leaves no
trace. It matters here more than anywhere: self_review_gate.ts loads this file
as the system prompt for the package's own CI self-review, so a suppression
clause here suppresses findings on every pull request.
Context-specific attack questions
Feature plans / Architecture
- Is this the simplest solution that works?
- What happens when requirements change (and they will)?
- Are there hidden dependencies or coupling?
- Does this respect existing patterns or introduce a new one unnecessarily?
- What's the migration/rollback story?
Bug fixes
- Is this the root cause or just a symptom?
- Will this fix break something else?
- Does the fix handle the edge case that caused the bug?
- Is there a regression test that proves the fix works?
- Are there other places with the same bug pattern?
Code changes / Refactoring
- Would I understand this code in 6 months without context?
- Did I check all callers and downstream effects?
- Are the tests actually testing the right behavior?
- Did I introduce a new pattern where an existing one would work?
Database migrations
- Can this destroy or corrupt data?
- Is rollback possible?
- What happens to running queries during migration?
- Did I check the table size (large table ALTER can lock)?
API design
- Is this a breaking change?
- Is it consistent with existing endpoints?
- Are error responses clear and actionable?
- Did I consider pagination, filtering, versioning?
Security-sensitive changes
- Where is the attack surface I'm not seeing?
- Am I trusting user input anywhere?
- Are there authorization gaps?
- Would this pass a security review?
Integration with other skills
- feature-planning — adversarial review after Understanding Lock, before presenting the plan.
- bug-analyzer — review the proposed fix before implementing.
- code-review — self-review before creating a PR.
- laravel-migration (or framework-native equivalent) — review migration for data safety.
- api-design — review API design for consistency and breaking changes.
- security — review security-sensitive changes for attack surface.
RDP: fresh-context verifier as the default gate (structural)
Within the Reasoning Discipline Protocol the fresh-context verifier subagent is
the default final gate — but, because it is a full extra inference pass, it
fires only on the structural-complexity signal: ≥ 2 of {branching/conditional
logic, ≥ 3 explicit must/must-not constraints, stateful operations,
irreversibility} and estimated work ≥ ~1k tokens. Token length alone never
triggers it. See rdp-gate (L12).
Validate
- Confirm each identified risk has a concrete mitigation or explicit acceptance.
- Verify the review produced at least one actionable finding (or explicit "no issues found").
- Check that the review did not just restate the plan — it must challenge assumptions.
Output format
- Improved plan/code incorporating adversarial findings
- Every criticism raised, each with severity and disposition (must-fix /
deferred / rejected) and one line of reason. Not "top concerns" — a summary
that keeps only the highlights is the pre-filter defect wearing an
editor's hat.
- Remaining open risks (if any) with severity rating
Gotcha
- Don't use this on trivial changes — it adds overhead without value on simple renames or config tweaks.
- The model tends to invent risks that don't exist. Ground every concern in actual code, not hypotheticals.
- Don't challenge the user's explicit requirements — challenge the implementation, not the goal.
Do NOT
- Do NOT present the raw adversarial debate to the user — only the improved result.
- Do NOT use this as an excuse to delay work — the review should take seconds, not minutes.
- Do NOT apply this to trivial changes — it adds overhead without value.
- Do NOT let the "grumpy engineer" kill good ideas — the balanced engineer must counter.
- Do NOT skip Step 3 (Revise) — attacking without improving is just complaining.
References
- Tree-of-Thoughts (ToT) — arxiv.org/abs/2305.10601
Deliberate problem-solving by exploring multiple reasoning branches.
This skill adapts ToT by pitting a grumpy engineer against a
balanced engineer — the branching happens between roles, not
between thought-tree nodes.
1---2name: adversarial-review3description: Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.4---56# Adversarial Review78## When to use910Use this skill when:11- You've completed a plan, design, or proposed fix and are about to present it.12- The change is non-trivial (affects multiple files, changes behavior, touches critical paths).13- You're about to recommend an architecture or design decision.14- The user submits **finished work** (draft, post, naming decision, design proposal) and asks for an honest critical take — "what do you actually think?", "be brutal", "was hältst du wirklich davon". The flow is the same Attack-Defend-Revise loop, but on the user's artifact rather than the agent's plan.1516Do NOT use when:17- The task is trivial (renaming, formatting, simple config change).18- The user explicitly asked for a quick/rough draft.19- You're exploring options, not committing to one yet.2021**Inbound delegation:** [`decision-record`](../decision-record/SKILL.md)22§ Weighted-matrix mode delegates a scoped attack here after the weighted23sums ("attack the winner, using the losing options' strongest criteria")24— treat the matrix + sensitivity block as the artifact under review.2526## Procedure: Adversarial review27281. **Inspect the artifact** — Read the plan, diff, or draft you are about to critique; note its scope, assumptions, and the explicit asks before attacking.292. **Attack** — Run Step 1 below as the grumpy senior engineer.303. **Defend** — Run Step 2 as the balanced engineer; classify each criticism as must-fix / defer / reject.314. **Revise** — Run Step 3 to fold valid fixes back in, then report every criticism with its disposition. Deciding which trade-offs matter is the user's pass, not this step's.3233### Step 1: Attack (Grumpy Senior Engineer)3435Assume your plan/fix is flawed. Ask yourself:3637- What's the weakest assumption?38- Where will this break under load, at scale, or with edge cases?39- What did I ignore or hand-wave?40- Is this over-engineered for the actual problem?41- Would a simpler approach work just as well?42- What will the next developer curse me for?4344### Step 2: Defend (Balanced Engineer)4546Counter the criticism fairly:4748- Which criticisms are valid and must be addressed now?49- Which are theoretical and can be deferred?50- What's the pragmatic middle ground?5152### Step 3: Revise5354- Fix the valid issues in your plan/fix.55- Move deferred concerns to "Open Questions" or "Known Limitations".56- Present the improved version to the user.5758**Debate internally, report completely.** The user sees the improved result59rather than the blow-by-blow — but every criticism raised reaches the report60with its disposition (must-fix / deferred / rejected, each with one line of61reason). Do not decide on the user's behalf which concerns were worth their62attention.6364This clause used to read *"surface only the trade-offs that need the user's65input"*, and that is the pre-filter defect: an instruction to report a subset is66followed literally — the review finds the defects, then withholds the ones it67judged unimportant, and the loss is invisible because the withheld set leaves no68trace. It matters here more than anywhere: `self_review_gate.ts` loads this file69as the system prompt for the package's own CI self-review, so a suppression70clause here suppresses findings on every pull request.7172## Context-specific attack questions7374### Feature plans / Architecture7576- Is this the simplest solution that works?77- What happens when requirements change (and they will)?78- Are there hidden dependencies or coupling?79- Does this respect existing patterns or introduce a new one unnecessarily?80- What's the migration/rollback story?8182### Bug fixes8384- Is this the root cause or just a symptom?85- Will this fix break something else?86- Does the fix handle the edge case that caused the bug?87- Is there a regression test that proves the fix works?88- Are there other places with the same bug pattern?8990### Code changes / Refactoring9192- Would I understand this code in 6 months without context?93- Did I check all callers and downstream effects?94- Are the tests actually testing the right behavior?95- Did I introduce a new pattern where an existing one would work?9697### Database migrations9899- Can this destroy or corrupt data?100- Is rollback possible?101- What happens to running queries during migration?102- Did I check the table size (large table ALTER can lock)?103104### API design105106- Is this a breaking change?107- Is it consistent with existing endpoints?108- Are error responses clear and actionable?109- Did I consider pagination, filtering, versioning?110111### Security-sensitive changes112113- Where is the attack surface I'm not seeing?114- Am I trusting user input anywhere?115- Are there authorization gaps?116- Would this pass a security review?117118## Integration with other skills119120- **feature-planning** — adversarial review after Understanding Lock, before presenting the plan.121- **bug-analyzer** — review the proposed fix before implementing.122- **code-review** — self-review before creating a PR.123- **laravel-migration** (or framework-native equivalent) — review migration for data safety.124- **api-design** — review API design for consistency and breaking changes.125- **security** — review security-sensitive changes for attack surface.126127## RDP: fresh-context verifier as the default gate (structural)128129Within the Reasoning Discipline Protocol the fresh-context verifier subagent is130the **default** final gate — but, because it is a full extra inference pass, it131fires only on the **structural-complexity** signal: ≥ 2 of {branching/conditional132logic, ≥ 3 explicit must/must-not constraints, stateful operations,133irreversibility} **and** estimated work ≥ ~1k tokens. Token length alone never134triggers it. See [`rdp-gate`](../../contexts/execution/rdp-gate.md) (L12).135136### Validate137138- Confirm each identified risk has a concrete mitigation or explicit acceptance.139- Verify the review produced at least one actionable finding (or explicit "no issues found").140- Check that the review did not just restate the plan — it must challenge assumptions.141142## Output format1431441. Improved plan/code incorporating adversarial findings1452. **Every criticism raised**, each with severity and disposition (must-fix /146 deferred / rejected) and one line of reason. Not "top concerns" — a summary147 that keeps only the highlights is the pre-filter defect wearing an148 editor's hat.1493. Remaining open risks (if any) with severity rating150151## Gotcha152153- Don't use this on trivial changes — it adds overhead without value on simple renames or config tweaks.154- The model tends to invent risks that don't exist. Ground every concern in actual code, not hypotheticals.155- Don't challenge the user's explicit requirements — challenge the implementation, not the goal.156157## Do NOT158159- Do NOT present the raw adversarial debate to the user — only the improved result.160- Do NOT use this as an excuse to delay work — the review should take seconds, not minutes.161- Do NOT apply this to trivial changes — it adds overhead without value.162- Do NOT let the "grumpy engineer" kill good ideas — the balanced engineer must counter.163- Do NOT skip Step 3 (Revise) — attacking without improving is just complaining.164165## References166167- **Tree-of-Thoughts (ToT)** — [arxiv.org/abs/2305.10601](https://arxiv.org/abs/2305.10601)168 Deliberate problem-solving by exploring multiple reasoning branches.169 This skill adapts ToT by pitting a grumpy engineer against a170 balanced engineer — the branching happens between roles, not171 between thought-tree nodes.172