skillpkg 🔧
Search, validate and install agent skills across agent runtimes. One CLI for the agent-skills ecosystem.
The agent-skills wave is here — OpenClaw, Claude, Codex, Cursor, Windsurf, Gemini CLI and DSH all read some flavor of SKILL.md — but the tooling layer around them is thin. skillpkg closes the gap with five commands:
pip install skillpkg-cli # or: curl the single file, it's stdlib-only
skillpkg search pdf # find skills on GitHub (sorted by stars, SKILL.md verified)
skillpkg check ./my-skill # validate against the spec (frontmatter, size, layout)
skillpkg scan ./my-skill # secrets + prompt-injection pre-check
skillpkg install OWNER/REPO # install into your agent's skills dir (auto-detects runtime)
skillpkg install anthropics/skills --skill pdf # monorepos: install a sub-skill
skillpkg agents # list supported runtimes and where they live
Why
- Discovery is broken. Awesome-lists have 50-74K stars purely for listing skills. There's no
npm searchfor skills — no way to check "does this repo actually contain a valid SKILL.md?" without opening 10 tabs. - Quality is unverified. Agents truncate giant skill files, descriptions drive matching, missing frontmatter silently breaks loading.
checkcatches all of it in one command. - Trust is the real risk. Skills are arbitrary markdown + scripts executed with your agent's permissions.
scancatches leaked credentials (GitHub/AWS/Slack tokens, private keys, JWTs) and prompt-injection patterns before you install.
Highlights
- Zero dependencies — pure Python stdlib, single file,
python3 skillpkg.pyjust works - Cross-agent — installs into whichever runtime it detects, or
--agent <name>to pick - Validation with teeth — required fields, name/description length limits, oversized-file warnings (agents truncate ~100KB), script-size sanity
- Security pre-check — 8 secret patterns, 6 injection patterns, runs inline after every install
- Search that verifies — GitHub search + live probe of each repo for an actual
SKILL.md - Hardened installer — path-traversal guards, symlink/never-extracted, tar-bomb size caps, hostile frontmatter names sanitized
- Monorepo aware — no root SKILL.md?
skillpkglists installable sub-skills and installs any of them via--skill
Example
$ skillpkg search pdf --limit 5
STARS SKILL SKILL.MD DESCRIPTION
----------------------------------------------------------------------------------------------------
27898 virgiliojr94/book-to-skill ok Turn any technical book PDF into a skill
1126 bevibing/tutor-skills none A Claude Code skill that turns PDFs...
$ skillpkg install anthropics/skills --skill pdf
✓ anthropics/skills → ~/.openclaw/skills/pdf (12 files)
agent: openclaw · skill: pdf
✓ clean — no secrets or injection patterns found
Root install of a monorepo auto-lists what's available:
$ skillpkg install anthropics/skills
error: no SKILL.md at anthropics/skills root — looks like a monorepo.
installable sub-skills:
· skills/pdf
· skills/docx
· skills/mcp-builder
...
→ skillpkg install anthropics/skills --skill <name>
Supported runtimes
| Agent | Skills dir |
|---|---|
| OpenClaw | ~/.openclaw/skills |
| Claude | ~/.claude/skills |
| Codex | ~/.codex/skills |
| Cursor | ~/.cursor/skills |
| Windsurf | ~/.codeium/windsurf/skills |
| Gemini CLI | ~/.gemini/skills |
| DSH | ~/.dsh/plugins |
Missing your runtime? It's one line in AGENTS — PRs welcome.
The spec
skillpkg check validates against the agent skills spec:
SKILL.mdwith YAML frontmatter:name(kebab-case, 2-64 chars) anddescription(≤1024 chars) required- Keep
SKILL.mdfocused; large detail belongs in bundledreferences/, scripts inscripts/
Install
# single file, stdlib only — copy it anywhere on PATH
curl -LO https://raw.githubusercontent.com/Exaggarate/skillpkg/main/skillpkg.py
chmod +x skillpkg.py && ./skillpkg.py --help
# or
pip install .
Status
v0.2.0 — hardened: 20 unit tests green, live-tested against real skills and the anthropics/skills monorepo (173K ⭐). Parser handles BOM files, folded YAML block scalars, empty fields; installer refuses traversal paths, symlinks/hardlinks, and archive bombs (20MB/file, 300MB/total caps).
Roadmap: lockfiles (skillpkg freeze), skill updates (skillpkg upgrade),
registry index with auto-generated trust scores.
MIT © 2026
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 skillpkg_cli-0.2.1.tar.gz.
File metadata
- Download URL: skillpkg_cli-0.2.1.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e9dfc666eb5c6d5bcb8f9b463505bebe0ee652d0f76dcb9272e14ad363b6050
|
|
| MD5 |
e7df36355db544c3e76b62eea4e37de9
|
|
| BLAKE2b-256 |
30ab23511b6eb13b01eace204148aede0a2a65a263e099f0c1e9c4fecf3f8850
|
Provenance
The following attestation bundles were made for skillpkg_cli-0.2.1.tar.gz:
Publisher:
publish.yml on Exaggarate/skillpkg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillpkg_cli-0.2.1.tar.gz -
Subject digest:
4e9dfc666eb5c6d5bcb8f9b463505bebe0ee652d0f76dcb9272e14ad363b6050 - Sigstore transparency entry: 2686955758
- Sigstore integration time:
-
Permalink:
Exaggarate/skillpkg@b303ab965838ce79ef8afb14b8674049aba773a5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Exaggarate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b303ab965838ce79ef8afb14b8674049aba773a5 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file skillpkg_cli-0.2.1-py3-none-any.whl.
File metadata
- Download URL: skillpkg_cli-0.2.1-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7680b1f5f6adcbe655f9c174b8a6efe2e3feee7680b377a1bb7418e5a48557b8
|
|
| MD5 |
f8def921c359add064a2ed4fb9270484
|
|
| BLAKE2b-256 |
128b865715f4eb9532e917c90f46b9761acf37ad5c49837ef830323b9830c4b0
|
Provenance
The following attestation bundles were made for skillpkg_cli-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on Exaggarate/skillpkg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillpkg_cli-0.2.1-py3-none-any.whl -
Subject digest:
7680b1f5f6adcbe655f9c174b8a6efe2e3feee7680b377a1bb7418e5a48557b8 - Sigstore transparency entry: 2686955807
- Sigstore integration time:
-
Permalink:
Exaggarate/skillpkg@b303ab965838ce79ef8afb14b8674049aba773a5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Exaggarate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b303ab965838ce79ef8afb14b8674049aba773a5 -
Trigger Event:
workflow_dispatch
-
Statement type: