manage-approvals — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited manage-approvals (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
DashClaw's HITL (Human-in-the-Loop) system lets operators approve or deny agent actions before they execute. Three channels: dashboard, CLI, and SDK polling.
Approvals are triggered when:
require_approvalThe action enters pending_approval status and the agent waits.
Navigate to the DashClaw dashboard → Mission Control or Decisions view. Pending approvals show with:
Click Approve or Deny with optional reasoning.
# Interactive inbox — live updates via SSE
dashclaw approvals
# Direct approve/deny
dashclaw approve act_abc123 --reason "Reviewed deployment plan"
dashclaw deny act_abc123 --reason "Missing staging verification"The interactive inbox (dashclaw approvals) uses SSE for real-time push notifications. New approval requests appear immediately without polling.
Keyboard shortcuts:
A — Approve selectedD — Deny selectedR — RefreshO — Open replay in browserQ — Quit// Agent waits for approval after guard returns require_approval
try {
await claw.waitForApproval(decision.action_id, {
timeout: 300000 // 5 minutes
});
console.log('Approved — proceeding');
} catch (err) {
if (err instanceof ApprovalDeniedError) {
console.log('Denied:', err.message);
return;
}
throw err;
}try:
claw.wait_for_approval(decision["action_id"], timeout=300000)
print("Approved — proceeding")
except ApprovalDeniedError as e:
print(f"Denied: {e}")
return# Approve
curl -X POST "$DASHCLAW_BASE_URL/api/approvals/act_abc123" \
-H "x-api-key: $DASHCLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"decision": "approved", "reasoning": "Reviewed and safe"}'
# Deny
curl -X POST "$DASHCLAW_BASE_URL/api/approvals/act_abc123" \
-H "x-api-key: $DASHCLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"decision": "denied", "reasoning": "Risk too high"}'Agent calls claw.guard({ action_type, risk_score, ... })
↓
Guard evaluates policies → returns require_approval
↓
Action created with status: pending_approval
↓
Agent calls claw.waitForApproval(actionId)
(polls or uses SSE stream)
↓ ↓
Operator sees in dashboard/CLI Operator opens CLI inbox
↓ ↓
Reviews: goal, risk, systems Uses A/D keys or direct command
↓ ↓
└──────── Decision ────────────┘
↓
approved → agent continues
denied → ApprovalDeniedError thrown
timeout → blocked (enforce) or allowed (observe)When using the pretool/posttool hooks with Claude Code:
Bash: git push origin main)POST /api/guard → gets require_approvalpending_approval statusdashclaw approvals in another terminalPATCH /api/actions/:idIf approval times out or is denied, pretool exits 2 (enforce mode) and the tool is blocked.
// SDK
const pending = await claw.getPendingApprovals({ limit: 50, offset: 0 });
// API
// GET /api/actions?status=pending_approval&limit=50~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.