AI・機械学習
Claude Codeはテレメトリがオンの場合のみAGENTS.mdを読み込む
Claude Code reads AGENTS.md only when telemetry is on (blog.szypowi.cz)
要約
Claude CodeのAGENTS.md機能は、テレメトリが無効になっていると動作しないことが判明しました。この機能は、プロジェクトの指示を読み込むために設計されていますが、リモートのフィーチャーフラグに依存しており、プライバシー設定が意図せずローカルの動作を無効にしています。著者は、この動作は受け入れがたく、ローカルファイルの読み込みがテレメトリに依存しないように改善されるべきだと主張しています。
全文翻訳
Claude Code 2.1.277はAGENTS.mdのサポートを発表しました。CLAUDE.mdがないプロジェクトでは、代わりにAGENTS.mdを読み込むことになっています。私はシェルでテレメトリをオフにしており、私のリポジトリではファイルがロードされませんでした。Issue #95690がその理由を説明しており、私は独自の測定を追加しました。この記事ではそれらを一箇所にまとめます。
ゲートはどこにあるか
ローダーはagents-mdという組み込みプラグインとして提供されます。2.1.280バンドルでの登録は次のようになります。
var W = !1;
var B = () => Oa("tengu_agents_md_mod", W);
var H = "AGENTS.md as project instructions: by default loaded where the project has no CLAUDE.md; ...";
WはプラグインのisOnByDefault値で、falseです。BはisAvailableで、tengu_agents_md_modというリモートのフィーチャーフラグを問い合わせており、フォールバックはfalseです。Claude Codeがフラグを取得できない場合、プラグインは利用できず、ローカルファイルは決して読み込まれません。作業ディレクトリからマークダウンファイルを読み込むのにネットワークは全く必要ありませんが、ここではサーバーサイドのスイッチに依存しています。
テスト方法
私はAGENTS.mdとそれにカナリアワードだけを含む空のディレクトリを作成し、その単語をclaude -pに尋ねました。各セットアップは2つのセッションで実行されました。新しい設定での最初のセッションはフラグを取得するだけで、2番目のセッションがそれを使用するためです。
echo 'The canary word is PERIWINKLE.' > AGENTS.md
claude -p 'What is the canary word from the project instructions? Answer NONE if you have none. Do not read files.'
測定したもの
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 は、issueで述べられているように、機能をブロックします。DISABLE_TELEMETRY=1 も同様にブロックします。どちらかの変数が設定されていると、AGENTS.mdはロードされなかったので、両方をクリアする必要がありました。
どちらかの変数を0に設定しても助けにはなりません。ブロックはそのまま残ります。環境変数ドキュメントによると、どの値でもカウントされるとありますが、機能をオンにしようとするときに見落としやすいです。
プロジェクトの.claude/settings.json内のenvブロックで両方の変数をクリアしても効果はありません。単一のリポジトリで機能をオンにする方法はありません。
セッションレベルのオーバーライドは、2番目のセッションから有効になります。
claude --settings '{"env":{"DISABLE_TELEMETRY":"","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":""}}'
これらのケースのいずれも警告を表示しません。セッションは開始され、モデルはプロジェクトの指示なしで応答し、ファイルがスキップされたことを何も伝えてくれません。issueでは、サードパーティのゲートウェイであるBedrockとVertexも同様の問題を抱えていると指摘されています。なぜなら、そこでもフラグをtrueに解決できないからです。
回避策
CLAUDE.mdは@pathインポートをサポートしており、これらはフラグに依存しません。AGENTS.mdの隣にある1行のCLAUDE.mdは、テレメトリオフでそれをロードします。
echo '@AGENTS.md' > CLAUDE.md
そのファイルが配置されると、同じカナリアテストはCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1が設定されたままでも単語を返します。コストはリポジトリごとに1つの追加ファイルですが、これはAGENTS.mdサポートが削除するはずだったものです。
なぜこれが受け入れがたいと思うか
私は意図的にテレメトリをオフにしました。その選択が診断の一部を失うだけで、それ以上のものはないと期待しています。ここでは、私のディスクからファイルを読み取る機能を静かに失っています。リモートフラグはサーバーと通信する機能には意味があるかもしれませんが、この機能が必要とする唯一の入力はすでに作業ディレクトリにあります。
このゲートは、AGENTS.mdを最も気にする可能性のある人々にも影響します。複数のエージェントのために1つの指示ファイルを保持する人は、各ツールが何を送信するかについて通常は注意深く、Bedrock、Vertex、またはゲートウェイ上のチームはポリシーで不要なトラフィックを無効にすることがよくあります。彼らはすべて、利用可能と発表されたが何も機能しない機能を手に入れます。
沈黙が最悪の部分です。カナリアワードとバイナリの文字列検索で原因を確認しましたが、ほとんどの人はそれをしません。彼らはモデルが指示を無視すると結論付け、ファイルがそもそもモデルに到達しなかったときにプロンプトに時間を費やすでしょう。
プライバシー設定は、無関係なローカル動作を静かにオフにすべきではありません。Anthropicが段階的なロールアウトを望むなら、取得できないフラグのフォールバックは文書化された動作であるべきか、少なくとも何がスキップされ、なぜスキップされたかを伝える可視的なメッセージであるべきです。
見たいもの
ローカルファイルの読み込みはテレメトリに依存すべきではありません。段階的なロールアウトのためにゲートを維持する必要がある場合、AGENTS.mdが存在しスキップされたときの起動時の警告は、私がカナリアテストに費やした時間を節約するでしょう。
グローバルなAGENTS.md。プラグインはプロジェクトディレクトリ内でのみAGENTS.mdと.claude/AGENTS.mdを探し、ユーザーCLAUDE.mdの隣にユーザーレベルのファイルはありません。Codexはグローバルな~/.codex/AGENTS.mdを読み込み、Claude Codeの/importコマンドはそれをユーザーCLAUDE.mdにコピーできますが、コピーは後続の編集に従いません。複数のエージェントのために1セットの個人指示を保持する場合、共有ファイルを示すユーザーCLAUDE.mdの@ importが必要です。
共有エージェントスキルのネイティブサポート。Codexはプロジェクト内の.agents/skillsおよびホームディレクトリ内の~/.agents/skillsからスキルを読み込みます。Claude Code 2.1.280は、/importでのみこれらのパスを知っており、これはスキルを.claude/skillsにコピーします。私は.agents/skillsにカナリアスキルを配置しましたが、Claude Codeはそれをリストしませんでしたが、同じリポジトリの.claude/skillsからの同じスキルをリストしました。コピーはソースから逸脱するため、代わりに.claude/skillsを../.agents/skillsにリンクし、Claude Codeはそのシンボリックリンクをたどります。
それまでは、指示のために1行のCLAUDE.mdを、スキルにはシンボリックリンクを使用しています。