>- ALWAYS invoke this skill before anything hard to undo gets agreed to - a contract, a purchase, a migration, a launch, a price change, a reorganisation - and whenever the user asks "what could go wrong", "what are we missing", "poke holes in this", or for a premortem or a red team, in any language. Assumes the decision already failed and works backwards to find out why, in a fresh agent that had no hand in making it. Sweeps nine areas go ahead, go but fix these first, try it small first, think again, do not do this.
npx skills add https://github.com/kharmanskyi/open-steps --skill os-what-could-go-wrong
Assume it already failed, then work backwards to find out why - while there is
still time to change it. The attack runs in a fresh agent that had no part in
the decision, because an agent that helped shape one reviews it far too
gently: it defends its own reasoning, and it misses the thing that kills the
plan out of politeness. This skill writes the brief, hands it over, and passes
the answer back without softening it.
os-ask-simple screens a choice before the user picks one. This one runs
after the choice is made and before it can no longer be taken back.
Write in the language the user speaks in this session, detected from the
conversation. Names, figures and identifiers stay as they are. The agent you
dispatch cannot see this conversation and does not inherit the writing style,
so the language has to travel with the handover - see step 2.
Find the decision first. Given as text or a document, that is it. Asked at the
end of a discussion, it is the decision the discussion arrived at, and say
which one you took it to be. If neither, ask which decision to attack.
Then fill every line. This is the only thing the fresh agent will ever see.
DECISION BRIEF
What will be done: three to seven sentences
What it is for: the problem it solves, and what success looks like, measured
wherever it can be
The main moves: the money, the people, the systems, the dates
What is fixed: the constraints, plus the surrounding facts that matter
Who it lands on: who and what is affected if this goes wrong
What cannot be undone: which parts are one-way
When we would know: the date success or failure actually gets judged
What we know: facts from documents, data, the repository, past incidents,
each with where it came from
What we are assuming: every gap nobody could close, written as an assumption
Close the gaps in this order, and stop as soon as a gap is closed.
in ~/.claude/open-steps/reports/, what went wrong last time.
verdict is worth the user's attention, and the pack's own rule holds here:
one question at a time, through os-ask-simple. Three is plenty. Nobody
there to answer, or an answer that would not move the verdict -> skip
straight to 3.
mark it (assumed), and repeat it under "What we are assuming".
The brief states facts and open questions. It never makes the case for the
decision: a brief that argues gets a report that agrees.
Pick the depth, say which one in a single line, and carry on. The user can
change it at any point.
| Depth | When |
|---|---|
| Full | Hard to undo, or being wrong costs money, trust or data beyond one team |
| Quick | Reversible, and cheap to be wrong about, whoever it touches |
When in doubt, Full. The cost of a full look is a few minutes; the cost of a
quick look at a one-way door is the door.
Dispatch one general-purpose agent. Its prompt is these four things in order,
nothing else:
under "The analysis prompt, verbatim"
MODE: Full or MODE: QuickLANGUAGE: <the language from above>Copy the inlined prompt exactly. Never summarise it or paste part of it. Its
rules are what stop the answer turning into a list of worries, and the writing
rules inside it are the only ones that reach the agent at all.
One agent, not several. Two reports have two verdicts and two candidates for
the single belief nobody is questioning, and merging them is exactly the
editing that step 3 forbids.
Pass the report through as it came. No reassurance the analysis did not earn,
no cushion sentence in front of the verdict, no quietly dropped card because
the user seemed committed. Bad news that arrives late is worth nothing.
Then offer to turn the "Fix before you commit" list into real things: edits to
the plan, tickets, an owner and a date per item, a reminder for each early
warning. That offer is the point of the whole exercise - a premortem nobody
acts on was entertainment.
"Go ahead" is delivered just as plainly. It means the plan was attacked and
held.
fresh one every time, even when you already hold the whole thing in
context. Skipping this does not save a step, it changes the answer.
else. Two well-evidenced risks beat six padded ones, and "only two
survived" is a finding worth saying out loud.
assemble it from the risks.
produced nothing. An area nobody mentions and an area nobody checked look
the same to the reader.
technical review; the nine areas apply to both, and the money and people
ones are where technical decisions usually actually fail.
is never a substitute for running one.
without "by when". Pick a date that fits the decision, and say you picked it.
else. The usual failure is a brief missing the one constraint that made the
decision sensible, which produces a confident report attacking a plan nobody
proposed.
answer.** The record of what was checked is what tells those apart.
does not need one. Running a full attack on a two-day experiment teaches the
user to ignore the next one.
testable and worth testing before the money moves.
now have the early warnings. Note it once, set the tripwires up if they want
them, and do not re-argue the report.
The block below is the whole of
references/premortem-prompt.md, inlined
when this skill loads, so no file has to be read at dispatch time. If the
block shows a literal cat command instead of the prompt, this harness does
not run inline commands: open that file next to this one and use its full
text.
!cat ${CLAUDE_SKILL_DIR}/references/premortem-prompt.md
Take kharmanskyi/os-what-could-go-wrong from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.