# Create Policies

> Create and test DashClaw guard policies for agent governance

- Skill: `gabrielmoreira/create-policies` (Agent Skill)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/create-policies`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/create-policies/raw
- Safety review: pending (external: skill-scanner WARNING, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/gabrielmoreira/create-policies

---


# 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
```yaml
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
```yaml
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
```yaml
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
```yaml
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
```yaml
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
```javascript
// 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
```javascript
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
```javascript
// 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)
```javascript
const results = await claw.testPolicies();
// Returns pass/fail for each policy with explanation
```

### Generate Proof Report
```javascript
const report = await claw.getProofReport({ format: 'md' });
// Generates compliance-ready report showing all policies and their test results
```

## Common Policy Patterns

### Development Environment
```yaml
# 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
```yaml
# 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:

```json
{
  "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

```bash
# 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.

