intent-alignment-guard — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited intent-alignment-guard (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.
Two distinct functions, checked separately at the action boundary:
Consent and quality are never blurred: an authorized action can still FAIL quality, and a high-quality output can still be unauthorized. Both must pass.
Run at the start of every non-conversational task. Skip for purely conversational turns ("thanks", "ok", "what does X mean").
Use AskUserQuestion with four questions in a single call (tool maximum is 4). Generate options from what you understand about the task and codebase — do not use generic placeholders.
Q1 — Task (header: "Task", 12 chars max) Generate 2–3 options that represent the plausible interpretations of what the user wants:
Q2 — Scope (header: "Scope") Generate 2–4 options based on what files, vaults, or systems are mentioned or implied:
scripts/sync-lego-tracker.ps1)Q3 — Risk + Data Routing (header: "Risk") Combine risk tier and output destination into one question. Generate 2–4 options that capture both where output lands AND whether any external actions are involved:
Q4 — Pathway (header: "Pathway")
Option description format — the description field for every option must use bullet points, not prose. Separate bullets with \n:
- [what this option does]
- [what it affects / where output lands]
- [key constraint, trade-off, or caveat]2–3 bullets per option is the target. Never write a single prose sentence as a description — bullets make the trade-offs scannable at a glance.
If Q1 = "Skip IAG": skip the context summary entirely and proceed immediately. Hook still logs tier. Ignore Q2–Q4 answers.
Before starting work, scan constraint-log.md for entries whose [domain] or How to apply matches the current task; load their Constraint text into the summary. Then display this block:
• Task: [one sentence — the confirmed task from Q1]
• Scope: [what was confirmed in Q2]
• Data: [where output lands + its relationship to each destination (input-to / stored-in / replaces / augments / triggers)]
• Risks: [Tier 3/4 actions identified, or "none identified"]
• Constraints: [matching constraint text from constraint-log.md, or "none loaded"]
• Mode: [proposal first / proceed / guard off]Scan constraint-log.md for entries matching the current task domain; surface the constraint text. If none match, show "none loaded."
Then follow through:
Before any Tier 2–4 action during task execution, use AskUserQuestion (single question):
Header: "Action Gate" Question: "[Tier N] About to [exact action]. Is this within what you authorized?" Options (context-derived, 2–3):
Always show action bullets regardless of answer. The first three bullets check authorization; the Quality bullet checks the output against the Constraint Library — two separate checks, both must pass:
• Action: [exact action — Tier N label]
• Authorized: [what in this conversation justifies it]
• Skipped: [lower-risk alternatives considered and rejected]
• Quality: passes / FAILS — constraint violated: "[constraint text]"
• Mode: [proposal / proceed]If "No" or Other with blocking intent → BLOCK. Do not proceed until authorization is explicit. Silence is not consent.
If `Quality` FAILS → outcome is REVISE or BLOCK → immediately run Constraint Capture (below) before retrying the action.
| Tier | Examples |
|---|---|
| 1 — Read-only (no gate needed) | Read, Grep, Glob, git status/log/diff, WebSearch, WebFetch |
| 2 — Reversible local write | Edit, Write, git commit, mkdir, pip install, local config |
| 3 — External / visible to others | git push, gh pr create/merge, Slack/Gmail/Drive MCP, external APIs |
| 4 — Destructive / irreversible | rm -rf, force push, DROP TABLE, delete data, change permissions |
Tier 4 rule: Requires explicit written authorization in this conversation. No implicit consent. No "they didn't say to stop." BLOCK without it.
ACTION TYPE: [Tier 1/2/3/4 + label]
PROPOSED ACTION: [exact action — verbatim]
TASK SCOPE: [what the user authorized]
EVIDENCE: [what context in this conversation justifies it]
ALTERNATIVES: [lower-risk paths considered and why rejected]Wait for explicit confirmation before proceeding.
| Outcome | When | What to do |
|---|---|---|
| ALLOW | Authorization clear; action within scope; quality passes | Proceed |
| BLOCK | No clear authorization; Tier 4 without explicit approval; or hard quality violation | Stop; explain why; run Constraint Capture if quality-driven |
| REVISE | Partial alignment, or quality FAILS a loaded constraint | Execute a safer/corrected form; run Constraint Capture |
| ESCALATE | Requires human decision before any action | Ask; do not infer |
Run after any REVISE or BLOCK driven by quality, or whenever the user rejects an output. Every rejection is a knowledge-creation moment — capture it so the constraint persists instead of evaporating.
constraint-log.md (append-only; never overwrite an existing entry) using this template verbatim:### [domain] — [constraint title]
Date: YYYY-MM-DD
Trigger: [action or output that caused the rejection]
Constraint: [the rule — portable, not task-specific]
Why: [underlying reason — domain logic, past incident, business requirement]
How to apply:[when/where this fires in future tasks]
Confirmed: 0 ← increment on each future task where this constraint catches something
Status: draftAuto-graduation: Each future task where a constraint catches something, increment its Confirmed count. When Confirmed reaches 2 (confirmed in 2 distinct tasks), auto-promote the entry to a memory/feedback_*.md file using the existing feedback schema (rule → **Why:** → **How to apply:**). The promotion is a copy — do not reword or translate the constraint text. Then set Status: graduated in constraint-log.md and add it to that file's ## Graduated section with a pointer to the new feedback file.
The Constraint Library is the quality memory that the authorization tiers cannot provide. Lifecycle:
• Constraints: bullet.Confirmed: 2, the entry is copied into durable memory and marked graduated.File path: .claude/skills/intent-alignment-guard/constraint-log.md — this is session-capture: fast, append-only, draft-grade. memory/feedback_*.md is durable institutional knowledge — load-bearing across all projects. A constraint earns its way from one to the other by catching real errors twice.
`action-permissions` — Look up, grant, or revoke permissions for a specific action (git push, Slack send, rm -rf, etc.) across skills, cron jobs, scheduled routines, and settings.json. Invoke via Skill("action-permissions").
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.