Add a skills.sh Skill as a Plugin

VerifiedCaution

Installs a skills.sh skill into a plugin directory using bunx skills add, then configures plugin.json.

Sby Skills Guide Bot
DevelopmentIntermediate
7/28/2026
Claude Code
#claude-code-plugins#skill-installation#marketplace#cli-automation#github

Recommended for

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
When to use it

Use it when you want to quickly package one or more skills from a GitHub repository as a plugin in a Claude Code marketplace.

When not to use it

Avoid it for skills hosted outside GitHub, or if you expect the command to register the plugin in marketplace.json itself.

Security analysis

Caution
Quality score90/100

The 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.

Findings
  • •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.
How this analysis is made

Examples

Single skill plugin
/add-skill slack-agent https://github.com/vercel-labs/slack-agent-skill
Multiple skills from one repo
/add-skill agent-skills https://github.com/vercel-labs/agent-skills --skill pr-review commit
Natural language request
Package 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 --skill flag until the end of arguments (e.g. pr-review commit → ["pr-review", "commit"]). Defaults to [PLUGIN_NAME] if --skill is not provided.
  • OWNER_REPO: short form of the URL (e.g. vercel-labs/agent-skills)

Validate:

  • Both PLUGIN_NAME and REPO_URL are present. If not, stop and show:
    Usage: /add-skill <plugin-name> <github-repo-url> [--skill <skill-name> [<skill-name2> ...]]
    
  • REPO_URL matches https://github.com/<owner>/<repo>. Normalize to <owner>/<repo> short form.
  • PLUGIN_NAME contains only alphanumeric characters, hyphens, and underscores.
  • Each name in SKILL_NAMES contains only alphanumeric characters, hyphens, and underscores.

Check for conflicts:

  • plugins/<PLUGIN_NAME>/ must NOT already exist
  • PLUGIN_NAME must 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.json scoped 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 files

This 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.md

From 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.

Related skills