CLAUDE.md · git:20260923.b852b0b · 2026-09-23 · sha256 277b66a34c46a0d9

CLAUDE.md git:20260923.b852b0bA

Immutable. This exact content is served forever at /api/v1/blob/277b66a34c46a0d9.

# Claude Code Plugins Marketplace

Claude Code 用プラグインを配布するマーケットプレイスのリポジトリ。

## リポジトリ構成

プラグインの置き方は 2 通りある。

1. **direct-skill 方式**: 単体スキルのプラグイン。スキルディレクトリをそのまま source にする(`source: "./skills/<skill-dir>"` + `skills: ["./"]`)
2. **wrapper 方式**: エージェントを持つもの、フックを定義するもの、複数スキルの bundle。`plugins/<plugin-name>/` にまとめる

```text
.
├── .claude-plugin/
│   └── marketplace.json      # プラグイン一覧とバージョンの記載元
├── skills/                   # スキルの実体。direct-skill 方式の source を兼ねる
│   └── <skill-name>/
│       ├── .claude-plugin/   # direct-skill 方式で source になるスキルのみ
│       │   └── plugin.json
│       ├── SKILL.md
│       ├── references/       # (任意) SKILL.md から読む手順・定義
│       └── README.md         # (任意) 利用者向けの設定リファレンス
├── plugins/                  # wrapper 方式のプラグイン
│   └── <plugin-name>/
│       ├── .claude-plugin/
│       │   └── plugin.json
│       ├── skills/
│       │   └── <skill-name>/ # skills/<skill-name> の実ディレクトリコピー
│       ├── agents/           # (エージェント依存のみ)
│       │   └── <agent-name>.md
│       └── README.md         # (任意)
├── tests/                    # リポジトリ自身のテスト(*.test.mjs)。Skill(run-node-tests) が実行する
├── .claude/
│   ├── commands/             # 開発用コマンド(/verify-plugins 等)
│   ├── skills/               # skills/* へのシンボリックリンクと、配布しない開発用スキル
│   ├── agents/               # plugins/*/agents/*.md へのシンボリックリンク
│   ├── rules/                # 毎セッション読み込まれるルール
│   ├── rules-extras/         # ルールの Good/Bad 例(自動では読み込まれない)
│   ├── rules-staging/        # extract-rules が 1 回だけ観測したルール候補
│   └── dev-workflow.md       # dev-workflow の設定
├── CHANGELOG.md
└── README.md
```

