Pinned to a commit
Every upstream skill is locked to a commit and a content hash. Edit one by hand and CI fails.
"supabase": { "source": "supabase/agent-skills", "commit": "c9be0e9…", "pinned": false, "computedHash": "3c95d48…" }
> add row level security to the invoices table Skills available here (39) core:skill-router find the right skill or pack core:find-skill search, vet and pin new skills core:vet-skill check a skill for prompt injection matt:tdd test-first features and fixes matt:diagnosing-bugs a loop for hard bugs supabase:supabase on in this project supabase:supabase-postgres-best-practices … 32 more ● Using supabase:supabase Reading references/security-model.md
Vetted agent skills for Claude Code and Codex.
Packs switch on per project, so the right skills trigger.
curl -fsSL https://skillshed.munyamakosa.com/install/site | bashsupabase
supabase/agent-skills
found with
skillshed find supabase
First you find it, on skill-issue.in or skills.sh.
supabase
supabase/agent-skills
scan 0 high
medium 3 to read
verdict ok with notes
Then it is scanned and read, every file.
supabase
supabase/agent-skills
scan 0 high
commit c9be0e9
licence MIT
tracks main, weekly PR
Then it is pinned to a commit in the lock.
supabase
supabase/agent-skills
commit c9be0e9
pack supabase
acme/api on
elsewhere off
Then the projects that need it turn it on.
Every upstream skill is locked to a commit and a content hash. Edit one by hand and CI fails.
"supabase": { "source": "supabase/agent-skills", "commit": "c9be0e9…", "pinned": false, "computedHash": "3c95d48…" }
Hidden Unicode, override phrasing, curl piped to a shell, secret reads and exfiltration hosts block the add.
high hidden-unicode SKILL.md:6 high override SKILL.md:7 high pipe-to-shell SKILL.md:8 high exfil-endpoint SKILL.md:9 Removed injected-skill: high findings.
Each week upstream changes land in one PR with compare links and the scan report. Nothing merges by itself.
Sync vendored skills open matt: bdfcb8f…4e01a2c expo: 3d1ca4e…9f72b10 Check: pass Prompt-injection scan: 0 high
The vet-skill skill walks your agent through every file as data, and ends with a verdict that quotes the lines.
vet-skill eas-simulator asks to work without asking again references/run-your-app.md:230 verdict: ok with notes
A project turns its packs on in files you commit, so every machine and teammate gets the same set.
.claude/settings.json "enabledPlugins": { "supabase@skillshed": true } .codex/config.toml [plugins."supabase@skillshed"] enabled = true
The router knows every pack. If a task needs one that is off, it reads the skill and tells you how to turn it on.
core:skill-router task: build an app store release match: expo / eas-app-stores expo is off in this project turn it on: skillshed use expo
Start a skill of your own, or add any skill from GitHub or skills.sh for yourself only. It is scanned and pinned like the shared ones, lives in your own skill folders, and works in Claude Code and Codex.
$ skillshed new release-notes "Use when writing release notes" created ~/.agents/skills/release-notes/SKILL.md $ skillshed add anthropics/skills@frontend-design 0 high, 0 medium across 1 skill added frontend-design @ dbd4588 $ skillshed mine frontend-design anthropics/skills @ dbd4588 tracks main release-notes (yours)
Know a skill others should have, or wrote one? Submit it. A bot scans every file and replies on the issue, then a person reads it before it is pinned into a pack.
A skill is a folder with a SKILL.md file: instructions, and sometimes scripts, that an AI coding agent loads when a task matches the skill's description. Claude Code and Codex both read the open Agent Skills format, so the same skill works in both.
It gathers vetted skills into one plugin marketplace that Claude Code and Codex both understand, installs it with one command, keeps the always-on list short so skills keep triggering, and pins every third-party skill to a commit after scanning it for prompt injection.
Agents read every enabled skill's description on every request, within a budget of about 1 to 2% of context. Past that, skills quietly stop triggering. Core and Matt Pocock's skills stay on; stack packs switch on only in projects that use them, with skillshed use supabase.
Yes. skillshed new my-skill "Use when ..." starts one, and skillshed add owner/repo@skill adds any skill from GitHub or skills.sh for you only. Both go into your own skill folders for Claude Code and Codex, scanned and pinned.
Check it with skillshed vet owner/repo@skill, then submit it on GitHub. A workflow scans it and replies on the issue; a person reads every file before pinning it into a pack.
No scanner can prove a skill is safe. Skillshed narrows the risk: every upstream skill is pinned to a commit and content hash, scanned for hidden text, override phrasing and data exfiltration, and only updated through pull requests a person merges.
skillshed update pulls the latest skills into both tools. To remove it, run claude plugin marketplace remove skillshed and codex plugin marketplace remove skillshed, then delete ~/.skillshed.
Nothing. Skillshed is MIT licensed, and the skills it carries keep their own open-source licences.

Clones Skillshed to ~/.skillshed, adds it to Claude Code and Codex with auto-update, and gives you the skillshed command. Run it again to update.
curl -fsSL https://skillshed.munyamakosa.com/install/site | bash