この記事の要点
- Claude Code は、起動したフォルダと、その上のすべての階層にある
CLAUDE.md/CLAUDE.local.mdを起動時に読み込みます(公式 "How CLAUDE.md files load")。 - Claude Code は
CLAUDE.mdが1つもないときに限り、起動フォルダと上の階層のAGENTS.mdを読みます(公式 "When Claude Code reads AGENTS.md"、v2.1.277 以降)。 - Codex は、プロジェクトのルート(ふつうは Git のルート)から起動フォルダまで下りながら
AGENTS.mdを読みます。ルートが見つからないときは起動フォルダだけを見ます(公式 "AGENTS.md" ガイド)。 - 起動する前に、どの指示ファイルが読まれうるかを一覧する小さなシェルスクリプトを作り、手元の使い捨て環境で動きを確かめました。
背景
Downloads フォルダで AI コーディングエージェントを起動すると、そこに置かれた AGENTS.md や CLAUDE.md を指示として読んでしまう、という注意が X で話題になっていました。
指示ファイルは「起動したフォルダのものだけ」と思いがちですが、公式ドキュメントを読むと、ツールによって上の階層まで読みます。そこで、どこまで読むのかを公式の記述で整理し、起動前に点検する方法をまとめます。
1. Claude Code は上の階層の CLAUDE.md を全部読む
公式ドキュメント(Memory の "How CLAUDE.md files load")には次のように書かれています。
Claude Code loads
CLAUDE.mdandCLAUDE.local.mdfrom your current working directory and every directory above it.
~/Downloads/tool-x/src で起動すると、~/Downloads/tool-x/src、~/Downloads/tool-x、~/Downloads、~、/ …の各階層にある CLAUDE.md と CLAUDE.local.md が対象です。読み込んだ内容は上書きではなくつなげて使われます("All discovered files are concatenated")。
起動フォルダの下のフォルダにある CLAUDE.md は、起動時ではなく、Claude がそのフォルダのファイルを読んだり編集したりした時点で読み込まれます(同ページ)。
AGENTS.md はどうなるか
同じページの "When Claude Code reads AGENTS.md" によると、既定では次のとおりです。
| 起動フォルダと上の階層に | Claude Code が読むもの |
|---|---|
AGENTS.md があり、CLAUDE.md / CLAUDE.local.md がない |
AGENTS.md |
AGENTS.md と CLAUDE.md(または CLAUDE.local.md)の両方がある |
CLAUDE.md だけ |
AGENTS.md を直接読むのは v2.1.277 以降です。AGENTS.local.md、AGENTS.override.md、.agents/ 以下は読みません(同ページ)。
2. Codex は Git のルートから下だけを見る
Codex の公式ガイド "Custom instructions with AGENTS.md" には次のように書かれています。
Starting at the project root (typically the Git root), Codex walks down to your current working directory. If Codex cannot find a project root, it only checks the current directory.
- グローバル:
~/.codex(CODEX_HOMEを設定していればそこ)のAGENTS.override.md、なければAGENTS.md - プロジェクト: ルートから起動フォルダまでの各階層で、
AGENTS.override.md→AGENTS.md→project_doc_fallback_filenamesの順に、1階層につき1つ - 合計が
project_doc_max_bytes(既定 32 KiB)に達すると、それ以上は足しません
つまり公式の記述どおりなら、Git のルートより上の AGENTS.md は Codex の対象外です。一方、Git 管理されていないフォルダで起動すると、起動フォルダの AGENTS.md だけを見ます。
筆者の補足(推測を含みます): Claude Code と Codex で読む範囲が違うので、「Codex で大丈夫だったフォルダ」が Claude Code でも大丈夫とは限りません。両方を使う人は、Claude Code 側の範囲(上の階層すべて)に合わせて点検すると漏れが少ないと考えます。
3. 起動前に1回、読まれうる指示ファイルを一覧する
起動フォルダから / までの各階層と、ホームの設定置き場を見て、指示ファイルがあればサイズとパスを出すだけのスクリプトです。ファイルを変更したり消したりはしません。
#!/usr/bin/env bash
# 起動フォルダから / までの各階層と、ホームの設定置き場にある指示ファイルを一覧する(読むだけ)
d=$PWD
while :; do
for f in CLAUDE.md CLAUDE.local.md .claude/CLAUDE.md AGENTS.md .claude/AGENTS.md AGENTS.override.md; do
[ -f "$d/$f" ] && printf '%s\t%s\n' "$(wc -c <"$d/$f")B" "$d/$f"
done
[ "$d" = / ] && break
d=$(dirname "$d")
done
for f in ~/.claude/CLAUDE.md "${CODEX_HOME:-$HOME/.codex}/AGENTS.md" "${CODEX_HOME:-$HOME/.codex}/AGENTS.override.md"; do
[ -f "$f" ] && printf '%s\t%s\n' "$(wc -c <"$f")B" "$f"
done
[ -d ~/.claude/rules ] && find ~/.claude/rules -name '*.md' -type f
echo "git root: $(git rev-parse --show-toplevel 2>/dev/null || echo なし)"
手元で試した結果
使い捨てのホーム(HOME=/tmp/demo-home)に、次のファイルを置いて試しました。
-
~/Downloads/AGENTS.mdと~/Downloads/CLAUDE.md(Downloads に置かれた想定) -
~/work/app/AGENTS.md(~/work/appはgit init済み)
~/Downloads/tool-x/src(Git 管理なし)で実行した出力です。
2B /tmp/demo-home/Downloads/CLAUDE.md
16B /tmp/demo-home/Downloads/AGENTS.md
git root: なし
2階層上の Downloads にあるファイルも一覧に出ました。上の公式の記述に当てはめると、ここで Claude Code を起動すれば ~/Downloads/CLAUDE.md が読み込まれる対象になります(CLAUDE.md があるので AGENTS.md は読まれません)。Codex は Git のルートがないので起動フォルダだけを見て、Downloads の AGENTS.md は対象外です。いずれも公式の記述からの当てはめで、実際のツールの起動は今回は試していません。
~/work/app で実行した出力です。
6B /tmp/demo-home/work/app/AGENTS.md
git root: /tmp/demo-home/work/app
検証環境: Linux 6.12、GNU bash 5.2.37、git 2.47.3。
4. 読み込まれたかをツール側で確かめる
- Claude Code: セッション内で
/contextを実行し、Memory files の一覧を見ます(公式 Memory)。CLAUDE.mdがなくAGENTS.mdを読んだときは、no CLAUDE.md found; AGENTS.md loaded: ...のような行が会話に出ます(同ページ)。 - Codex: 公式ガイドの例では、
codex --ask-for-approval never "List the instruction sources you loaded."のようにして、読み込んだ指示の出どころを Codex 自身に答えさせています。
5. 上の階層の CLAUDE.md を外したいとき
Claude Code では、settings の claudeMdExcludes にパスか glob を書くと、その CLAUDE.md を読み込みから外せます。パターンは絶対パスと照合されます。自分の環境だけに効かせるなら .claude/settings.local.json に書きます(公式 Memory "Exclude specific CLAUDE.md files")。ただし組織が配る managed の CLAUDE.md は外せません。
{
"claudeMdExcludes": [
"**/Downloads/CLAUDE.md"
]
}
筆者の補足(推測を含みます): いちばん確実なのは、Downloads のように他人のファイルが入りやすい場所の下で起動しないことだと考えます。除外設定は、起動場所を変えられないときの補助として使うのがよさそうです。
まとめ
- Claude Code は起動フォルダと上の全階層の
CLAUDE.md/CLAUDE.local.mdを読む。AGENTS.mdはCLAUDE.mdがないときだけ(公式)。 - Codex は Git のルートから起動フォルダまでの
AGENTS.mdを読み、ルートがなければ起動フォルダだけ(公式)。 - 起動前に
agent-instr-check.shで一覧し、起動後は/context(Claude Code)で確かめる。
試してみる
起動前の一覧は、読み取り専用の CLI ai-secret-check の scan-instructions でも出せます(Node.js 20 以上と Git が必要)。
npx github:supportapp3-lab/ai-secret-check scan-instructions
起動フォルダとその上の各階層にある CLAUDE.md・CLAUDE.local.md・.claude/CLAUDE.md・AGENTS.md・AGENTS.override.md の場所・サイズ・起動フォルダより上か・Git ルートの外かを表示し、ファイルの中身は読みません。ホームの ~/.claude/・~/.codex/ は対象外なので、そちらは上のスクリプトで確かめてください。
参考
※ 仕様は 2026-10-28 時点の公式ドキュメントに基づきます。スクリプトは Linux の使い捨て環境でのみ試しました。
更新情報やちょっとしたTipsは X(@supportapp3_lab)で発信しています。