risk-officer
Surface risks the implementer or PO is likely to underweight, score
them by likelihood × impact, and propose mitigations the team
can actually execute. Sibling of
threat-modeling (security-only)
and blast-radius-analyzer
(call-site only) — this skill takes the wider product, ops, and
coordination view.
When to use
- Pre-implementation: a roadmap, ADR, or refined ticket needs a risk
pass before the team commits.
- Pre-merge: a non-trivial diff is about to land and the team wants
one more risk lens beyond the four standard judges.
- Post-incident: surface the risks the team should track to prevent
recurrence (without writing the post-mortem itself).
- German triggers: "was kann schiefgehen?", "Risiko-Check", "wo
brennt es?".
Do NOT use when:
Procedure
1. Inspect the change
Read the input (roadmap step, ticket, diff, post-mortem) and identify
the scope in one sentence: "This change does X for users Y, touching
systems Z." If you cannot, the artefact is not reviewable — stop and
ask.
2. Enumerate risks across five lenses
| Lens |
Sample questions |
| Product |
Wrong outcome shipped, churn, support load, brand impact |
| Operations |
Rollback path, observability, on-call burden, alert noise |
| Coordination |
Cross-team dependencies, communication gaps, sequencing |
| Data |
Loss, corruption, leakage, retention, compliance, residency |
| Time |
Schedule slip, opportunity cost, sunk-cost lock-in |
Per lens, list each risk as a single bullet. Reject vague risks —
"could break things" is not a risk; "queue worker silently drops
messages on retry exhaustion" is.
3. Score each risk
For every risk, assign L (likelihood: low / med / high) and I
(impact: low / med / high). Top-5 sort by LxI rank; cite the
trigger condition for each L and I. Do NOT pad to a fixed count —
three sharp risks beat ten generic ones.
4. Propose mitigations
For the top-5 risks, propose one mitigation that the team can
own. Each mitigation has an owner role (eng, ops, PO, support), a
rough size (S / M / L), and a residual-risk note (what stays after
mitigation). Mitigations the team cannot execute are not mitigations
— flag them as accept or escalate.
5. Issue a verdict
| Verdict |
When to issue |
proceed |
Top-5 risks have owned mitigations; residual is acceptable |
proceed-with-mitigations |
Mitigations must land BEFORE or WITH the change |
pause |
One or more high × high risks have no executable mitigation |
pause is not a veto — it forces the user to decide explicitly.
6. Validate the verdict
Before emitting, verify each top-5 risk has: a concrete trigger, a
scored L×I, an owned mitigation (or explicit accept), and a
residual note. Ensure the verdict matches the worst residual — a
high × high residual without executable mitigation must produce
pause, not proceed.
Output format
The report is a single block with these ordered fields:
Target: — one-sentence scope from step 1
Top-5 risks: — numbered list, each with L=, I=, trigger,
mitigation, owner, size, residual
Other risks tracked: — count of risks below the top-5 cut
Verdict: — exactly one of proceed / proceed-with-mitigations
/ pause
Risk-Officer
Target: <one-sentence scope>
Top-5 risks:
1. 🔴 <risk> (L=high, I=high) Trigger: <condition>
Mitigation: <action> Owner: <role> Size: <S/M/L>
Residual: <what remains>
2. 🟡 <risk> (L=med, I=high) ...
Other risks tracked: <count>, summarised below or omitted if low/low.
Verdict: proceed | proceed-with-mitigations | pause
Gotcha
- A risk without a trigger is a vibe, not a risk. Reject vibes.
- Likelihood is conditional on the change — not the universal base
rate of the system. "Postgres goes down" is not a risk of this
change unless the change increases that likelihood.
- Mitigations the team will not execute are theatre. Be honest in
the residual-risk note.
Do NOT
- Do NOT enumerate every conceivable risk — top-5 with rationale is
the contract.
- Do NOT score
high × high reflexively to be cautious; mis-scoring
destroys the rank.
- Do NOT propose mitigations the agent itself will own — the owner
is always a human role.
- Do NOT issue
pause as a soft veto on something the user already
decided; issue proceed-with-mitigations and surface the residual.
1---2name: risk-officer3description: Use when surfacing and prioritising risk before commit — blast-radius framing, mitigations, residual-risk verdict — even if the user just says 'what could go wrong here?'.4---56# risk-officer78> Surface risks the implementer or PO is likely to underweight, score9> them by **likelihood × impact**, and propose mitigations the team10> can actually execute. Sibling of11> [`threat-modeling`](../threat-modeling/SKILL.md) (security-only)12> and [`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md)13> (call-site only) — this skill takes the wider product, ops, and14> coordination view.1516## When to use1718- Pre-implementation: a roadmap, ADR, or refined ticket needs a risk19 pass before the team commits.20- Pre-merge: a non-trivial diff is about to land and the team wants21 one more risk lens beyond the four standard judges.22- Post-incident: surface the risks the team should track to prevent23 recurrence (without writing the post-mortem itself).24- German triggers: "was kann schiefgehen?", "Risiko-Check", "wo25 brennt es?".2627Do NOT use when:2829- The concern is exclusively security or authZ — route to30 [`threat-modeling`](../threat-modeling/SKILL.md) or31 [`judge-security-auditor`](../judge-security-auditor/SKILL.md).32- The concern is exclusively call-site impact of a refactor — route33 to [`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md).34- The user wants a fix, not a risk view — risk-officer never patches.3536## Procedure3738### 1. Inspect the change3940Read the input (roadmap step, ticket, diff, post-mortem) and identify41the scope in one sentence: *"This change does X for users Y, touching42systems Z."* If you cannot, the artefact is not reviewable — stop and43ask.4445### 2. Enumerate risks across five lenses4647| Lens | Sample questions |48|---|---|49| Product | Wrong outcome shipped, churn, support load, brand impact |50| Operations | Rollback path, observability, on-call burden, alert noise |51| Coordination | Cross-team dependencies, communication gaps, sequencing |52| Data | Loss, corruption, leakage, retention, compliance, residency |53| Time | Schedule slip, opportunity cost, sunk-cost lock-in |5455Per lens, list each risk as a single bullet. Reject vague risks —56"could break things" is not a risk; "queue worker silently drops57messages on retry exhaustion" is.5859### 3. Score each risk6061For every risk, assign **L** (likelihood: low / med / high) and **I**62(impact: low / med / high). Top-5 sort by `LxI` rank; cite the63trigger condition for each L and I. Do NOT pad to a fixed count —64three sharp risks beat ten generic ones.6566### 4. Propose mitigations6768For the top-5 risks, propose **one** mitigation that the team can69own. Each mitigation has an owner role (eng, ops, PO, support), a70rough size (S / M / L), and a residual-risk note (what stays after71mitigation). Mitigations the team cannot execute are not mitigations72— flag them as `accept` or escalate.7374### 5. Issue a verdict7576| Verdict | When to issue |77|---|---|78| `proceed` | Top-5 risks have owned mitigations; residual is acceptable |79| `proceed-with-mitigations` | Mitigations must land BEFORE or WITH the change |80| `pause` | One or more `high × high` risks have no executable mitigation |8182`pause` is not a veto — it forces the user to decide explicitly.8384### 6. Validate the verdict8586Before emitting, verify each top-5 risk has: a concrete trigger, a87scored L×I, an owned mitigation (or explicit `accept`), and a88residual note. Ensure the verdict matches the worst residual — a89`high × high` residual without executable mitigation must produce90`pause`, not `proceed`.9192## Output format9394The report is a single block with these ordered fields:95961. `Target:` — one-sentence scope from step 1972. `Top-5 risks:` — numbered list, each with `L=`, `I=`, trigger,98 mitigation, owner, size, residual993. `Other risks tracked:` — count of risks below the top-5 cut1004. `Verdict:` — exactly one of `proceed` / `proceed-with-mitigations`101 / `pause`102103```104Risk-Officer105Target: <one-sentence scope>106107Top-5 risks:1081. 🔴 <risk> (L=high, I=high) Trigger: <condition>109 Mitigation: <action> Owner: <role> Size: <S/M/L>110 Residual: <what remains>1112. 🟡 <risk> (L=med, I=high) ...112113Other risks tracked: <count>, summarised below or omitted if low/low.114115Verdict: proceed | proceed-with-mitigations | pause116```117118## Gotcha119120- A risk without a trigger is a vibe, not a risk. Reject vibes.121- Likelihood is conditional on the change — not the universal base122 rate of the system. "Postgres goes down" is not a risk of *this123 change* unless the change increases that likelihood.124- Mitigations the team will not execute are theatre. Be honest in125 the residual-risk note.126127## Do NOT128129- Do NOT enumerate every conceivable risk — top-5 with rationale is130 the contract.131- Do NOT score `high × high` reflexively to be cautious; mis-scoring132 destroys the rank.133- Do NOT propose mitigations the agent itself will own — the owner134 is always a human role.135- Do NOT issue `pause` as a soft veto on something the user already136 decided; issue `proceed-with-mitigations` and surface the residual.