Skip to content
Back to skills

Commands

ASecurity

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.

  • 16 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
documentationbashgitapidocumentation

Works with

  • claude code
  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add pleaseai/claude-code-plugins --skill commands --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Commands?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Commands
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pleaseai-commands/badge)](https://www.skillsdirectory.com/skills/pleaseai-commands)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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`:

```bash
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:
```bash
ls plugins/<PLUGIN_NAME>/.agents/skills/<SKILL_NAME>/SKILL.md
```

Then read `skills-lock.json`:
```bash
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:

```bash
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`:

```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:

```json
{
  "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:

```json
"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):

```markdown
#### <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
```

Files in this skill

  • add-gemini-extension.md6.6 KB
  • add-skill.md6.8 KB
  • add-vendor.md6.9 KB
  • convert-gemini-extension.md3.5 KB
  • generate-skill.md2.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…