前回から残った問題は、skill の置き場所だった

ルール共通化の次に手順共有が出てきた

前回 までで、rule.md 1 ファイルを配信元の正本(Source of Truth)にして、deploy.sh~/.codex/AGENTS.md~/.claude/CLAUDE.md の 2 ターゲットに配信する整理を書きました。これで、両エージェントに同じ指示・ルールを読ませる問題は片付きました。

ところが、もうひとつ残っていた困りごとがありました。Claude Code で「これは毎回同じ手順で進めたいな」と思った作業を skill として定義しておくと便利なのですが、同じ skill を Codex 側でも呼びたい、という場面が出てきます。

rule.md は「両方に常時読ませる指示・ルール」を置く場所です。ここに作業手順まで全部書くと、すぐに膨らんでしまいます。あれ、また置き場所問題です。

rule.md の外にある手順を揃える

今回は、その「再利用したい作業手順 = skill」を両方のエージェントに同じ形で載せる話です。自作の persona-skills-core という別 repository を任意拡張として接続することで、Codex$ メンション候補と Claude Code/ スラッシュ候補から同じ skill を呼べる形に整理しました。

ここでの分け方は、かなり単純です。

  • 指示・ルールは agent-config-corerule.md
  • 再利用したい作業手順は persona-skills-coreskills/
  • 登録先の違いは Bootstrap CLI

この3つを混ぜないようにすると、どこを直せばよいかが分かりやすくなります。

skill も片方ずつ書くとズレる

Claude Code だけに置くと Codex から見えない

rule.md で指示・ルールを揃えたあと、しばらくは skill を Claude Code 側にだけ定義して使っていました。文書レビューや設計レビューなど、毎回同じ進め方をしたい作業を ~/.claude/skills/ 配下に置いて、/ スラッシュから呼び出す、という運用です。

1 台の端末の中ではそれで済むと思っていたのですが、Codex も普段使いし始めると話が変わりました。片方では呼べるのに、もう片方では呼べない。地味ですが、何度も起きるとかなり気になります。

  • Claude Code の skill 定義は Codex からは見えない
  • Codex$ メンション候補にも出てこない
  • 仕方なく、同じ手順を Codex 側で文章で書き直して使うことになる
  • 片方の skill を更新したら、もう片方にも反映する作業が発生する

手順のズレが再発する

rule.md の手書き同期で困ったのと同じ構図が、skill のレイヤーで再発したわけです。前提(指示)は揃ったのに、手順(skill)がエージェントごとに分かれている状態でした。ここを放置すると、また手で揃える生活に戻ります。

自分にとって問題だったのは、skill そのものの数ではありません。片方で直した作業手順を、もう片方にも正しく移す必要があることでした。手作業の同期が戻ってきた時点で、最初に rule.md を共通化した意味が薄くなります。

persona-skills-core から両方へ届ける

書く場所は skills/ に寄せる

整理した結果、skill / persona / workflow を 1 つの公開 repository に集約して、Bootstrap CLI で両方のエージェントに登録する構成にしました。それが自作の persona-skills-core です。

persona-skills-core/
├── skills/      # Codex / Claude Code から見える入口
├── workflows/   # 確認順、担当、成果物、停止条件
├── personas/    # 仮想担当者、チーム
├── tools/       # ポリシー、チェックリスト、テンプレート
├── scripts/     # Bootstrap CLI
└── README.md

書き手が触るのは skills/ 配下の SKILL.md と、それが参照する workflows/ personas/ tools/ です。skill の本体はここにしか書きません。

登録先の差は CLI に閉じ込める

登録は Bootstrap CLI に任せます。skill 本体に対して、Codex 側は plugin として、Claude Code 側は ~/.claude/skills/ 配下の skill directory として、それぞれの作法に合わせた登録先に CLI が symlink を張る、という構造です。

書き手側は「skill ディレクトリに 1 つ書く」だけで済みます。新しい skill を書いたあとに CLI を 1 回叩くと、両方の候補に同じ skill が出る。書く場所は 1 つ、登録先は 2 つ、という分担です。

agent-config-core とは、必要なときだけつなぐ

単独利用できる関係にする

persona-skills-core は、前回までで紹介した agent-config-core の任意拡張として位置付けています。ここで大事なのは、両者を強く依存させないことでした。

  • agent-config-core 単独で使ってもよい
  • persona-skills-core 単独で使ってもよい
  • 両方使う場合は、agent-config-core 側の deploy オプションから persona-skills-core の登録もまとめて走らせられる

依存方向を一方通行にしなかったのは、自分のユースケース上、片方だけ欲しいときがあるからです。たとえば「skill は要らないけど前提だけ揃えたい」端末では agent-config-core 単独で十分ですし、逆に「前提は手で書きたいけど skill 群は使いたい」場面なら persona-skills-core 単独で動かせます。

この形にした理由

最終形を選んだ理由は、3つあります。

1つ目は、skill のリリースサイクルを rule.md 配信から独立させたいからです。rule.md は「両エージェントに常時読ませる前提」を書く場所で、skill は新しい作業パターンが見つかるたびに増えたり直ったりします。

2つ目は、公開 repository として自分で保守する skill を継続改善したいからです。skill は自分の作業手順そのものなので、git history で改善の経緯を追える状態にしておくと後から見直しやすいです。

3つ目は、書き手から登録の作法の違いを切り離したいからです。Codex$ メンション候補と Claude Code/ スラッシュ候補は登録の作法が違います。その差は Bootstrap CLI に閉じ込めて、書き手は skill 本体に集中できるようにしました。

続きはこちら

次の記事では、persona-skills-core の Bootstrap CLI が CodexClaude Code の登録先の違いをどう吸収しているかを書きます。設計の話から、実際の登録フローへ進みます。

persona-skills-core の Bootstrap CLI で、同じ skill を両方へ登録する