create-repo-skill について
OpenSEO リポジトリでエージェントスキルを作成・登録するための、メンテナー向け内部ガイドです。正規の保存場所、ミラー方法、レビュー要件、公開手順を定めています。
主な機能
- 01スキルの正規保存場所の指定
- 02Claude Code のシンボリックリンク規則
- 03ベンダー製スキルのロック管理
- 04公開スキルの登録手順
- 05同期状態の確認方法
活用シーン
- 01リポジトリ内スキルの追加
- 02ユーザー向け SEO スキルの公開
- 03Claude Code のミラー差分確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ every-app/ open-seo --skill create-repo-skillインストール後、Claude Code で/create-repo-skillを入力して読み込まれたか確認します。
詳細
リポジトリスキルを作成する
レイアウト(不変条件)
.agents/skills/<kebab-name>/SKILL.mdが、すべてのスキルの唯一の正規配置先です — 顧客がインストールする公開プロダクトスキル(SEO ワークフロー)も、内部リポジトリスキル(merge-ready、papercuts、このスキルのようなエージェントのワークフロー)も同様です。ユーザーはnpx skills add every-app/open-seoを使って、このツリーからインストールします。.claude/skills/に置くのは.agents/skills/内へのシンボリックリンクのみです — このリポジトリで作業する Claude Code エージェントが自動読み込みするスキルごとに 1 つ作成します。ファイルをコピーしてはいけません。.agents/skills/は Prettier の対象外(ベンダー提供スキルはハッシュで固定)ですが、.claude/skills/は対象です。そのため、コピーすると.claude側で再フォーマットされ、ツリー間に差異が生じます。シンボリックリンクをルールにする前に、実際に 3 つのスキルでこの問題が起きました。prettier --check .はシンボリックリンクをたどらないため、シンボリックリンクは構造上、常に正規のソースとバイト単位で同一になります。- ベンダー提供スキル(外部由来)は
skills-lock.jsonでハッシュ固定されます(初回のベンダー取り込み時にskillsCLI が作成します)。ベンダー提供スキルの内容を手作業で編集してはいけません。ロックハッシュを有効に保つため、skillsCLI で再度取り込んでください。 .agents/skills/**は レビュー管理プレーン(AGENTS.mdを参照)の一部です。変更には CODEOWNERS による明示的なメンテナーのレビューが必要です。変更はブランチで行い、PR で明記してください。スキルの編集を付随的な変更として扱ってはいけません。
スキルの作成
-
mkdir .agents/skills/<kebab-name>を実行し、次のフロントマターを含むSKILL.mdを作成します。--- name: <kebab-name> # must match the directory name description: <what it does + explicit "use when ..." triggers> metadata: internal: true # ONLY for internal repo skills — omit for product skills --- -
スキルの種類を決めます。
-
内部リポジトリスキル(エージェント/開発ワークフロー):
metadata.internal: trueを設定します。公開されている場所には登録しないでください。リポジトリのエージェントに自動読み込みさせる場合は、ミラー用のシンボリックリンクを追加します。ln -s ../../.agents/skills/<name> .claude/skills/<name> -
公開プロダクトスキル(顧客向けの SEO ワークフロー):
internalフラグは付けません。通常、.claude/skillsのシンボリックリンクも作成しません(リポジトリのエージェントに顧客向けのワークフローは不要です)。公開スキルは、ライブのアプリ内エージェントである SAM に自動配信されます。判定はフェイルオープンのため、internal: trueがないと、リポジトリ開発向けの手順がエンドユーザーに配信されます。スキルに必要なセクションを含む標準の「Project context」前置きを用意し(seo-auditなど、同階層のスキルを参考にします)、ユーザーがスキルを見つけるあらゆる場所に登録します。src/server/features/sam/samSkills.test.ts— 固定された公開スキル一覧に名前を追加します(追加しない場合はテストが失敗します。この失敗がガードになります)。web/content/docs/skills/<name>.mdx— ドキュメントページを作成します(competitor-analysis.mdxなど、同階層のページを参考に、機能、使用するタイミング、得られる内容、最良の結果を得る方法を記載します)。web/content/docs/skills/index.md— 適切なワークフローセクションに項目を追加します。web/content/docs/skills/meta.json— ナビゲーション項目を追加します。src/routes/_app/ai.tsx—SKILL_NAMESに追加します。.agents/skills/seo-coach/SKILL.md— 「What each workflow does」の一覧に1行追加します。plugins/openseo/skills/<name>—scripts/sync-plugin-skills.mjsのskillsリストにスキルを追加し、pnpm sync-plugin-skillsを実行します(このディレクトリにはシンボリックリンクではなく実際のコピーを置きます。Claude Code プラグインと Codex プラグインはここからバンドルされ、Codex のインストーラーはシンボリックリンクされたファイルを黙ってスキップするため、シンボリックリンクにするとスキルのないプラグインが配信されます)。pnpm ci:checkは同期を再実行し、差分があると失敗するため、ここで更新を忘れても検出されます。ただし、以下のスキル数と一覧は文章でありチェックされないため、手動で更新してください。両方のplugins/openseo/*/plugin.jsonのdescriptionフィールド、Codex マニフェストのinterface.longDescription、およびweb/content/docs/claude-code-plugin.mdとweb/content/docs/codex-plugin.mdのスキル一覧です。- 任意:マーケティングやセットアップの掲載に適している場合は、
web/src/lib/feature-pages.tsとweb/content/docs/skills/setup.mdも更新します。
-
-
スキルが MCP ツールを参照する場合は、正確なツール名を使用し、
src/server/mcp/server.tsと同期させます。スキル内のツール名は、それに従うエージェントにとって重要です。公開スキルの場合は、src/server/features/sam/samChatTools.tsも確認します。SAM が使うツールセットは厳選された一部であり、SAM が持たないツールを指定するスキルの手順は、アプリ内エージェントで行き詰まります。 -
pnpm format:writeを実行します(ドキュメントページは対象ですが、.agents/skills自体は意図的に対象外です)。その後、コミットします。公開スキルの文章には、openseo-review-web-contentの基準を適用します。
同期チェック(判断に迷った場合、およびスキルを変更した後に実行)
for d in .claude/skills/*/; do n=$(basename "$d")
[ -L "${d%/}" ] || echo "DRIFT RISK — not a symlink: $n"
[ -e ".agents/skills/$n" ] || echo "BROKEN — no canonical source: $n"
done
検出された項目があれば、正規のコンテンツを .agents/skills/<name>/ に移します(違いを意図的に調整し、まず両方の差分を確認してください。新しい意図を優先します)。.claude のコピーを削除し、シンボリックリンクに置き換えます。