← ishizakahiroshi.com
手順書 Guide 2026-08-30

複数の AI CLI で skills 棚とルールの正本を 1 本にまとめる

One skills shelf and one rules file across eight AI CLIs

対象 Covers Claude Code Codex OpenCode GitHub Copilot CLI Grok Antigravity Cursor Agent未測定not measured Gemini CLI未測定not measured

AI コーディング CLI を何本も併用していると、同じものを 2 つ管理させられます。skills が CLI ごとに別の場所へ散らばり、共通ルールを CLI の数だけ書き写すことになる。どちらも「正本を 1 箇所に置き、各 CLI にはそれぞれの流儀で到達させる」だけで解決します。この記事は、その配線を実際に作るための手順書です。各 CLI が本当にどのファイルを読むかは、推測ではなく実測しました。上に並べた 8 つが対象です(Cursor Agent と Gemini CLI は実行できず未測定ですが、置き場と配線は載せています)。

Run several AI coding CLIs side by side and you end up maintaining everything twice: skills scatter into a different directory per CLI, and the shared rules get copied once per CLI. Both are fixed the same way. Keep the canonical copy in one place and let each CLI reach it however that CLI expects. This page is the procedure for building that wiring, and which file each CLI actually reads was measured rather than assumed. The eight above are covered (Cursor Agent and Gemini CLI could not be run, so they are unmeasured, but their locations and wiring are included).

AI エージェントにそのまま渡す

この手順は機械可読な Markdown を正本にしてあります。お使いの AI CLI にこの 2 行を投げれば、確認しながら配線まで実行できます。

https://raw.githubusercontent.com/ishizakahiroshi/many-ai-cli/main/docs/manual_shared-skills-and-rules.md
この URL の手順どおりに、私の環境へ配線してください。停止条件も守ってください。

正本は GitHub の docs/manual_shared-skills-and-rules.md です(本文は英語ですが、コマンドは同じで、日本語の解説はこのページにあります)。ここに全文を複製すると、この記事が言っている二重管理そのものになるので置いていません。危ない操作を踏まないための停止条件も正本に入っています。旧 URL の setup.md は正本を案内するだけのファイルになりました。

このページのコマンド欄は、その正本を表示時に読み込んで出しています。ここには写しを持っていないので、正本を直せばこのページも同時に変わります。

Hand it straight to an AI agent

The procedure is kept as machine-readable Markdown. Give your AI CLI these two lines and it can walk through the wiring with you.

https://raw.githubusercontent.com/ishizakahiroshi/many-ai-cli/main/docs/manual_shared-skills-and-rules.md
Follow the procedure at this URL and wire up my environment. Respect the stop conditions.

The canonical copy is docs/manual_shared-skills-and-rules.md on GitHub, and the English text below is that file rendered live. Nothing is copied into this page, so the two cannot drift apart. The stop conditions that keep an agent from doing anything destructive are in the same file.

この手順書の使い方

上から順に読んで手で実行してもいいですし、章ごとそのまま AI エージェントへ貼って実行させることもできます。危ない操作を踏まないための停止条件を第 8 章に置いてあるので、エージェントに任せる場合はそこも一緒に渡してください。

How to use this page

Read it top to bottom and run the commands yourself, or paste a section straight into an AI agent. Section 10 holds the stop conditions, so pass those along too if you are letting an agent do the work.

音声で聴く(AI ラジオ解説・18 分)

Audio version (AI-narrated, 18 min)

この記事の内容を NotebookLM でラジオ風に音声化しました。移動中や作業中の "ながら聴き" にどうぞ。

An AI-narrated walkthrough of this article, made with NotebookLM. The audio is in Japanese.

1. 何を解決するか

併用していると、次の 2 つが CLI の数だけ増えます。

やることは 2 つだけです。

そもそもの困りごと: 読むファイル名が AI ごとに違う

同じ「作業のルール」を伝えたいだけなのに、受け取る側の名前がそろっていません。

