バンドルの作成
バンドルは通常のファイルをまとめたGitリポジトリ、またはnpmパッケージです。登録作業は不要で、マニフェストも必須ではありません。
最初のバンドルを作る
スキルを1つ含むリポジトリを作成します。descriptionは必須です。名前を指定しない場合は、フォルダー名が使われます。
---
description: Say hello from my first Skul bundle.
---
Say hello.
GitHubにプッシュすると、任意のGitプロジェクトから追加できます。
skul add you/my-bundle
取得元にローカルパスを指定することはできません。デフォルトブランチに取り込む前に変更を試すには、ブランチをプッシュして--ref my-branchで追加してください。
ファイル構成
1つのフォルダーにskills/、commands/、agents/、ルートの指示ファイルを配置します。
skills/
commands/
agents/
AGENTS.md # or CLAUDE.md, QWEN.md
mcp.json
Skulは、それぞれの項目に対応するすべてのツールにコピーします。特定のツールだけで使う内容は、.claude/skills/や.cursor/commands/など、そのツール専用のディレクトリに置きます。
1つのバンドルと複数のバンドル
リポジトリのルートをバンドルにする場合、バンドル名はリポジトリ名になります。
github.com/you/react-bundle
├── skills/
└── commands/
各サブディレクトリを別のバンドルにすることもできます。この場合は、ディレクトリ名がバンドル名になります。
github.com/you/ai-bundles
├── react-expert/
│ ├── skills/
│ └── agents/
└── python-data/
└── skills/
構成に応じて、skul add you/react-bundleまたはskul add you/ai-bundles react-expertを実行します。複数のバンドルを含むリポジトリでは、ルートにあるAGENTS.md、CLAUDE.md、QWEN.mdはバンドルの内容に含まれず、Skulが警告を表示します。共有する指示はbundles/common/に置いてください。
npm
同じ構成をパッケージとして公開し、skul add npm:@you/react-skillsでインストールできます。@1.2.0または--ref nextでバージョンやdist-tagを指定できます。非公開レジストリを使う場合は、SKUL_NPM_REGISTRYとSKUL_NPM_TOKENを設定します。
ルートの指示はほかのツールでも使える
CLAUDE.mdを含めると、CodexにもAGENTS.mdとして渡されます。AGENTS.mdを含めれば、Claude CodeにもCLAUDE.mdとして渡されます。Copilotには.github/copilot-instructions.mdも生成されます。すべての対応関係は、対応ツールを参照してください。
マニフェスト(任意)
{
"root_instruction_mode": "replace"
}
マニフェストではメタデータを追加します。Skulが自動で判断できる内容を繰り返し記述する必要はありません。toolsを宣言すると、そこに記載したツールだけが対象になります。ルートの指示を渡すツールも明示的に含めてください。複数のバンドルを含むリポジトリでは、ルートのマニフェストがデフォルト値を提供し、各バンドルのマニフェストがその値を上書きします。nameは表示用です。バンドルの識別には、ディレクトリ名またはリポジトリ名を使います。
MCPサーバー
Agent Pluginsスキーマを使い、mcp.jsonにサーバーを一度だけ宣言します。
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"docs": {
"type": "stdio",
"command": "docs-server",
"args": ["--root", "${PLUGIN_ROOT}/reference"],
"env": { "CACHE_DIR": "${PLUGIN_DATA}/cache" }
},
"remote": {
"type": "streamable-http",
"url": "https://example.com/mcp"
}
}
}
Skulは各ツールのファイル形式に合わせて設定を書き込みます。${PLUGIN_ROOT}はキャッシュ内のバンドルのディレクトリ、${PLUGIN_DATA}は~/.skul/data/配下のバンドルごとのディレクトリです。Skulはこのディレクトリを作成しません。
Skulはこれらの設定ファイル全体を所有せず、必要な項目だけをマージします。
- 自分で設定したサーバー、ほかのバンドルのサーバー、無関係な設定は保持します。
skul removeは、そのバンドルが追加した名前の項目だけを削除します。ファイル自体を削除するのは、Skulが作成したファイルが空になった場合だけです。- 宣言済みのサーバー名を置き換えることはありません。
skul addは何も書き込む前に処理を拒否し、対象ファイルを表示します。 - Codexの
.codex/config.tomlは、末尾にマーカーで区切ったブロックを追加して編集します。それ以外の内容はバイト単位で保持します。 - 対象ファイルがGitで追跡されている場合は、ルートの指示と同様にシャドウを適用します。
opencode.jsonはこのケースによく当たります。1つのファイルのシャドウを所有できるバンドルは1つだけです。 - Clineにはプロジェクト単位のMCP設定先がありません。
--globalを使ったときだけサーバーを書き込みます。
マージ後のファイルには、そのマシン固有の絶対パスが含まれます。そのため、Skulが作成したファイルでなくても除外ブロックに追加します。
Claude Codeは実行中に~/.claude.jsonを書き換えます。skul add|remove|reset --globalを実行する前にClaude Codeを終了してください。
ほかのリポジトリの項目を参照する
スキルをバンドルにコピーする代わりに、取得元を参照できます。skul.refs.jsonを追加します。
{
"refs": [
{ "target": "skills", "name": "insane-search", "source": "fivetaku/insane-search" },
{ "target": "root-instruction", "source": "fivetaku/standards" }
]
}
| フィールド | 説明 |
|---|---|
target | 必須。 skills、agents、commands、root-instructionのいずれかです |
name | root-instruction以外では必須です。ローカルで使う項目名です |
source | 必須。 skul addが受け付けるすべての取得元形式を使えます |
bundle | source内に対象の項目を含むバンドルが複数ある場合に必要です |
item | リモートの項目セレクターです。例:skills/other-name。デフォルトはtargetとnameから決まります |
ref | 取得するブランチ、タグ、コミットです |
path | ルートの指示を参照する場合のローカルパスです。例:AGENTS.md |
sourcePath | 入れ子のマーケットプレイスやバンドルを含む、source内のサブディレクトリです |
description | スキル、コマンド、エージェントの説明を1行で上書きします |
disable-model-invocation | スキルの参照で、ユーザーが依頼したときだけ実行する設定を強制します |
参照する取得元は、通常のバンドルと同じキャッシュを使います。.claude-plugin/marketplace.jsonを含むリポジトリは、プラグインをバンドルとして公開します。名前が衝突する場合は、プラグインで宣言されたnameをbundleに指定してください。モノレポ内のマーケットプレイスでは、それを含むディレクトリをsourcePathに指定します。SkulはsourcePathの中だけを探します。