Agent skill

confirm-approvals is a small set of instructions that teach an agent when to pause for a human. It is the coverage layer: it does not enforce anything on its own, it makes the model reliably reach for approval on the actions that warrant it. The instructions are model-agnostic. Use them as a Claude skill, as Gemini system instructions, or in any system prompt.

Two jobs, don't confuse them. Deciding when to ask is the skill's job (and the model's). Guaranteeing an unapproved action can't run is the policy engine's job (guard()). The model is the thing you are guarding, so a skill is never the boundary; it is coverage on top of one. Use both.

What it teaches

  • Request approval before money movement, destruction (deletes, drops, revokes), deploys and config changes, outbound messages, and access changes, or anything above a threshold. When unsure, ask.
  • Skip approval for read-only or easily reversible work.
  • Write a decidable summary with the real stakes, and pass context (why, and what it did first).
  • Honor the verdict exactly: on approval, use the returned effectivePayload (the human may have edited it); on rejection or expiry, do not act and do not route around the step.

Install it

The instructions live at one stable URL: https://confirm.dev/confirm-approvals.md. Point your agent at it however your stack loads instructions.

Claude (Claude Code, Agent SDK)

Drop it in the skills directory and it loads automatically.

terminal
mkdir -p .claude/skills/confirm-approvals
curl -o .claude/skills/confirm-approvals/SKILL.md \
  https://confirm.dev/confirm-approvals.md

Gemini

Pass the file's contents as the system instruction.

python
import requests
from google import genai
from google.genai import types

skill = requests.get("https://confirm.dev/confirm-approvals.md").text

client = genai.Client()
response = client.models.generate_content(
    model="gemini-2.5-pro",
    contents="Refund customer #4821 for the duplicate charge.",
    config=types.GenerateContentConfig(
        system_instruction=skill,
        # tools=[request_approval]  # your function that calls the Confirm.dev API
    ),
)

Any other agent

Fetch https://confirm.dev/confirm-approvals.md and prepend its contents to your system prompt. The YAML header is Claude skill metadata and is harmless elsewhere; the body is plain instructions.

Pair it with a tool

The skill tells the agent to request approval and wait. Give it a real way to do that:

  • MCP server — the instructions line up with the request_approval tool from confirm-mcp. Add both and an MCP agent both knows when to ask and has the tool to do it.
  • SDK — in TypeScript, the deterministic path is guard() policies. Use the skill for the long tail your policies didn't enumerate; keep policies as the floor.
  • API — any language: the agent's tool just calls POST /v1/requests and waits for the verdict.