/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.
$ npx -y skills add smithersai/smithers --skill risk-reviewer --agent claude-codeHow 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.mdname: 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
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.
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.
Repo: smithersai/smithers
Other skills on smithers.
- /orchestrate
Drive Smithers — a durable control plane for long-running coding agents — from inside Hermes. Use for any multi-step, long-running, crash-safe, or human-in-the-loop work: "run a workflow", "implement and review", "keep iterating until tests pass", "plan then build". You are the
Open skill - /orchestrate
Drive Smithers durable workflows from OpenClaw. Use for multi-step, long-running, background, human-in-the-loop, retryable, or repeatable work. Prefer creating or improving a Smithers workflow over repeating ad-hoc agent turns, and use evals plus optimization to improve
Open skill - /smithers
Drive Smithers, a durable control plane for long-running coding agents, from Claude Code. Use when the user wants multi-step, long-running, crash-safe, or human-in-the-loop agent work ('orchestrate agents', 'run a workflow', 'implement this and review it', 'keep iterating until
Open skill - /smithers
Drive Smithers, a durable control plane for long-running coding agents, from Codex. Use when the user wants multi-step, long-running, crash-safe, or human-in-the-loop agent work ("orchestrate agents", "run a workflow", "implement this and review it", "keep iterating until tests
Open skill - /context-engineer
The concierge proxy — turn a vague user script ("I need the agent to help me do X") into a context contract, route it to the right skills/workflows, add backpressure (tests/evals/reviews/approvals), execute, and report. Use when a request is multi-step, durable, or
Open skill - /eval-driven-development
How this repo does eval-driven development (EDD) for Smithers workflows — write the failing suite first, build until green, validate on a holdout, then optimize. Use when adding evals to a workflow, changing a prompt/model/graph that has a suite, setting up a dev/holdout split,
Open skill

