【フォロー】CLAUDE.md 継承の誤情報はどこから来たか——claude-code-guide の回答を追跡する
サブエージェントシリーズで「CLAUDE.md は継承されない」と書いた情報は誤りだった。情報源である claude-code-guide のハルシネーションを追跡し、原因構造を特定した記録
← 前の記事: 【第4回】エージェントを構築する——スキル委任・agent-creator・article-writer の実践サブエージェントシリーズ(全4回)を書き終えて、ひとつ気になることがありました。
第2回・第3回・第4回の記事に、こう書いていました。「CLAUDE.md はサブエージェントに継承されない」と。第3回で追実験して訂正追記したのですが、そもそもなぜ間違えたのか。原因を追跡したら、Claude Code のビルトインエージェント claude-code-guide のハルシネーションだったという話です。
発見: 定説が覆った瞬間(3/9)
誤りが発覚したのは、別の実験(スキルとエージェントの重複トリガー問題)で tools: [] のテストエージェントを作っていたときです。
このエージェントはツールを一切持っていない。ファイルを読む手段がない状態です。そのエージェントに聞いてみました。
私: CLAUDE.md の内容を引用して
すると、プロジェクトの CLAUDE.md の見出しを正確に引用してきました。
/workspace/CLAUDE.md の # 開発コンテナ環境 というセクション。ツールなしで、読めるはずがない。なのに見えている。
「継承されない」はずなのに、見えている。定説が間違っていた。
再実験で確認
一度では信じられないので、追加検証しました。
cwd 変更テスト——エージェントに cd /tmp/test-cwd させてから同じ質問。結果、それでも CLAUDE.md は見えていました。作業ディレクトリを変えても関係ない。
ネガティブテスト——/workspace/NOT_CONTEXT.md というファイルを作って「合言葉は紫陽花の月曜日」と書いて設置。tools: [] のエージェントに合言葉を聞くと——見えない(FILE_NOT_FOUND)。
この2つの実験から、構造が見えてきました。
| コンテキスト | 継承 | 経路 |
|---|---|---|
| CLAUDE.md(プロジェクト) | される | システム的な注入 |
| MEMORY.md | される | システム的な注入 |
| git status スナップショット | される | システム的な注入 |
| 任意のファイル(NOT_CONTEXT.md 等) | されない | ツール(Read 等)が必要 |
CLAUDE.md はツール経由ではなく、Claude Code の仕組みとしてコンテキストに注入されていた。エージェントが「ファイルを読んだ」のではなく、「最初から渡されていた」のです。
訂正は済んでいる。でも「なぜ間違えたのか」
この発見を受けて、第2回・第3回・第4回の記事に追実験ノートを追記しました。正しい情報は伝わっています。
問題は「なぜ最初から間違えたのか」です。自分で検証すれば数分でわかることを、なぜ信じてしまったのか。
原因究明: chatlog を掘る
当時の会話ログ(chatlog.md)を見返しました。核心は行1144-1176あたりにあります。
3/7、サブエージェント記事を書いていたとき、Claude が自発的に claude-code-guide(Claude Code のビルトインエージェント)を起動して仕様を調査してくれました。
その調査結果として返ってきたのが、こういう要約です。
エージェント = 独立コンテキストの別インスタンス
.mdの本文がそのエージェント専用のシステムプロンプトになる- 親の CLAUDE.md は継承されない(環境情報・権限設定・MCP のみ継承)
私はこの回答を信頼して、idea.md に記録し、記事に反映しました。
ハルシネーションの構造
claude-code-guide はなぜ誤った回答をしたのか。推論の流れを分解すると、こうなります。
ステップ1: 公式ドキュメントに「Subagents receive only this system prompt, not the full Claude Code system prompt」と記載がある。これ自体は正しい。
ステップ2: claude-code-guide がこれを「CLAUDE.md が渡されない」と解釈した。
ステップ3: 実際には CLAUDE.md は system prompt とは別経路で注入されているが、ドキュメントにその言及がない。
ここが問題です。「system prompt」と「CLAUDE.md」は別物です。
- system prompt = エージェント定義の
.mdファイルの本文 - CLAUDE.md = プロジェクトルール、
<system-reminder>タグ経由で別途コンテキストに注入される
ドキュメントの「not the full Claude Code system prompt」は正しい。サブエージェントはメインの Claude Code が持つ巨大なシステムプロンプト全体は受け取らない。でも CLAUDE.md の注入については、ドキュメントに記述がない。
claude-code-guide は「言及がない = 渡されない」と推論した。
これは典型的なハルシネーションの構造です。部分的に正しい情報("system prompt は渡されない")から、誤った一般化("CLAUDE.md も渡されない")を行う。情報の欠如を「ない」と解釈してしまう。
今も同じ嘘をつく(3/11 再検証)
記事を書きながら、念のため 2026-03-11 に同じ質問を claude-code-guide に投げました。
私: サブエージェントは親の CLAUDE.md を継承しますか?
回答は同じでした。「継承されません」。
claude-code-guide は内部的に公式ドキュメントを参照して回答を生成していますが、ドキュメント自体が CLAUDE.md の注入メカニズムに言及していないため、構造的に正しい回答ができない状態です。
/feedback で Anthropic にバグ報告を送りました。
教訓
今回の誤りは、自分で検証せずに AI の回答を鵜呑みにしたことが原因です。
tools: [] のテストエージェントを作って「CLAUDE.md を引用して」と聞けば、数分で確認できた。でもやらなかった。claude-code-guide が自信を持って答えてくれたから、信じてしまった。
AI の回答は、自分で検証するまで「仮説」にすぎない。特にAI が AI の仕様について語るときは要注意です。ドキュメントの行間を推論で埋めてしまいますし、ドキュメントに書いていないことは「存在しない」と判断しがちです。
今回は別の実験で偶然発覚しました。意図的に検証していなかったら、誤情報のまま放置されていたかもしれない。「やってみないとわからない」は、AI の出力にも当てはまります。
サブエージェントシリーズ(第1回・第2回・第3回・第4回)を読んだ方へ。各記事の訂正は済んでいます。CLAUDE.md はエージェントに継承されます。エージェント定義にプロジェクトルールを書き写す必要はありません。