Audit
Check a skill before you trust it
aisle audit is a free, open-source scanner. It reads a skill folder as text and reports risky patterns. It never runs, imports or installs anything from the skill.
Automated checks found no known risky patterns. This is not a guarantee of safety.
Aisle 01
Where it runs
The same rules everywhere.
- On your machine:
aisle audit <target>for any local folder, registry skill or GitHub repo. - Before every install:
aisle addaudits the files it is about to install. A critical finding blocks the install; it needs--forceand typing the skill's name to go on. - On every submission: each community skill is audited at its pinned commit when it is submitted, and the result is shown on its page.
In this registry, 26 skills audited
- AuditA14
- AuditB12
- AuditC0
- AuditD0
- AuditF0
Aisle 02
Grades
Findings are counted by severity.
| Grade | Meaning |
|---|---|
| AuditA | No findings above low. |
| AuditB | Medium findings only. |
| AuditC | One or two high findings. |
| AuditD | Three or more high findings. |
| AuditF | Any critical finding. |
A grade is a summary, not a verdict. Read the findings: a skill about security can legitimately quote the phrases the scanner looks for.
Aisle 03
What it checks
Rule IDs start with AA. Every rule has a malicious and a benign test fixture.
Structure
| AA-S01 | High | No SKILL.md, or frontmatter missing or invalid |
| AA-S02 | Medium | Name does not match the folder or spec format; description missing or too long |
| AA-S03 | Critical | Symlink in the skill, or a path escaping the folder |
| AA-S04 | High | Executable binaries or compiled files |
| AA-S05 | Medium | Minified or obfuscated scripts |
| AA-S06 | Low | SKILL.md over 500 lines, or references nested more than one level |
| AA-S07 | Low | Hidden files or folders |
| AA-S08 | Medium | Invalid .aisleaudit.yaml, or an attempt to suppress a critical finding |
| AA-S09 | Info | Oversized media file skipped in a local folder |
Permissions
| AA-P01 | High | Unrestricted Bash in allowed-tools |
| AA-P02 | Medium | Broad write plus shell without disable-model-invocation |
| AA-P03 | High | Hooks that run commands automatically on agent events |
| AA-P04 | High | Commands that run when the skill loads |
| AA-P05 | Medium | Unrestricted web fetching combined with file reading |
| AA-P06 | Info | Inventory of tools, scripts and URLs |
Prompt injection
| AA-I01 | High | Override language such as "ignore previous instructions" |
| AA-I02 | High | Concealment from the user |
| AA-I03 | Critical | Instructions to weaken agent safety settings |
| AA-I04 | Medium | Instructions hidden in comments, collapsed sections or alt text |
| AA-I05 | Medium | Long base64 or hex blobs in instruction files |
| AA-I06 | High | Instructions to fetch and follow remote instructions |
Exfiltration
| AA-X01 | Critical | Reading credential stores |
| AA-X02 | Critical | Environment variables or .env contents sent over the network |
| AA-X03 | High | Uploads to paste, webhook or tunnel services |
| AA-X04 | High | Instructions to send code, files or conversation to an external URL |
| AA-X05 | Medium | DNS-based exfiltration patterns |
Dangerous execution
| AA-E01 | Critical | Download and run |
| AA-E02 | Critical | Decode and run |
| AA-E03 | High | Destructive commands |
| AA-E04 | High | Persistence (shell rc files, cron, launch agents, services) |
| AA-E05 | High | Privilege escalation |
| AA-E06 | Medium | Installing unpinned or remote packages in scripts |
| AA-E07 | Medium | Dynamic code execution in scripts |
Network
| AA-N01 | Low | Plain http:// URL |
| AA-N02 | Medium | URL shortener or raw IP address |
| AA-N03 | Info | Inventory of referenced domains |
Secrets
| AA-K01 | High | Hardcoded secret |
Hidden characters
| AA-U01 | Critical | Unicode tag characters (invisible instructions) |
| AA-U02 | High | Bidirectional controls in scripts (Trojan Source) |
| AA-U03 | Medium | Bidirectional controls in instruction files outside Arabic or Hebrew text |
| AA-U04 | Medium | Zero-width characters inside Latin words, or clustered |
The rules are open source (MIT): read them on GitHub.
Aisle 04
Suppressions
Authors can explain a pattern that is intentional.
An author puts a .aisleaudit.yaml file in the skill. Each entry needs a reason of at least 15 characters. Suppressed findings do not count towards the grade, but they are always listed, with the reason. Critical findings cannot be suppressed by the author.
ignore:
- rule: AA-N01
path: references/legacy-api.md
reason: Documents an old HTTP-only endpoint; no requests are made.Aisle 05
Run it yourself
aisle audit ./my-skill
aisle audit some-skill@1.2.0
aisle audit owner/repo/path/to/skill@main
aisle audit . --format sarif --output audit.sarif
aisle audit . --format markdown --fail-on medium--format: pretty (default), json, sarif (for GitHub's Security tab) or markdown.--fail-on: critical, high (default), medium, low or none. Sets the exit code: 0 clean, 1 findings at or above that level, 2 the audit could not run.--output <file>writes the report to a file;--quietprints one summary line.
Aisle 06
Badge and GitHub Action
For skill authors.
Every skill page shows a README badge for its grade. It is a shields.io endpoint badge that reads /badges/<name>.json:
[](https://<site>/skills/<name>)To audit your own skill repository on every push and see the findings in GitHub's Security tab, use the Agent Aisle audit Action. It runs aisle audit . --format sarif and uploads the result:
name: Aisle audit
on: [push, pull_request]
permissions:
contents: read
security-events: write
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: HazemSalah29/aisle-audit-action@v1
with:
fail-on: highAisle 07
What an audit cannot do
An audit reduces risk; it cannot prove a skill safe. It finds patterns it knows about. A determined author can write something it misses, and a clean report says nothing about what the skill's instructions will make an agent do in your project. Read the files of any skill that runs scripts, and install community skills pinned to a version.