CLAUDE.md AGENTS.md GEMINI.md copilot-instructions.md .cursor/rules CONTEXT.md

図 1: 同じことを言うために、名前の違うファイルがこれだけ要ります。しかも置き場所も CLI ごとに違います。

ここで素直に「全部作る」と、次の形になります。

図 2: 全部に本文を置く つらい

CLAUDE.mdルール本文(146 行)
AGENTS.mdルール本文(146 行・同じ内容)
GEMINI.mdルール本文(146 行・同じ内容)
ルールを 1 つ足すたびに 3 箇所を直す。直し忘れると、CLI によって言うことが変わる。ズレを見つけるための検査も別途要る。

図 3: 1 本を正本にして、ほかは指すだけ これでよい

AGENTS.md1 行「CLAUDE.md を読め」
▸
CLAUDE.mdルール本文(146 行)
ここだけを編集する
GEMINI.md1 行「CLAUDE.md を読め」
▸
copilot-instructions.md1 行「CLAUDE.md を読め」
▸
直すのは 1 箇所だけ。ほかのファイルは 1 行のまま一生変わらないので、ズレようがない。検査も要らない。

図 2 と図 3: ファイルの数は減りません(各 CLI が自分の名前しか見ないので)。減るのは維持する実体の数です。ここを取り違えると「どうせ 2 つ要るなら同じ内容を置けばいい」と考えてしまい、図 2 に戻ります。

「その 1 行、AI はちゃんと読むのか」という当然の疑問は残ります。これは測れます。実際に測った結果は第 6 章にあります。

2. 各 CLI が実際に何を読むか(実測)

配線を決める根拠です。canary、つまり「どんなメッセージが来ても決まった文字列だけ返せ」と書いた指示ファイルを置いて、CLI がそれに従うかで判定しました。プロジェクト直下に AGENTS.md と CLAUDE.md(と GEMINI.md)を、それぞれ別の合言葉入りで置いて実行しています。

この測り方の限界 従わない = 読んでいない、ではない

canary に従ったなら、そのファイルは system prompt に載っていたと言えます。ツールを 1 回も呼ばずに振る舞いが変わるからです(OpenCode では JSON イベントで読み取りツールの呼び出しが 0 件であることを確認しました)。

しかし従わなかったとき、読んでいないとは言えません。読んだうえで「これだけ返せ」という指示を採用しなかっただけかもしれない。筆者はここを取り違えて、いったん「Antigravity は 3 つのどれも読んでいない」と書きました。実際には読んでいました(次章)。

代わりに「矛盾しない事実」を 3 ファイルに 1 つずつ書いて質問する測り方も試しましたが、こちらは使えませんでした。エージェントは rg でファイルを grep して答えてしまうので、自動で読み込まれたのか自分で探しに行ったのかが区別できません。実際 Codex は grep してから答えていました。

CLI従った方補足
Claude CodeCLAUDE.mdAGENTS.md だけを置いた場合も従いませんでした。プロジェクトの AGENTS.md は読んでいません
CodexAGENTS.md
OpenCodeAGENTS.mdAGENTS.md があると同じディレクトリの CLAUDE.md は読まれません(次章)
GrokAGENTS.md
GitHub Copilot CLI状況で変わるAGENTS.md だけならそれに従い、AGENTS.md と CLAUDE.md の 2 つなら CLAUDE.md に従いました。GEMINI.md を足して 3 つにすると、どれにも従わなくなりました(2 回とも)。読んでいないという意味ではなく、矛盾する 3 つを前に採用をやめた、という読みです
Gemini CLI未測定認証で止まりました。個人向けの無料枠は「このクライアントはサポート対象外。Antigravity へ移行を」というエラーになります
Antigravity(agy)従わないが読んでいるcanary には従いませんでしたが、対話セッションで自分のコンテキストを尋ねると、グローバルの ~/.gemini/GEMINI.md とプロジェクトの AGENTS.md を <RULE[...]> というタグ付きで読み込んでいると答えました。詳細は次章
Cursor Agent CLI未測定無料プランでモデル指定が拒否され、実行できませんでした

