action-permissions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited action-permissions (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.
Sub-skill of intent-alignment-guard. Surfaces and manages what actions are authorized across the four permission planes — with scoped grants so a permission can be given to one skill, cron, or routine without touching the global allowlist.
Q1 — Mode (header: "Mode")
Q2 — Action (header: "Action")
Generate 2–4 options from what was mentioned or implied:
git push, Slack send, gh pr create, gh pr mergegit pull, git commit, Edit, Writerm -rf, git push --forceQ3 — Planes (header: "Planes", multiSelect: true)
~/.claude/settings.json allow[]/deny[]~/.claude/skills/*/SKILL.mdCronList commands/schedule managed agentsQ4 — Proceed (header: "Proceed")
• Mode: [Lookup / Grant / Revoke / Audit]
• Action: [action name — Tier N — External / Local write / Destructive]
• Planes: [which planes will be checked]
• Risk: [Tier 1 read-only / Tier 2 local write / Tier 4 — needs explicit auth]Tier 1 — no gate needed.
Read ~/.claude/settings.json → scan allow[] and deny[]CronList → scan command fields for the action keywordGrep ~/.claude/skills/ → all SKILL.md files (including ## Authorized Actions sections)~/.claude/cron-permissions.json if it exists → scan for the action/schedule agent configsOutput format:
Action: git push (Tier 3 — External)
Plane | Status | Scope | Where / Context
settings.json (global) | not listed | global | Not in allow[] or deny[]
settings.json (project) | not listed | this project | Not in .claude/settings.json
Skills | REFERENCED | intent-align-guard | Tier 3 gate required
| AUTHORIZED | polymarket-sync | ## Authorized Actions: git push origin master*
Cron jobs | EXECUTES | polymarket-sync | cron job-id abc123
cron-permissions.json | not listed | — | File not found
Scheduled routines | — | — | none found
Verdict: polymarket-sync has a skill-declared authorization. IAG will auto-allow when that skill is active.Status values:
| Status | Meaning |
|---|---|
ALLOW | In allow[] / explicitly approved |
DENY | In deny[] / explicitly blocked |
AUTHORIZED | In ## Authorized Actions in a SKILL.md or cron-permissions.json |
EXECUTES | A cron or routine runs this action |
REFERENCED | A skill mentions this action — check for gate vs. blanket approval |
not listed | No record; IAG default tiers apply |
Tier 2 — Reversible local write. Action Gate required before writing.
header: "Scope" — where should this permission live?
Generate options from context (which skill/cron/routine was mentioned):
## Authorized Actions entry to that skill's SKILL.md; IAG reads it to auto-allow when that skill is active (Recommended for skill-specific use)~/.claude/cron-permissions.json; IAG reads it when that cron runsIf user named a specific skill (e.g., "polymarket-sync"), default the first option to that skill. Never default to Global.
header: "Pattern" — how specific should the authorization be?
Generate options from the action + what the skill/cron actually runs (grep the skill SKILL.md for the exact command used):
git push origin master or git push origin HEAD (exact branch)git push origin * (any branch on origin)git push * — any remote/branch — flag if broader than neededFor settings.json allow[] (project or global scope), wrap in Bash(...):
Bash(git push origin master*), Bash(git push origin HEAD*), etc.• Action: [write target — Tier 2 — exact file + change]
• Authorized: [what in this conversation justifies it]
• Skipped: [why broader/global scope was not used]
• Mode: proceedAskUserQuestion (header: "Action Gate"):
Skill-declared — add to the skill's SKILL.md. If ## Authorized Actions section already exists, append. If not, create it just before the final section:
## Authorized Actions
These actions are pre-authorized for this skill. The intent-alignment-guard reads this section
and auto-allows matching actions when this skill is active.
| Action | Pattern | Authorized by | Date |
|--------|---------|---------------|------|
| git push | `git push origin master*` | [user — context] | YYYY-MM-DD |Cron-scoped — write/update ~/.claude/cron-permissions.json:
{
"polymarket-sync": {
"job_id": "abc123",
"authorized_actions": [
{
"action": "git push",
"pattern": "git push origin master*",
"authorized_by": "user",
"date": "YYYY-MM-DD",
"context": "automated sync run"
}
]
}
}Project-scoped / Global — add to allow[] in the appropriate settings.json:
"allow": ["Bash(git push origin master*)"]Append to memory/permission_changes_log.md:
## [ISO timestamp] — GRANT [action]
- Scope: [Skill-declared: polymarket-sync / Cron: job-id / Project / Global]
- Pattern: `[exact pattern added]`
- Target: [file path edited]
- Context: [one sentence — why authorized]Tier 2.
Show where the action is currently authorized (all scopes that have a record). Ask which to remove:
Never remove partial matches. Confirm verbatim before editing.
Same pattern as Grant: gate → edit → log.
Tier 1 — no gate needed.
Scan all selected planes. For each Tier 3/4 action found, report:
Plane: Skills
polymarket-sync/SKILL.md
## Authorized Actions: git push origin master* [Tier 3 — pre-authorized]
intent-alignment-guard/SKILL.md
REFERENCED: git push [Tier 3 — gate required]
Plane: Cron jobs (CronList)
polymarket-sync (job-id: abc123)
git push origin master [Tier 3 — EXECUTES — covered by skill-declared auth]
Plane: settings.json (global)
allow[]: none
Plane: settings.json (project)
allow[]: none| Plane | Source | Scope |
|---|---|---|
| settings.json (global) | ~/.claude/settings.json allow[] | All skills, all projects |
| settings.json (project) | .claude/settings.json allow[] | This project only |
| Skill-declared | ~/.claude/skills/[name]/SKILL.md ## Authorized Actions | That skill only |
| Cron-scoped | ~/.claude/cron-permissions.json keyed by job ID | That cron only |
| Routines | /schedule agent config | That routine only |
IAG reads all five scopes before deciding whether to gate. Skill-declared and cron-scoped authorizations are the least-privilege options — prefer them over project or global.
| Action | Tier | Notes |
|---|---|---|
git push | 3 | External; visible to remote |
git pull | 2 | Local write; reversible |
git commit | 2 | Local; reversible |
Slack send | 3 | External; visible to channel |
rm -rf | 4 | Destructive; requires explicit written auth |
gh pr create/merge | 3 | External; visible on GitHub |
Edit / Write | 2 | Local; reversible |
WebSearch / WebFetch | 1 | Read-only |
Read / Grep / Glob | 1 | Read-only |
CronList / CronCreate | 1 / 2 | List = read-only; Create = local write |
~/.claude/projects/C--Users-csbuc-Research-Marketing-Strategist-Agent-Environment--main/memory/permission_changes_log.md
Create the file if it does not exist.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.