Install an external skill or Claude Code plugin into Overdeck's bundled distribution so pan sync ships it to every Overdeck user
Instal·la
npx skillscat add eltmon/overdeck/pan-skill-installer Instal·la des del registre de SkillsCat.
Installing Skills and Plugins into Overdeck's Distribution
This skill is for Overdeck developers only. It covers taking an external
artifact — a skill directory, a GitHub repo, or a Claude Code plugin — and
wiring it into the overdeck repo so pan sync distributes it to every
Overdeck user (or to Overdeck dev machines only).
Step 1 — Identify what you're installing
Fetch or inspect the source first. The artifact type determines the mechanism:
| Artifact | How to recognize it | Distribution mechanism |
|---|---|---|
| Plain skill | A directory with SKILL.md (plus optional scripts/references) |
Copy into sync-sources/skills/<name>/ |
| Dev-only skill | Same shape, but only useful on an overdeck source checkout | Copy into sync-sources/dev-skills/<name>/ |
| Claude Code plugin | A repo with .claude-plugin/marketplace.json, installed via /plugin install — often has its own runtime (TypeScript, MCP servers, commands) |
Add an entry to sync-sources/plugins.json |
A plugin can NOT be flattened into a skill: it carries slash commands and a
runtime that only Claude Code's plugin system can load. Conversely, a plain
skill should NOT go through the plugin manifest.
Step 2a — Bundled skill (sync-sources/skills/)
- Copy the skill directory (the folder containing
SKILL.md) intosync-sources/skills/<kebab-name>/. Vendor the whole directory —
scripts, references, templates. - Ensure the frontmatter has
name,description, andtriggers. Match
the style of two neighbors before editing. - Skills here reach all users on every machine and cost catalog space in
every session — keep the description tight.
Dev-only skills follow the same shape under sync-sources/dev-skills/; they
sync only when running from an overdeck source checkout (isDevMode()).
Step 2b — Claude Code plugin (sync-sources/plugins.json)
Find the marketplace name and plugin name in the repo's
.claude-plugin/marketplace.json(nameat the top level is the
marketplace; eachplugins[].nameis a plugin).Append an entry to
sync-sources/plugins.json:{ "plugin": "<pluginName>@<marketplaceName>", "marketplace": "<owner>/<repo>" }Example — the OpenAI Codex plugin (
openai/codex-plugin-ccdeclares
marketplaceopenai-codexwith plugincodex):{ "plugin": "codex@openai-codex", "marketplace": "openai/codex-plugin-cc" }Provisioning is implemented in
src/lib/claude-plugins-provision.tsand
runs as apan syncstep: for each manifest entry it checksclaude plugin list --json, adds the marketplace if missing
(claude plugin marketplace add <source>), then installs at user scope
(claude plugin install <plugin> --scope user). It is idempotent and
degrades to a warning whenclaudeis missing or the network install
fails — it never fails the sync.Plugins install for all users on machines with the
claudeCLI. There
is no dev-only plugin tier; if one is ever needed, that's a code change in
the provisioning module, not a manifest convention.
Step 3 — Sync, verify, commit
npm run build # provisioning runs from dist via the pan CLI
pan sync # look for the "Provisioning Claude Code plugins" /
# skills sync lines in the output
claude plugin list # plugin installs only: confirm the id appearsFor skills, confirm the copy landed in ~/.claude/skills/<name>/ and~/.agents/skills/<name>/.
Then commit and push — bundled content ships with the package, so an
uncommitted skill or manifest entry exists only on your machine. Other users
receive it on their next pan install / pan sync after release.
Related
/pan-skill-creator— authoring a NEW skill from scratch (shapes, frontmatter, lint rules)/pan-sync— how the sync pipeline distributes bundles to each harnessdocs/SKILLS-CONVENTION.md— wrapper-skill naming rules and the lint that enforces them