marketplace.json の `source` に `"./"` を書かない。`skills/` 配下の全スキルが自動検出され、重複登録される([anthropics/claude-code#13344](https://github.com/anthropics/claude-code/issues/13344))。source には `./skills/<skill-dir>` か `./plugins/<plugin-name>` を指定する。

wrapper 配下の `skills/<skill-name>/` は symlink でなく実ディレクトリのコピーにする。plugin cache が symlink を解決しない不具合([anthropics/claude-code#53948](https://github.com/anthropics/claude-code/issues/53948))への暫定対応で、`skills/<skill-name>/` を編集したらコピーも同期する。

## プラグインマニフェスト

全プラグインの source 直下に `.claude-plugin/plugin.json` を置く。`name` は marketplace.json の `name` と揃え、`version` は書かない。理由と例外(`caffeinate` / `translate`)は `.claude/rules/project.rules.md` § プラグイン構造 にある。

```json
{
  "name": "<plugin-name>",
  "description": "プラグインの説明",
  "author": { "name": "hiropon", "url": "https://github.com/hiroro-work" },
  "homepage": "https://github.com/hiroro-work/claude-plugins",
  "repository": "https://github.com/hiroro-work/claude-plugins",
  "license": "MIT",
  "keywords": ["keyword1", "keyword2"]
}
```

## スキルを追加する(direct-skill 方式)

エージェントにもフック定義にも依存しないスキルはこの方式にする。`plugins/` 配下にラッパーは作らない。

1. `skills/<skill-name>/` に `SKILL.md` と `.claude-plugin/plugin.json` を作る

   ```markdown
   ---
   name: <skill-name>
   description: スキルの説明
   allowed-tools: Read, Glob, Grep
   ---

   # スキル名

   スキルの詳細な説明と使い方
   ```

2. marketplace.json の `plugins` 配列に追加する。プラグイン名とスキル名は違ってよい(例: plugin `peer` → skill `ask-peer`)

   ```json
   {
     "name": "<plugin-name>",
     "source": "./skills/<skill-name>",
     "skills": ["./"],
     "description": "スキルの説明",
     "version": "1.0.0",
     "author": { "name": "hiropon" },
     "category": "workflow"
   }
   ```

3. 開発用のシンボリックリンクを張る: `ln -s ../../skills/<skill-name> .claude/skills/<skill-name>`
4. CHANGELOG.md を更新する

## プラグインを追加する(wrapper 方式)

| 種類 | 用途 | `agents/` | `skills/` |
| --- | --- | --- | --- |
| **エージェント / フック wrapper** | エージェント依存(`translate`)、フック定義(`caffeinate`) | エージェント依存なら必須 | 単一スキルのコピー |
| **bundle wrapper** | 複数スキルの束(`dev-workflow-bundle`) | 不要 | 複数スキルのコピー + marketplace.json の `skills` 配列 |

### エージェント / フック wrapper

1. `skills/<skill-name>/SKILL.md` を作り、`plugins/<plugin-name>/skills/` へコピーする

   ```bash
   mkdir -p plugins/<plugin-name>/skills/<skill-name>
   cp -R skills/<skill-name>/. plugins/<plugin-name>/skills/<skill-name>/
   ```

2. `plugins/<plugin-name>/.claude-plugin/plugin.json` を置く。フックは `hooks` フィールドに書く(例: `plugins/caffeinate/.claude-plugin/plugin.json`)
3. エージェントがあれば `plugins/<plugin-name>/agents/<agent-name>.md` に置く
4. 開発用のシンボリックリンクを張る。スキルは必ず、エージェントはある場合だけ

   ```bash
   ln -s ../../skills/<skill-name> .claude/skills/<skill-name>
   ln -s ../../plugins/<plugin-name>/agents/<agent-name>.md .claude/agents/<agent-name>.md
   ```

5. marketplace.json に `"source": "./plugins/<plugin-name>"` のエントリを追加する(`skills` は書かない)
6. CHANGELOG.md を更新する

### 既存の bundle にメンバーを足す

1. `skills/<name>/` に `SKILL.md` と `.claude-plugin/plugin.json` を作り、開発用のシンボリックリンクを張る(上の「スキルを追加する」の手順 1 と 3)
2. `plugins/dev-workflow-bundle/skills/<name>/` へコピーする(手順は上と同じ `cp -R`)
3. marketplace.json を 4 か所編集する: 新しいプラグインのエントリ(direct-skill 方式の形)の追加、bundle の `skills` 配列への `./skills/<name>` の追加、bundle の `description` への名前の追加、bundle の `version` の引き上げ
4. `plugins/dev-workflow-bundle/.claude-plugin/plugin.json` の `description` も marketplace.json と同じ文面にする
5. 新メンバーの `SKILL.md` の前置き部分の末尾に `## Dispatch authorization` 節を置く。本文は他メンバーと 1 文字も違えない(`/verify-plugins` と `run-tests` の Check 7 が検査する)
6. CHANGELOG.md を更新する

`skills` 配列と `plugins/<bundle-name>/skills/` 配下のエントリは必ず一致させる。新しい bundle を作る場合も、`skills` 配列を明示すること以外はエージェント / フック wrapper と同じ手順になる。

## 検証コマンド

```bash
/verify-plugins        # 構造・バージョン・動作テスト
/verify-plugins --full # 上記 + CLI 更新の確認
/test-skills           # スキル・エージェントの動作テスト
```

`Skill(run-tests)`(構造)、`Skill(run-node-tests)`(`tests/`)、`Skill(verify-bundle-sync)`(bundle コピーの同期)は dev-workflow の Check / Test でも実行される。

## コーディング規約

- スキル名・プラグイン名・エージェント名は kebab-case(例: `security-scanner`、`peer`、`tr-hq`)
- バージョンは SemVer。marketplace.json にだけ書く(`caffeinate` / `translate` は plugin.json と揃えて上げる)
- README.md は利用者向け(使い方・設定)、SKILL.md は Claude 向け(処理の流れ・出力形式)
- `allowed-tools` やバージョン運用などの規範は `.claude/rules/` にある

## セキュリティ

プラグインを追加したら `/security-scanner --project` を実行し、問題がないことを確かめる。