Yyatmita

【フォロー】CLAUDE.md 継承の誤情報はどこから来たか——claude-code-guide の回答を追跡する

サブエージェントシリーズで「CLAUDE.md は継承されない」と書いた情報は誤りだった。情報源である claude-code-guide のハルシネーションを追跡し、原因構造を特定した記録

Claude Codeサブエージェント検証#claude-code#subagent#ai#hallucination
← 前の記事: 【第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 はエージェントに継承されます。エージェント定義にプロジェクトルールを書き写す必要はありません。