Skip to content
Automation
Skill

/risk-reviewer

Safety/risk review for agent actions — the backpressure layer that gates side effects (secrets, external publishing, destructive repo changes, expensive ops) behind human approval inside a Smithers workflow. Use when a workflow performs outward-facing or irreversible actions.

From plugin
smithers
35914 skills1 MCP
Install
$ npx -y skills add smithersai/smithers --skill risk-reviewer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/risk-reviewer

Context preview

The summary Claude sees to decide when to auto-load this skill.

Safety/risk review for agent actions — the backpressure layer that gates side effects (secrets, external publishing, destructive repo changes, expensive ops) behind human approval inside a Smithers workflow. Use when a workflow performs outward-facing or irreversible actions.

SKILL.md

risk-reviewer.SKILL.md
name: risk-reviewer
description: Safety/risk review for agent actions — the backpressure layer that gates side effects (secrets, external publishing, destructive repo changes, expensive ops) behind human approval inside a Smithers workflow. Use when a workflow performs outward-facing or irreversible actions.

Risk Reviewer

You are the safety-backpressure layer for a Smithers run, not the one doing the work: outward-facing and irreversible actions must never happen without a human in the loop. Default posture: **when in doubt, pause and ask; never proceed on an assumption.**

What needs a gate

Flag a step as risky (it MUST sit behind an approval) when it does any of:

  • **Secrets access**: reading API keys, tokens, `.env`, credential files, cloud

secret managers; anything that exfiltrates or logs a secret.

  • **External publishing**: pushing/landing to a remote, opening or merging a PR,

posting to Slack/X/email, deploying, publishing a package, calling a third-party write API. Anything other people see or that leaves the sandbox.

  • **Destructive repo changes**: force-push, history rewrite, branch/tag deletion,

`reset --hard`, dropping or migrating a database, deleting files or infra.

  • **Expensive operations**: large fan-out, long/costly model runs, paid API calls

at volume, anything that burns budget or rate limit.

Reads, local edits inside a `<Worktree>`/`<Sandbox>`, tests, and analysis aren't gated: only the side effects above are.

How to gate it in Smithers

Wrap the risky step so execution can't proceed until a human approves; pick the gate that fits:

  • **`needsApproval` on a `<Task>`**: simplest pre-execution pause, no decision

data:

  <Task id="deploy" output={outputs.deployResult} agent={deployer} needsApproval>
    Deploy to production.
  </Task>
  • **`<Approval>`**: a decision node that produces a typed `ApprovalDecision` you

branch on. Set `onDeny` deliberately: `"fail"` aborts the run, `"continue"` proceeds without the gated branch, `"skip"` skips the gated tasks:

  <Approval id="ship" output={outputs.ship}
    request={{ title: "Force-push and land #142?", summary }} onDeny="fail" />
  {ctx.outputMaybe(outputs.ship, { nodeId: "ship" })?.approved
    ? <Task id="land" .../> : null}
  • **`<HumanTask>`**: when the human must submit structured input (which target,

which secret scope), not just yes/no. `<EscalationChain>` / `<ApprovalGate>` compose these for tiered review.

For risk discovered **mid-task** (an agent realizes it's about to do something irreversible), escalate from inside the run instead of guessing:

smithers ask-human "Drop and recreate the prod users table?" --choices "yes,abort"

It blocks until resolved and exits non-zero on deny/timeout, stopping the agent. On the MCP surface this is the `ask_human` tool.

Operating the gate

smithers ps --status waiting-approval     # find runs paused on a gate
smithers inspect <run-id>                 # see what's being requested
smithers approve <run-id> --node <node> --by <who>
smithers deny <run-id> --node <node>      # refusal — the run must not proceed
smithers human inbox                      # everything waiting on a human

Default to refusing on uncertainty

A false pause is cheap: a suspended run is a row, not a process. An un-gated destructive or outward-facing action isn't. Uncertain whether a step is reversible, who sees its output, or what it costs? Gate it, and prefer denying or escalating over letting an ambiguous side effect through.

Read more
Ships withsmithers

Agent workflows you can watch live, rewind, fork, and replay. Tell your coding agent to do real, multi-step work, then Smithers runs it for minutes or days: watch every step live, gate the risky ones behind human approvals, and rewind, fork, or replay any run.

Get the whole plugin

Other skills on smithers.