グローバル指示ファイルの置き場は CLI ごとに違います。統一された 1 パスは存在しません。

CLIグローバル指示ファイル
Claude Code~/.claude/CLAUDE.md
OpenCode<configディレクトリ>/AGENTS.md。無ければ ~/.claude/CLAUDE.md へフォールバック
GitHub Copilot CLI~/.copilot/copilot-instructions.md。公式ドキュメントには .claude/CLAUDE.md も使うと記載あり(未測定)
Codex~/.codex/AGENTS.md
Grok~/.grok/ 配下の AGENTS.md など
Gemini CLI~/.gemini/GEMINI.md
Antigravity(agy)~/.gemini/GEMINI.md(Gemini CLI と同じファイル)
Cursor Agent CLI無し。CLI からはグローバルのユーザールールを使えません

3. OpenCode の癖(先勝ちで排他)

OpenCode だけは選び方に癖があります。バイナリの中の指示ファイル解決コードを読むと、こうなっていました。

GitHub の正本から読み込み中…

グローバルとプロジェクトは合算されますが、同じ階層の中では先勝ちで排他です。ここから帰結が 2 つ出ます。

3-b. Antigravity は読んでいた(測り方を間違えた話)

canary に従わなかったので、筆者は最初「Antigravity は AGENTS.md を読んでいない」と判断しました。これは誤りでした。

対話セッションで Antigravity CLI 自身に初回ロードの内容を尋ねると、次のように答えます。

スコープロードされたファイルプロンプト上のタグ
Global(マシン全体)~/.gemini/GEMINI.md<RULE[user_global]>
Project(ワークスペース)AGENTS.md<RULE[<プロジェクトのパス>/AGENTS.md]>

