Audit Agent Skills and packages before they touch your machine. Deterministic checks. Exit codes. No vibes.
Project description
skill-guard
Pre-install security check for Agent Skills.
Scan a SKILL.md package before your agent loads it. Offline, deterministic, no code execution.
Part of aisona-lab trust tooling (prompt-guard, OrcaI, lazycoder).
Beta · LIMITATIONS · CHANGELOG
Who this is for
| You | Use it when |
|---|---|
| Teams / companies installing third-party skills | Gate CI or a pre-install script before skills touch prod agents |
| Skill authors | Catch secrets, curl|bash, and exfil patterns before you publish |
| Security / platform | Policy packs (default / strict), SARIF, exit codes 0/1/2 |
Not a runtime firewall. Not an MCP auditor. Static pre-install only.
Try it in 30 seconds
# install CLI (package name on PyPI ≠ CLI name)
uv tool install aisona-skill-guard
# if PyPI is empty yet:
# uv tool install "git+https://github.com/aisona-lab/skill-guard@v0.2.2"
git clone --depth 1 https://github.com/aisona-lab/skill-guard.git /tmp/skill-guard
cd /tmp/skill-guard
skill-guard scan dataset/fixtures/benign/tdd-checklist
# → ALLOW exit 0
skill-guard scan dataset/fixtures/malicious/curl-pipe-shell
# → BLOCK exit 2 (SG003: curl | bash)
skill-guard scan dataset/ood/safe/vercel/deploy-to-vercel
# → WARN (SG006: npm install -g in a fenced install step)
What it looks like
Malicious fixture (curl … | bash):
skill-guard verdict=BLOCK exit=2
[CRITICAL] SG003 Pipe remote content into a shell
evidence: curl | … | bash
Real public skill (Vercel deploy — legitimate but global install):
skill-guard verdict=WARN exit=1
[MEDIUM] SG006 Global package install from skill
at: SKILL.md:141
evidence: npm install -g
Clean skill (ponytail / in-repo benign):
skill-guard verdict=ALLOW exit=0
No findings.
Live results on real corpora (v0.2.2)
Policy: --fail-on block (WARN does not fail CI by default).
| Source | Skills scanned | ALLOW | WARN | BLOCK | What that means |
|---|---|---|---|---|---|
| ponytail | 5–6 | all | 0 | 0 | Docs-only npm -g tips stay quiet |
| Public skills vendored as ood | 73 | ~85% | ~15% | 0 | False BLOCK rate is the main credibility metric |
| addyosmani/agent-skills | 24 | 23 | 1 | 0 | CI ${{ secrets }} examples → WARN, not BLOCK |
| last30days-skill | 1 (116 files) | — | — | 1 | Large pack + unscoped Bash — real pre-install signal |
ECC skills/ + .agents/skills |
282 | 236 | 44 | 2 | Remaining BLOCKs: allowed-tools: Bash unscoped |
| ood-unsafe held-out attacks (in-repo) | 8 | 0 | 0 | 8 | Evasions we track (split keys, b64→shell, …) |
Reproduce gates:
uv run python eval/run_eval.py --suite all --check
uv run pytest -q
Rules (why they matter)
| ID | Why care | Typical hit |
|---|---|---|
| SG001 | Broken package → broken install | missing name / frontmatter |
| SG002 | Keys in skills land in git & agent context | sk-ant-…, "sk"+"-ant-"+… |
| SG003 | Skills tell agents to run shell | curl | bash, rm -rf / |
| SG004 | Creds + network = theft | cat ~/.ssh/id_rsa + upload |
| SG005 | Skill can reprogram the host agent | “Ignore previous instructions” |
| SG006 | Install expands trust boundary | npm install https://…, fenced npm i -g |
| SG007 | Removes human gates | allowed-tools: Bash, “bypass sandbox” |
| SG008 | Huge skills hide risk & burn tokens | multi-k line SKILL.md |
| SG009 | Fake authority | “official Anthropic skill” |
| SG010 | Cloud / CI privilege | IMDS, docker.sock, secret exfil |
Examples and nuance: docs/RULES.md.
Install & CI
pip install aisona-skill-guard # CLI: skill-guard
# package name on PyPI is aisona-skill-guard (skill-guard is unrelated)
| Exit | Meaning |
|---|---|
| 0 | ALLOW (WARN ok by default) |
| 1 | WARN (--pack strict or --fail-on warn) |
| 2 | BLOCK |
| 3 | usage error |
- uses: aisona-lab/skill-guard@v0.2.2
with:
path: ./skills/my-skill
fail-on: block
# .skill-guard.yml
pack: default # or strict
suppress: [SG008]
Status & maintenance
| Stage | Beta (v0.2.2), CI on every push |
| Scope freeze | No new detectors without a real-scan fixture — DETECTOR-FREEZE |
| Lab | Same org as prompt-guard / OrcaI / lazycoder (agent trust stack) |
| Honest limits | New project; stars ≠ quality. Judge the tables and CI, not vanity metrics. |
Issues and security notes: GitHub · LIMITATIONS · BENCHMARKS
License
MIT © aisona-lab
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aisona_skill_guard-0.2.2.tar.gz.
File metadata
- Download URL: aisona_skill_guard-0.2.2.tar.gz
- Upload date:
- Size: 37.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2a0bb5917860444e706bee8c165a48b1cf1a4c5546f382578af8041eb212750
|
|
| MD5 |
34fea100cc34fc85ee9cd7d9dd7b9284
|
|
| BLAKE2b-256 |
c0aa3063cb8d1abe81d0ee910550fc7f4e0334b1ca68b50a5d9c10ca498e3d1d
|
File details
Details for the file aisona_skill_guard-0.2.2-py3-none-any.whl.
File metadata
- Download URL: aisona_skill_guard-0.2.2-py3-none-any.whl
- Upload date:
- Size: 49.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90ac708bd13be4d69d1efbb8e5ad35490b5142dd8078b84ea8e95a09a8ce6643
|
|
| MD5 |
fae363bc1e8c8795fbe2f965d0d0aff6
|
|
| BLAKE2b-256 |
7238dfaaa1c13caf800b7c75e55b9a5fe6ada2d9f46cd3e4d7ba469b6f2fbf99
|