Automated summary
This skill turns a skills.sh skill into a Claude Code plugin by installing it under plugins/<name>/ and generating the matching plugin.json file.
Strengths
- Validates the arguments (plugin name, GitHub URL, skill names) and checks for conflicts with an existing directory or marketplace.json before writing anything
- Delegates installation to `bunx skills add` inside the plugin directory and points the `skills` field at `.agents/skills/`, so no files have to be copied by hand
- Verifies the install by checking each SKILL.md exists and reading skills-lock.json, then asks for confirmation before creating the plugin
- Pulls description and license from `gh api` and the skill frontmatter so plugin.json is filled in meaningfully
Limitations
- Depends on external, authenticated tooling: `bunx skills`, `gh`, and a repository reachable on GitHub only
- Does not update `.claude-plugin/marketplace.json`; it only checks that there is no conflict, so registering the plugin is left to you
- Refuses a plugin name that already exists, so re-running requires manually cleaning up the directory
Use it when you want to quickly package one or more skills from a GitHub repository as a plugin in a Claude Code marketplace.
Avoid it for skills hosted outside GitHub, or if you expect the command to register the plugin in marketplace.json itself.
Security analysis
CautionThe skill automates adding third-party skills to a plugin marketplace, requiring network access and execution of `bunx skills add` from user-provided GitHub repos. While the intent is legitimate and no destructive or exfiltrating actions are explicitly instructed, the use of external package installation and shell execution from arbitrary repos warrants caution.
- •Uses `bunx skills add` to install skills from arbitrary GitHub repositories, which may execute code or install scripts from the remote source.
- •Runs network commands (`gh api`) and modifies multiple project files (`plugin.json`, `marketplace.json`, `release-please-config.json`, `README.md`).
- •User-supplied repository URLs and skill names are used directly in shell commands; validation is limited to format, not trustworthiness of the source.
Examples
/add-skill slack-agent https://github.com/vercel-labs/slack-agent-skill/add-skill agent-skills https://github.com/vercel-labs/agent-skills --skill pr-review commitPackage the vercel-labs/agent-skills repo as a plugin called agent-skills, installing the pr-review and commit skills.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
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/add-a-skills-sh-skill-as-a-plugin-ms47vqp1/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/add-a-skills-sh-skill-as-a-plugin-ms47vqp1' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/add-a-skills-sh-skill-as-a-plugin-ms47vqp1/download' --output '.skill-downloads/add-a-skills-sh-skill-as-a-plugin-ms47vqp1/SKILL.md.part' && mv '.skill-downloads/add-a-skills-sh-skill-as-a-plugin-ms47vqp1/SKILL.md.part' '.skill-downloads/add-a-skills-sh-skill-as-a-plugin-ms47vqp1/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.
Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/add-a-skills-sh-skill-as-a-plugin-ms47vqp1/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.