Skip to content
Security
Skill

/create-policies

Create and test DashClaw guard policies for agent governance

From plugin
dashclaw
29120 skills3 agents4 commands5 hooks
+1
Install
$ npx -y skills add ucsandman/DashClaw --skill create-policies --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/create-policies

Context preview

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

Create and test DashClaw guard policies for agent governance

SKILL.md

create-policies.SKILL.md
name: create-policies
description: Create and test DashClaw guard policies for agent governance
license: MIT
metadata:
  author: ucsandman
  version: "1.0.0"
  category: configuration

Create Guard Policies

Help developers define, import, and test guard policies that control what agents can and cannot do.

Policy Types

| Type | Purpose | Example | |------|---------|---------| | `risk_threshold` | Block/warn when risk score exceeds limit | Block actions with risk > 80 | | `action_type_restriction` | Allow/deny specific action types | Block `security` actions without approval | | `approval_gate` | Require human approval for matching actions | Require approval for deploys | | `webhook_check` | Call external endpoint for policy decision | Check Jira ticket status before deploy | | `semantic_guardrail` | LLM-based content analysis | Block PII in action metadata |

Guard Modes

  • **`off`** — No policy enforcement (development only)
  • **`warn`** — Log policy violations but allow execution
  • **`enforce`** — Block policy violations (production recommended)

Defining Policies in YAML

Risk Threshold Policy

name: high-risk-blocker
type: risk_threshold
mode: enforce
conditions:
  risk_score_min: 80
  reversible: false
action: block
reason: "Irreversible actions with risk >= 80 require manual execution"

Action Type Restriction

name: no-unattended-deploys
type: action_type_restriction
mode: enforce
conditions:
  action_types:
    - deploy
    - database
action: require_approval
reason: "Deploy and database actions require human approval"

Approval Gate

name: production-approval-gate
type: approval_gate
mode: enforce
conditions:
  systems_touched:
    - production
  risk_score_min: 50
action: require_approval
reason: "Production access with risk >= 50 requires approval"

Cost Ceiling

name: cost-ceiling
type: risk_threshold
mode: enforce
conditions:
  cost_estimate_max: 100.00
action: block
reason: "Actions exceeding $100 estimated cost are blocked"

Content Filter

name: no-secrets-in-metadata
type: semantic_guardrail
mode: enforce
conditions:
  scan_fields:
    - declared_goal
    - output_summary
  patterns:
    - "password"
    - "api_key"
    - "secret"
action: block
reason: "Sensitive data detected in action metadata"

Importing Policies

Via API

// POST /api/policies
const response = await fetch(`${baseUrl}/api/policies`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.DASHCLAW_API_KEY
  },
  body: JSON.stringify({
    name: 'high-risk-blocker',
    type: 'risk_threshold',
    mode: 'enforce',
    conditions: { risk_score_min: 80, reversible: false },
    action: 'block',
    reason: 'Irreversible high-risk actions are blocked'
  })
});

Via Legacy SDK Policy Packs

import { DashClaw } from 'dashclaw/legacy';

const claw = new DashClaw({ baseUrl, apiKey, agentId });

// Import a preset pack
await claw.importPolicies({ pack: 'enterprise-strict' });
// Available packs: enterprise-strict, smb-safe, startup-growth, development

Testing Policies

Test a Single Policy

// POST /api/policies/test
const result = await fetch(`${baseUrl}/api/policies/test`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.DASHCLAW_API_KEY
  },
  body: JSON.stringify({
    action_type: 'deploy',
    risk_score: 85,
    reversible: false,
    systems_touched: ['production']
  })
});

// Response: which policies would trigger and what decisions they'd produce

Test All Policies (Legacy SDK)

const results = await claw.testPolicies();
// Returns pass/fail for each policy with explanation

Generate Proof Report

const report = await claw.getProofReport({ format: 'md' });
// Generates compliance-ready report showing all policies and their test results

Common Policy Patterns

Development Environment

# Permissive — warn only, don't block
- name: dev-risk-warning
  type: risk_threshold
  mode: warn
  conditions: { risk_score_min: 50 }
  action: warn
  reason: "High risk action detected (dev mode — not blocked)"

Production Environment

# Strict — enforce everything
- name: prod-risk-gate
  type: risk_threshold
  mode: enforce
  conditions: { risk_score_min: 70 }
  action: require_approval

- name: prod-deploy-gate
  type: action_type_restriction
  mode: enforce
  conditions: { action_types: [deploy, database, security] }
  action: require_approval

- name: prod-irreversible-block
  type: risk_threshold
  mode: enforce
  conditions: { risk_score_min: 90, reversible: false }
  action: block

Scoping Policies

Policies can be scoped to specific agents or apply org-wide:

{
  "name": "deploy-agent-only",
  "agent_id": "deploy-agent-1",
  "type": "approval_gate",
  "conditions": { "action_types": ["deploy"] },
  "action": "require_approval"
}

If `agent_id` is omitted, the policy applies to all agents in the org.

Listing Active Policies

# GET /api/policies
curl -H "x-api-key: $DASHCLAW_API_KEY" $DASHCLAW_BASE_URL/api/policies

Response includes all active policies with their type, mode, conditions, and scope.

Read more
Ships withdashclaw

🛡️ The approval and policy layer for AI agents. Intercept risky actions before they run, block them, or approve them remotely.

Get the whole plugin