あわせて、探索の仕様も説明されました。カレントディレクトリからリポジトリルートに向かって GEMINI.md、AGENTS.md、.agents/rules/*.md を探す、というものです。グローバルは ~/.gemini/GEMINI.md が自動ロードされます。

プロンプト上のタグ名まで挙がっている点が効いています。ファイルを探して見つけただけなら、こういう内部の目印は出てきません。読み込みと遵守は別物で、canary が測れるのは後者だけでした。

教訓

canary が返れば「載っている」と言えます。返らなくても「載っていない」とは言えません。否定側を主張するには、別の測り方が要ります。今回は当人に聞くのがいちばん早い、という結果になりました(ただし自己申告なので、タグ名のような内部の痕跡が伴っているかを見てください)。

出典: Antigravity CLI 1.1.22 の対話セッションでの応答。ベンダーの一次ドキュメントではありません。

3-c. 気づいたので配線した

ここで、この記事を書いている途中に別の穴が見つかりました。Antigravity には skills の棚を繋いでいませんでした。ルールは届いていたのに、skills だけ素通りしていたわけです。今後も使う CLI なので、記事を書く手を止めて配線しました。この章はその記録です。

Antigravity の探索仕様

同梱の skill agy-customizations が仕様の正本でした。~/.gemini/antigravity-cli/builtin/skills/agy-customizations/ にあります。読むと、discovery は 3 系統でした。

スコープ場所備考
Workspace.agents/(.agent/ / _agents/ / _agent/ も可)cwd からリポジトリルートへ遡って探す。チームで共有する用
階層ルールGEMINI.md / AGENTS.md / .agents/rules/*.md同じく cwd からルートへ遡り、見つけたものを読む
グローバル~/.gemini/config/マシン全体。この下の skills/ が利用者の棚

customization の種類は Rules / Skills / Plugins / Hooks / MCP Servers の 5 つで、Skills は skills/<name>/SKILL.md という他の CLI と同じ形でした。つまり棚をそのまま繋げます。

足りなかったのは 1 本だけだった

確認したところ、ルール側は既に繋がっていました。~/.gemini/GEMINI.md に共通ルールの正本を読ませる参照行が入っていて、これは Gemini CLI 用に整備したものです。Antigravity は同じファイルを読むので、そのまま効いていました。実際、対話セッションでは <RULE[user_global]> として載っていることが確認できます。

足りなかったのは skills の棚だけでした。1 本張って解決です。

GitHub の正本から読み込み中…

張ったあとに確認します。まず、見えているか。

agy --print "あなたが今使える skill の総数を教えて"
  → 53 個

共有棚のディレクトリ数と一致しました。ただしこれは一覧に出ているだけで、実際に使えるかは別です。棚の skill を 1 つ名指しして起動させます。

> project-init できる?

  Read(~/.gemini/config/skills/project-init/SKILL.md)

  はい、project-init を実行できます。
  (SKILL.md の本文にある作業内容を列挙し、適用先のリポジトリを聞き返してきた)

ジャンクション越しに実体まで辿り、フロントマターだけでなく本文まで読んで動いています。ここまで見て、ようやく「棚が繋がった」と言えます。一覧に出ることと、起動して中身が読まれることは別の確認です。

この節から持ち帰るもの

ルールが届いていることと、skills が届いていることは別です。今回は「ルールは繋がっているから大丈夫だろう」と流していて、記事を書くために各 CLI を並べ直したときに初めて気づきました。CLI を増やしたときは、2 系統それぞれを確認してください。

もう 1 つ。同梱の skill が仕様書になっていることがあります。Antigravity は agy-customizations がそれでした。ドキュメントを Web で探す前に、手元の CLI が自分の仕様を持っていないか見た方が速いことがあります。

4. 手順 A: skills の共有棚を作る

A-1. 正本の置き場を決める

どこでも構いませんが、CLI の設定ディレクトリの外に置きます。この記事では次のパスで書きます。

既に skills を持っている CLI があるなら、その中身をここへ移動します。コピーだと二重管理が残ります。

A-2. 張り先の中身を先に確認する

リンクを張る前に、張り先が「無い」か「空」かを必ず確認します。中身のあるディレクトリを消してリンクに置き換える操作は絶対にしないでください。

Windows:

GitHub の正本から読み込み中…

macOS / Linux:

GitHub の正本から読み込み中…

entries が 0 でないものが 1 つでもあれば、そこで止めて中身を棚へ移してから進みます。

A-3. リンクを張る

Windows はディレクトリジャンクションを使います。管理者権限も開発者モードも要りません。既存があればスキップする書き方にしてあります。

GitHub の正本から読み込み中…

macOS / Linux はシンボリックリンクです。

GitHub の正本から読み込み中…

注意 触ってはいけない場所

~/.codex/skills にはリンクを張らないでください。Codex 同梱のシステム skill が入っており、丸ごと差し替えると隠れてしまいます。Codex には ~/.agents/skills 経由で届きます。

~/.gemini/antigravity-cli/builtin/skills も同じです。Antigravity 同梱の skill が入っています。利用者の棚は ~/.gemini/config/skills 側です。

ファイル名は SKILL.md(大文字)にします。小文字の skill.md は認識されないことがあります。

使う CLI が Codex + Claude Code + OpenCode の 3 つだけなら、必要なリンクは ~/.claude/skills、~/.agents/skills、<configディレクトリ>/opencode/skills の 3 本です。Antigravity も使うなら ~/.gemini/config/skills を足します。

5. 手順 B: 共通ルールの正本を 1 本にする

B-1. どれを正本にするか

~/.claude/CLAUDE.md を正本にするのが有利です。第 2 章の表のとおり、このパスは Claude Code が本体として読み、OpenCode がフォールバックで読み、Copilot も公式に参照すると書いています。グローバル層でいちばん到達範囲が広い名前です。

逆に「主流は AGENTS.md だから」とグローバルを寄せるのは得をしません。グローバルの置き場は CLI ごとに違うので、名前を揃えても 1 ファイルにはならず、3 箇所以上の複製になります。

B-2. 参照だけを置く CLI

~/.codex/AGENTS.md と ~/.grok/AGENTS.md には、正本を読ませる 1 行を置きます。

GitHub の正本から読み込み中…

この参照は自動ロードではありません。AI が自分で開いて初めて届きます。届くかどうかは第 7 章の方法で測れます。

注意 作ってはいけないファイル

<configディレクトリ>/opencode/AGENTS.md を作らないでください。作ると OpenCode の ~/.claude/CLAUDE.md へのフォールバックが止まります(第 3 章の先勝ち排他)。

B-3. 正本の骨格

中身は好みですが、索引にして本文を別ファイルへ逃がすと、全 CLI の毎セッションのコンテキストを食わずに済みます。骨格の例です。

GitHub の正本から読み込み中…

索引が肥大しない仕組みを 1 つ入れておくと効きます。行数の上限を検査するスクリプトをコミット前フックに置くだけでも、放っておくと本文が戻ってくるのを止められます。

B-4. リポジトリ単位の指示ファイル

リポジトリ直下では、CLAUDE.md を正本にして AGENTS.md にポインタを置く形が扱いやすいです。第 2 章のとおり Claude Code は AGENTS.md を読まず、Codex と OpenCode は AGENTS.md を読むので、どちらの入口も塞ぎません。

GitHub の正本から読み込み中…

逆向き、つまり AGENTS.md を正本にして CLAUDE.md を生成物にする形も成立しますが、同じ内容のファイルが 2 つになり、ズレを検査する仕組みが要ります。参照 1 行で足りるなら、管理する実体が少ない方が楽です。

6. 参照方式は本当に効くのか

「参照 1 行は自動ロードではないから届かないのでは」という不安はもっともです。これは測れます。

やり方は、正本にしか書いていない事実を答えないと正解できない質問を、文書に触れない聞き方で投げること。実際に試した結果がこれです。

聞き方結果
質問形式で 3 回 3 回とも AGENTS.md のポインタから CLAUDE.md を開き、3 回とも正解した
作業依頼の形で 2 回
この機能を追加したい、実装方針を 3 行で
2 回とも CLAUDE.md からさらに参照先の台帳まで辿り、「その方針は見送り済み」と答えた。実装案を書き出した回は 0

参照方式は実務上機能していました。心配なら自分の環境で同じ測り方をすればいい、というのがこの章の要点です。

7. 検証(設定後に必ず実行する)

7-1. リンクが張れているか

Windows:

GitHub の正本から読み込み中…

macOS / Linux:

GitHub の正本から読み込み中…

全部が同じ棚を指していれば成功です。

7-2. skills を認識しているか

CLI を新しいセッションで開き直してから確認します。棚に置いた skill が一覧に出るか、起動語で反応するかを見ます。設定を変えた既存セッションには反映されません。

7-3. ルールが届いているか(canary テスト)

これがいちばん確実です。一時ディレクトリを作り、指示ファイルに合言葉を書いて各 CLI で実行します。

GitHub の正本から読み込み中…

各 CLI の非対話実行です。バージョンによって変わるので、通らなければ --help を見てください。

GitHub の正本から読み込み中…

CANARY-1234 が返れば、その CLI にはそのファイルが届いています。返らなければ届いていません。ファイル名を CLAUDE.md に変えて同じことをすると、どちらの名前を読むかが分かります。

グローバル側を確かめたいときは、正本にしか書いていない見出しの語を挙げて「その見出しが system prompt にあるか、あるなら最初の 1 文を書き写して」と聞きます。書き写せれば届いています。

8. 停止条件(AI エージェントに任せる場合)

この手順をエージェントに実行させるなら、次の条件も一緒に渡してください。どれかに当たったら続行せず確認を求めさせます。

9. 元に戻す

リンクを外すだけです。棚の中身は消えません。リンクでないものは消さないでください(実ディレクトリを消すと中身ごと消えます)。

GitHub の正本から読み込み中…
GitHub の正本から読み込み中…

10. 未検証・環境差