Install
openclaw skills install @kiingsai/devils-advocateTrigger /devil to pressure-test a decision through a multi-model council, fact-check pass, peer review, and a mandatory devil's-advocate stress test.
openclaw skills install @kiingsai/devils-advocateRun a real decision through 5 independent AI advisors — across two model families when available — a fact-check pass, peer review, a mandatory adversarial stress test, and a confidence-rated final verdict.
Not a theoretical prompt template. Built by running it live, twice, on a real decision, watching exactly where it broke, and fixing that specific failure instead of guessing at improvements. Two real bugs got caught and fixed this way — see Guardrails.
| Capability | Needed for | If missing |
|---|---|---|
| Parallel sub-agent spawning | Steps 2, 5, 7 (the whole council) | Required — this skill doesn't work without it |
| A second model/provider | Step 2's multi-model routing | Falls back to single-model — still works, loses one layer of diversity |
| Web search / fetch | Step 1's auto data-lookup | Falls back to asking the user for facts directly |
| Browser automation | Step 1's JS-rendered page lookup (e.g. live dashboards) | Falls back to web fetch, then asking the user |
| Cron / scheduled follow-up | Step 10's outcome check-in | Skip Step 10 — everything else still runs |
Every non-required capability degrades gracefully. Run this with nothing but sub-agent spawning and it still does the core job: 5 lenses, peer review, mandatory devil's advocate, confidence rating.
Activate on /devil, or natural phrases: "devil's advocate this", "council this", "run this by the council", "pressure-test this", "stress-test this", "war room this", "what would you do". Don't trigger on simple factual lookups or low-stakes preference questions with no real tradeoff.
Before spawning anyone, gather real data: scan relevant context you already have access to (memory/context files, anything the user referenced or attached).
If the question depends on external facts (stats, prices, public page content, etc.) that aren't already known, try to get them automatically before asking the user:
One clarifying question max if the ask is still too vague after that.
Write ONE context block containing the question plus all real facts gathered, noting which facts were pulled live vs. given by the user vs. unavailable. This exact block gets reused verbatim in every later step — see Step 5, this is a hard rule, not a suggestion.
Same context block, five agents, each told to argue independently and not hedge. If you have access to a second model/provider, route two advisors to it instead of running all 5 on one model — the council shouldn't just be one model wearing five masks. Genuine architectural disagreement catches blind spots a single model shares across all its own personas:
150-300 words each. No preamble.
Why the Contrarian and Outsider specifically, not any 2 of 5: those are the lenses whose entire job is catching what the "home" model's own blind spots miss — putting exactly those two on a different architecture compounds the effect where it matters most. Routing all 5 would lose the benefit of a stable "home team" the chairman and devil's advocate can reason consistently against.
If the alternate model is unavailable or errors out, fall back to the default model for that advisor and note in the final verdict that this run was single-model — don't block the whole council on one model being down.
Before triage or peer review, go through each of the 5 advisor responses individually and pull out every specific factual claim tied to real data (numbers, named events, cited outcomes).
Check each claim against the actual Step 1 context block:
[FACT-CHECK: source data shows X, not Y]. Don't silently delete it — mark it so the correction stays visible to every later step.This is mechanical, not evaluative — you're checking whether an argument's factual anchors are real, not judging whether the argument itself is good. Carry the flagged/annotated responses forward into triage, peer review, and synthesis instead of the raw originals.
Skim the 5 (now fact-checked) responses yourself. Check two things:
If either is true, tag this internally as a CLOSE CALL. This does not change or skip any later step — peer review (Step 5) and the devil's advocate (Step 7) both run exactly the same either way. The flag only changes what gets said in the final confidence rating (Step 8).
Runs regardless of the Step 4 flag, default model for all reviewers. Anonymize the 5 fact-checked responses as A-E (randomize the letter mapping, and don't reveal which model produced which). Spawn 5 new reviewer agents. Each one gets the EXACT SAME context block from Step 1 plus all 5 anonymized, fact-checked responses in full — including any [FACT-CHECK: ...] annotations from Step 3. Each reviewer answers:
Why identical context is a hard rule, not a nice-to-have: compressing or summarizing the context block for reviewers causes reviewers to flag real, given facts as if the advisor invented them — a false-hallucination accusation, caught live in testing. Keep the full block, verbatim, every time.
Under 200 words per review.
One agent, default model, gets everything: all 5 fact-checked responses (de-anonymized), all 5 peer reviews, and the CLOSE CALL flag from Step 4 if set. Produces a draft verdict: where the council agrees, where it clashes, blind spots peer review caught, any fact-check corrections that materially affect the recommendation, a recommendation, one concrete next step.
Spawn one more agent, default model, regardless of how confident Step 6's draft looks. Give it the draft recommendation and the ORIGINAL real data from Step 1 — not the advisor discussion, the source facts. Instruction: build the single strongest case against this recommendation using only the real data provided. No speculation, no new hypotheticals — if the case can't be built from what's actually known, say so plainly instead of inventing a reason.
You (not a new agent) check the devil's advocate's case against the source data:
Why four separate checking layers (Step 3 fact-check, Step 4 triage, Step 5 peer review, Step 7 devil's advocate) exist and aren't redundant: they catch different failure classes. Fact-check verifies individual claims immediately at the source, mechanically, before anything downstream can be built on a bad one. Triage catches an obvious self-contradiction or a fact-check flag fast and cheap, before spending on review. Peer review catches weak arguments and missed considerations through broad evaluative critique — it might or might not catch a specific factual error, that's incidental to its real job. The devil's advocate is the only step whose sole job is attacking the final conclusion against real data, after synthesis. Don't collapse these into one step even though they overlap in what they can catch — they're layered on purpose, not duplicated by accident.
Post directly, markdown, no separate file:
## Council Verdict: {short topic}
### Confidence: {HIGH | LOW}
{One line: HIGH = advisors converged, reasoning held under devil's-advocate stress test, no material fact-check flags. LOW = split decision, and/or a fact-check flag or the devil's advocate exposed a real flaw, and/or the real data feeding the debate was too thin to establish a genuine pattern. If LOW, say plainly: this is closer to a coin flip than a verdict, and recommend a second independent run before committing anything expensive to reverse.}
### Fact-Check Corrections
{Only include this section if Step 3 flagged anything. List each flagged claim and what the source data actually shows.}
### Where the Council Agrees
### Where the Council Clashes
### Blind Spots the Council Caught
### What the Devil's Advocate Found
{Even if it didn't survive, say what it tried and why it failed — this is the receipt that the verdict was actually stress-tested, not just asserted.}
### The Recommendation
### The One Thing to Do First
If Step 2 fell back to single-model for any advisor, note it briefly at the end of the verdict.
Only if the user asks, or the decision is clearly significant. Ask which note/log/location to use if this comes up — don't invent a new convention on the fly. If Step 10 (outcome tracking) gets scheduled, log the transcript regardless of significance — otherwise there's nothing for the follow-up to update.
Only after presenting the Step 8 verdict, and only if "The One Thing to Do First" is a concrete, checkable action (not something vague like "think about it more"). Ask the user: "Want me to check back on this later and log what actually happened?"
Opt-in only — never schedule this automatically. If the user says no or doesn't respond to this specific offer, drop it, don't ask again for this verdict.
If yes: ask the user how long to wait before checking back, rather than assuming a default — a same-day post and a multi-week test have wildly different natural check-in windows, so a hardcoded number would be wrong most of the time.
Once you have a timeframe, schedule a one-shot follow-up that fires in the same conversation, references the specific verdict topic and the exact recommended action, asks what actually happened, and instructs itself to append the real outcome next to the original logged verdict (Step 9's note) — this is what actually builds a track record over time instead of leaving every verdict a one-shot guess.
If Step 9 didn't log a transcript for this verdict, log one now before scheduling — the follow-up needs something to update.