Adversarially challenges a proposed plan, code change, or bug diagnosis from a hostile pre-mortem perspective. Walks a fixed taxonomy of failure modes, blast radius, rollback, hidden coupling, and maintainability; every finding must cite a file, line, or named assumption; forces a steelman of at least one alternative. Surfaces concerns only — does not score (delegates to `/confidence`) and does not apply fixes. Use during planning before autonomous execution, before opening a high-stakes PR, or when a fix "feels off". One adversarial pass per run — naïve self-refine loops amplify bias. Modes: plan (default), code, analysis; add `deep` to run 3–5 independent persona lenses in parallel (sub-agents when available, personas found via `ideate`) and merge them — e.g. at the end of a feature. Triggers on "critical", "challenge this", "pre-mortem", "red-team this", "deep critical review", "review from every angle", "/critical".
69
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Challenge the proposed work as a hostile staff engineer would.
Surface specific, grounded failure modes; force at least one steelmanned alternative; hand scoring to /confidence.
Why this exists, in one paragraph. A single LLM "be honest" pass tends to confirm rather than challenge — naïve self-refine has been shown to amplify bias (Pride and Prejudice, ACL 2024) and to add no gains over self-consistency when the initial answer is already strong (SELF-[IN]CORRECT, AAAI). External grounding plus a fixed taxonomy beats vague introspection (CRITIC framework). This skill is the structured counter-pressure: one pass, hostile persona, mandatory citations, mandatory steelman, no self-scoring.
plan modecode modeanalysis mode| Use it | Don't use it |
|---|---|
| Before locking a plan or handing off to autonomous execution | On routine, low-stakes edits (typos, doc tweaks, trivial refactors) |
| When the user says "I'm in doubt", "challenge this", "is this really right" | After /confidence already passed at ≥ 90% with zero concerns |
| Right before a high-stakes PR (migrations, auth, billing, shared infra) | As a reflex on every change — the cost outweighs the value |
| Mid bug investigation when the proposed root cause feels off | When you only need a syntactic check — /code-quality covers that |
Slash form: /critical [plan|code|analysis] | When iteration is desired — this skill is single-pass by design |
End of a feature, before the PR: /critical deep code | deep on a routine change — it costs ~5 sub-agent dispatches |
Parse the user's argument ($ARGUMENTS).
Default to plan if no argument.
| Argument | Default | Target | Typical caller |
|---|---|---|---|
plan | yes | A plan.md or proposed approach | Planning phase, before autonomous execution |
code | A diff or set of changed files | Reviewer agent (--critical), pre-PR | |
analysis | A root-cause + fix proposal | /implement-suggestion Phase 4 (per review comment, before the /confidence gate) |
A deep first token is a depth modifier, not a target: strip it, detect the target from the next token, and follow Deep mode.
State the detected mode in one line before running: Mode: critical/<mode>. Target: <one-line summary>. (deep: Mode: critical/deep/<mode>. Lenses: <n>.)
/critical deep [plan|code|analysis] runs the same pre-mortem through 3–5 independent persona lenses in parallel and merges them into one report.
Skill("ideate", "quick …"), or picked from a fallback catalog when ideate is missing.Independence: single-context (reduced).raised by: <lenses>), picks one steelman, and lists the other alternatives — it never adds a finding of its own.Deep mode keeps every hard rule: one round, no scores, no edits.
Full procedure, lens catalog, sub-agent prompt contract, and output format: rules/deep-mode.md.
Adopt the persona explicitly at the top of every run:
You are a hostile staff engineer running a pre-mortem. The proposed work has already failed in production six months from now. Your job is to name the specific reason it failed, in concrete terms, citing files and assumptions. Friendly reviewers get fired in this scenario. Be specific, be uncomfortable, be useful.
Three rules the persona enforces:
Pure introspection is unreliable. Before writing the findings, run at least one grounding action appropriate to the mode:
plan mode — Read the plan.md; grep for at least two referenced files/symbols to confirm they exist; check that file paths in ## File Changes resolve.code mode — Read the diff; Grep for callers of any changed function; check the test file count delta.analysis mode — Read the proposed evidence; Grep for the failing path in the codebase; verify the repro command if present.If a referenced file, symbol, or path does not resolve, that is itself a finding (categorised as must-fix — hallucinated grounding).
plan modeWalk every row.
For each, either produce a specific challenge or write — ok and a one-line reason.
Vague "looks fine" is not allowed.
| # | Concern | Probe |
|---|---|---|
| 1 | Hidden assumptions about data, scale, or users | What is the plan assuming about input shape, volume, concurrency, or user behaviour? |
| 2 | Top three production failure modes | Name three specific ways this breaks in production. Not "could fail" — what fails, in what flow. |
| 3 | Blast radius | What else is affected? Shared state, callers, downstream services, RBAC, billing, audit logs. |
| 4 | Rollback / reversibility | If this fails 30 minutes post-deploy, can it be reverted cleanly? Any one-way migrations? |
| 5 | Hidden coupling | Which implicit dependencies (env, ordering, schemas, feature flags) does this rely on? |
| 6 | Maintainability | Will a new engineer understand it in 6 months? Naming, layering, indirection. |
| 7 | Scope creep / incidental change | Is anything being changed that isn't strictly required to satisfy the requirement? |
| 8 | Test design (assertion strength, not coverage) | Do the planned tests assert behaviour, or just shape? What would a passing test miss? |
Row 9 is the Steelman alternative — separate section because it is mandatory.
code modeWalk every row. Skip rows that are not applicable to the diff, but state which were skipped.
| # | Concern | Probe |
|---|---|---|
| 1 | Edge cases on changed paths | Empty input, max length, zero, negative, null, unicode, off-by-one, leap-second / DST |
| 2 | Concurrency, races, ordering | What happens under two concurrent callers? Retry storms? Deadlock potential? |
| 3 | Error paths and partial failures | What does the caller see when each try/catch, await, or external call fails halfway through? |
| 4 | Performance / hot path | N+1 queries, unbounded allocations, sync IO in async paths, regressions vs. the prior implementation |
| 5 | Test assertion strength | Do tests assert the meaningful output, or just that something was called? |
| 6 | Backwards compatibility / migration safety | API consumers, on-disk format, persisted state, feature-flag combinations |
| 7 | Naming and clarity for future readers | Misleading names, leaky abstractions, surprises at the boundary |
| 8 | Security / authz / PII surface | New attack surface, missing authz, logged secrets, broadened access |
Row 9 is the Steelman alternative.
analysis mode| # | Concern | Probe |
|---|---|---|
| 1 | Root cause vs. symptom | What evidence directly proves the diagnosis vs. merely correlates with it? |
| 2 | Detection gap | Why didn't existing tests / monitoring / types catch this? What is missing? |
| 3 | Alternative root causes | Name at least one other code path that could produce the same symptom. |
| 4 | Fix scope | Does the fix address only the reported symptom, or the class of bug? Justify either choice. |
| 5 | Reproduction integrity | Can the bug be reproduced reliably before the fix and not after? Is the repro itself a weak proxy? |
| 6 | New surface introduced by the fix | What does the fix add that could itself fail? |
Row 7 is the Steelman alternative root cause.
Every run must include exactly one steelman section.
This is the load-bearing differentiator vs. /confidence — without it, the run is incomplete.
Structure:
### Steelman alternative
**Alternative:** <one-line description of a credible different approach / root cause>
**Why it might be better:**
- <argument 1 — concrete advantage>
- <argument 2 — concrete advantage>
**Why we chose differently (or why we should reconsider):**
- <argument 1 — concrete reason the proposed approach wins, OR an honest "we should reconsider">Rules:
Use this exact structure:
## Adversarial review (critical/<mode>)
**Target:** <one-line description of the plan / diff / analysis under review>
**Persona:** Hostile staff engineer, pre-mortem.
**Grounding actions run:** <list of `Read` / `Grep` / `Bash` calls performed>
### Must-fix
1. <Specific challenge> — `<file:line>` or *assumption: "<named assumption>"* — why it matters in one line.
2. ...
### Should-fix
1. ...
### Nice-to-have
1. ...
### Steelman alternative
<see structure above>
### Skipped rows (with reason)
- Row N (Concern): <reason — e.g. "not applicable, no concurrency in changed paths">
### Next step
Run `/confidence <mode>` once the must-fix items are addressed.
Do not re-run `/critical` — single-pass by design.Classification rules:
If Must-fix and Should-fix are both empty, output No blocking concerns found. plus the mandatory steelman — do not pad the output.
/critical is designed to compose, not to replace:
| Skill | When | How |
|---|---|---|
/code-quality | A code-mode finding needs static-rule backing | Invoke Skill("code-quality") to confirm before classifying as must-fix |
/confidence | After findings are addressed | Suggest /confidence <mode> in the Next step section — do not score here |
/holistic-analysis | An analysis finding suggests the root cause is wrong | Suggest the user re-run /holistic-analysis before the /confidence gate |
/ideate | deep mode, lens discovery | Skill("ideate", "quick --no-framing --n <k> …") — see rules/deep-mode.md |
/optimize-approach | optimize-approach --deep wants alternatives from many angles | It calls Skill("critical", "deep code") and consumes Other alternatives raised |
This skill never invokes /confidence on the user's behalf and never produces a numeric score of its own.
Scoring is /confidence's job; conflating the two would re-create the bias amplification problem the literature warns against.
The following are non-negotiable. A run that violates any of them is incomplete.
deep mode's lenses run in parallel within that one pass and never see each other's output./confidence./critical run.39b3f44
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.