決まりを文書に残す
AIは会話の外のことを覚えていない。毎回読む文書に、作業の種類ごとの決まりと禁止を書き、破られては困る決まりは文書ではなく設定で止める。
要点
- 会話だけで伝えた決まりは、会話の要約のあとや次の作業に残らない。リポジトリの文書に置く。
- 文書は毎回読まれるが、従うかはモデルが決める。例外を許さない決まりは、拒否の設定とフックで止める。
- 作業の種類で決まりが変わるなら、種類の判定を冒頭に置き、種類ごとに節か別の文書へ分ける。
- 短く保ち、矛盾を消す。長い文書と食い違う指示は、守られにくくなる。
- 道具ごとに置き場所が違う。AGENTS.md は複数の道具が読む共通の形。
文書と設定の分担
Claude Code の公式文書は、CLAUDE.md を強制される設定ではなく文脈として扱うと書き、どう判断しても止めたい操作には PreToolUse フックを使うよう示す[1]。指示には、モデルが読んで従うかを決めるものと、道具が必ず実行するものの2種類がある[2]。
- 同じ文書は、
.envを読まない、整形を必ず掛ける、移行のフォルダに触らない、のような決まりを例に、「ほぼ毎回」で足りないものは設定へ移すよう勧める[2]。 - 強調の語を足しても守られない行は、文書が長すぎて埋もれたか、例外を許さない決まりで、フックに移すべきものとされる[2]。
- 逆に、好みの問題をフックにしない。名前付きのエクスポートを好む、のような例外のある決まりは文書に残す[2]。
道具ごとの置き場所
| 道具 | リポジトリ全体 | 範囲を絞る仕組み | 個人用、全体用 |
|---|---|---|---|
| Claude Code | ./CLAUDE.md か ./.claude/CLAUDE.md。CLAUDE.md が無ければ AGENTS.md | .claude/rules/*.md の paths で、合うファイルを扱うときだけ読む。下の階層の CLAUDE.md | ~/.claude/CLAUDE.md、CLAUDE.local.md、組織が配る管理用の CLAUDE.md |
| GitHub Copilot | .github/copilot-instructions.md | .github/instructions/*.instructions.md の applyTo。AGENTS.md は近いものが優先 | ここでは扱わない |
| Cursor | AGENTS.md | .cursor/rules の .mdc。常に、ファイルの型で、AIの判断で、手で呼んだとき、の4通り | ここでは扱わない |
| OpenAI Codex | AGENTS.md。AGENTS.override.md があればそちら | 下の階層の AGENTS.md。現在の場所に近いものが後に来る | ~/.codex/AGENTS.md |
出典は Claude Code[1]、GitHub Copilot[3]、Cursor[4]、OpenAI Codex[5]。AGENTS.md は Linux Foundation の Agentic AI Foundation が管理する共通の形で、編集するファイルに最も近いものが優先される[6]。複数の道具を使うなら、決まりの本体を AGENTS.md に置き、CLAUDE.md から読み込む形が取れる[1]。
読み込みの順と、消える所
- 作業の場所とその上の階層の CLAUDE.md は、起動時に、上から下へ連結して入る。上書きではなく足し合わせで、食い違えば Claude がどちらかを任意に選び得る[1]。
- リポジトリの直下の CLAUDE.md は、会話の要約のあとに読み直される。会話でだけ伝えた指示は残らない[1]。
- 大きさの目安は1ファイル200行未満。読み込み先の分割で整理はできるが、全部が一緒に入るので費用は減らない。一部にしか効かない決まりは
paths付きの決まりへ移す[1]。 - Codex は連結の合計が既定で32KiBに達すると、それより後の文書を足さない。後に置いた細かい決まりほど切られる[5]。
何を書くか
コードを読めば分かることは書かない。公式文書の目安は、書く前に、コードを読めば見つかるか、実際に探しに行くか、の2つを問い、両方とも当てはまれば省くことである。書くべきは、会議で決めたこと、1人の頭の中にあるデプロイの手順のような、リポジトリに無い情報である[2]。
| 書くもの | 例 |
|---|---|
| 作業の種類の判定 | 自社の基盤の開発か、顧客の案件か、運用か。種類ごとに使ってよい道具と編集してよい範囲が違う |
| 確かめの正確な命令 | 型、静的解析、テストの命令と、1ファイルだけ流す命令。AIの出力を確かめるの2段目 |
| リポジトリに無い決定 | デプロイの流れ、移行の扱い、採用した誤りの扱いの部品 |
| 禁止と承認 | コミットと push の可否、本番に触れる操作、登録の前の人の承認。設定でも止める |
| 言葉と書き方 | 画面の文言の決まり、使わない言葉 |
CLAUDE.md 作業の種類で分ける例
# 作業の種類
始める前に、次のどれかを判定し、1行で宣言する。途中で変わったら、また宣言する。
- A 基盤の開発: api/ と web/ のコードを直す
- B 顧客の案件: 案件の道具だけで操作し、このリポジトリは編集しない
## A 基盤の開発
- 確かめ: scripts/check.sh を流し、全部の成功を出力で示してから報告する
- ルーティングを足したら、認可の設定も直す
- 禁止: git commit と git push。その場で頼まれたときだけ行う
## B 顧客の案件
- 登録の前に、下書きを drafts/ に書き、人の承認を得てから書き込む
- 詳しい手順は docs/案件/00_概要.md を読む
種類の判定を先に書くのは、決まりが種類ごとに矛盾するからである。B ではリポジトリを編集しないが、A では編集する。判定が無いと、片方の決まりがもう片方の作業に混ざる。長い手順は別の文書に置き、ここからは場所だけを指す。
.claude/settings.json 文書で止まらない禁止を設定で止める
{
"permissions": {
"ask": ["Bash(git push *)"],
"deny": ["Read(./.env)", "Read(./.env.local)", "Read(./secrets/**)"]
}
}
拒否の規則は、自動の許可を含むどの権限のモードでも効く。ただし規則は道具の呼び出しに合わせて当たり、意図には当たらない。ファイルを開くスクリプトは Read の拒否をすり抜けるため、OSの水準で止めるにはサンドボックスを使う[2]。
守られないとき
| 症状 | 原因の候補 | 直し方 |
|---|---|---|
| 特定の行だけ無視される | 文書が長い。例外を許さない決まりを文書に書いている | 短くする。フックか拒否の設定へ移す |
| 毎回違う方を選ぶ | 上と下の階層の文書、決まりのファイルが食い違う | 古い記述を消し、1か所にまとめる |
| 途中から忘れる | 会話でだけ伝えた。下の階層の文書がまだ読まれていない | リポジトリの直下の文書に書く |
| 別の種類の作業の決まりが混ざる | 種類の判定が無い | 冒頭に判定と宣言を置く |
他人のリポジトリを開けば、そこにある CLAUDE.md や AGENTS.md も読まれる。Claude Code は、作業の場所の外を指す読み込みを初めて見たとき承認を求める[1]。開く前に中身を読み、読ませた文書に紛れた命令と同じ扱いにする。
参照
- How Claude remembers your project Anthropic
- Best practices for Claude Code Anthropic
- Adding repository custom instructions for GitHub Copilot GitHub Docs
- Rules Cursor Docs
- Custom instructions with AGENTS.md OpenAI
- AGENTS.md Agentic AI Foundation