description: Add a skills.sh skill as a plugin to the marketplace. Installs the skill inside the plugin directory using bunx skills add, then configures plugin.json with the skills field — no file copying required.
Add a skills.sh skill as a plugin to the marketplace.
Arguments: $ARGUMENTS (format: <plugin-name> <github-repo-url> [--skill <skill-name> [<skill-name2> ...]])
Examples:
/add-skill slack-agent https://github.com/vercel-labs/slack-agent-skill/add-skill slack-agent https://github.com/vercel-labs/slack-agent-skill --skill slack-agent/add-skill agent-skills https://github.com/vercel-labs/agent-skills --skill pr-review commit
Step 1 — Parse & Validate Input
Parse $ARGUMENTS to extract:
PLUGIN_NAME: first token (e.g.agent-skills)REPO_URL: second token (e.g.https://github.com/vercel-labs/agent-skills)SKILL_NAMES: all space-separated values after--skillflag until the end of arguments (e.g.pr-review commit→["pr-review", "commit"]). Defaults to[PLUGIN_NAME]if--skillis not provided.OWNER_REPO: short form of the URL (e.g.vercel-labs/agent-skills)
Validate:
- Both
PLUGIN_NAMEandREPO_URLare present. If not, stop and show:Usage: /add-skill <plugin-name> <github-repo-url> [--skill <skill-name> [<skill-name2> ...]] REPO_URLmatcheshttps://github.com/<owner>/<repo>. Normalize to<owner>/<repo>short form.PLUGIN_NAMEcontains only alphanumeric characters, hyphens, and underscores.- Each name in
SKILL_NAMEScontains only alphanumeric characters, hyphens, and underscores.
Check for conflicts:
plugins/<PLUGIN_NAME>/must NOT already existPLUGIN_NAMEmust NOT already be in.claude-plugin/marketplace.json
If either check fails, stop and report the conflict.
Step 2 — Install Skills inside Plugin Directory
Create the plugin directory and install each skill into it. Run the following for each name in SKILL_NAMES:
mkdir -p plugins/<PLUGIN_NAME>
(cd plugins/<PLUGIN_NAME> && bunx skills add <OWNER_REPO> --skill <SKILL_NAME> --agent 'universal' -y)
bunx skills add run from plugins/<PLUGIN_NAME>/ will:
- Install skill files to
plugins/<PLUGIN_NAME>/.agents/skills/<SKILL_NAME>/ - Append to (or create)
plugins/<PLUGIN_NAME>/skills-lock.jsonscoped to this plugin
If any command fails, stop and show the error.
Verify installation:
For each skill in SKILL_NAMES, check that the SKILL.md exists:
ls plugins/<PLUGIN_NAME>/.agents/skills/<SKILL_NAME>/SKILL.md
Then read skills-lock.json:
cat plugins/<PLUGIN_NAME>/skills-lock.json
Read skills-lock.json to extract the source value (e.g. "vercel-labs/agent-skills") — used as reference for the plugin's upstream origin.
Display the installed skill files and ask for confirmation to continue:
Installed skills in plugins/<PLUGIN_NAME>/.agents/skills/:
<SKILL_NAME_1>/
- SKILL.md
- README.md
- ...
<SKILL_NAME_2>/
- SKILL.md
- ...
skills-lock.json created at plugins/<PLUGIN_NAME>/skills-lock.json
source: <OWNER_REPO>
Proceed to create plugin? (yes/no)
Step 3 — Create plugin.json
Fetch repo metadata for description and license:
gh api repos/<owner>/<repo> --jq '{description: .description, license: (.license.spdx_id // "NOASSERTION")}'
Also read the first skill's plugins/<PLUGIN_NAME>/.agents/skills/<FIRST_SKILL_NAME>/SKILL.md frontmatter — the description field there may give a better description than the repo's.
Create plugins/<PLUGIN_NAME>/.claude-plugin/plugin.json:
{
"name": "<PLUGIN_NAME>",
"version": "1.0.0",
"description": "<description from skill frontmatter or repo>",
"license": "<SPDX from repo, or NOASSERTION if unknown>",
"keywords": ["<PLUGIN_NAME>"],
"skills": "./.agents/skills/"
}
The "skills" field tells Claude Code to load all skill directories from .agents/skills/ relative to the plugin root — no file copying needed.
Step 4 — Add Entry to .claude-plugin/marketplace.json
Read .claude-plugin/marketplace.json and add the new plugin entry to the plugins array:
{
"name": "<PLUGIN_NAME>",
"description": "<description>",
"source": "./plugins/<PLUGIN_NAME>"
}
Use the Edit tool to insert the new entry before the closing ].
Step 5 — Add Entry to release-please-config.json
Read release-please-config.json and add the new plugin package to the packages object after the last existing plugins/* entry:
"plugins/<PLUGIN_NAME>": {
"release-type": "simple",
"component": "<PLUGIN_NAME>",
"extra-files": [
{
"type": "json",
"path": ".claude-plugin/plugin.json",
"jsonpath": "$.version"
}
]
}
Step 6 — Update Documentation
README.md
Read README.md and add an entry for the new plugin inside the Built-in Plugins section, immediately before the closing ## Installation heading (or after the last #### ... plugin entry in that section):
#### <Human-readable Plugin Name>
<description from plugin.json>
**Install:** `/plugin install <PLUGIN_NAME>@pleaseai` | **Source:** [plugins/<PLUGIN_NAME>](https://github.com/pleaseai/claude-code-plugins/tree/main/plugins/<PLUGIN_NAME>)
Use the Edit tool to insert the block after the last plugin entry or at the end of the Built-in Plugins list.
CLAUDE.md
Read CLAUDE.md and check whether any section needs updating:
- If CLAUDE.md contains a submodule or plugin source list (e.g.
external-plugins/*mappings), add the new plugin's source repo there. - If no relevant section exists, no update is required — skip silently.
Step 7 — Summary Report
✓ Skill plugin added: <PLUGIN_NAME>
Source:
https://github.com/<owner>/<repo>
Installed via: bunx skills add <OWNER_REPO> --skill <SKILL_NAME_1>
--skill <SKILL_NAME_2>
...
Plugin structure:
plugins/<PLUGIN_NAME>/
├── .agents/skills/
│ ├── <SKILL_NAME_1>/ ← skill files (managed by skills.sh)
│ │ └── SKILL.md
│ └── <SKILL_NAME_2>/
│ └── SKILL.md
├── skills-lock.json ← version lock (managed by skills.sh)
└── .claude-plugin/
└── plugin.json ← "skills": "./.agents/skills/"
Changes made:
plugins/<PLUGIN_NAME>/.claude-plugin/plugin.json (created)
.claude-plugin/marketplace.json (updated)
release-please-config.json (updated)
README.md (updated)
CLAUDE.md (updated, if applicable)
To update the skills in the future:
cd plugins/<PLUGIN_NAME> && bunx skills update
To test:
/plugin install <PLUGIN_NAME>@pleaseai
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.