@ で渡したファイル、フォルダに置いた CLAUDE.md、危ない操作を止めるフック。
どれも Claude Code に渡したつもりで、届いていないことがありました。 エラーは出ません。
2026-10-02〜10-08 の1週間で、Claude Code の changelog に、こうした「黙って抜けていた」ものへの手当てが5件入りました。
そのたびに直る前と後の版を入れて測り、記事にしてきました。残る1件は、AGENTS.md の仕様の落とし穴です。この記事は6つのまとめです。
| 場面 | 黙って起きること | 直った版 | 直った後も残ること |
|---|---|---|---|
| 1. WebFetch で長いページを読む | 10万字より後ろを読まずに「書いていない」 | 2.1.290 | 全部読むと費用が約6倍 |
2. @ でファイルを渡す |
英文110KB・日本語3万字から中身が届かない | 2.1.292(256KB超だけ通知) | 256KB以下は今も通知なし |
| 3. フォルダに CLAUDE.md を置く | 新しく作るファイルに指示が効かない | 2.1.288 | 指示は書いた後に届く |
| 4. AGENTS.md を置く | CLAUDE.local.md を1つ置くと読まれない | 仕様(設定で変えられる) | 両方読むには設定が要る |
| 5. フックで危ない操作を止める | 台本が壊れると素通し | 2.1.295(設定が要る) |
onFailure: "block" を書かないと同じ |
| 6. MCP ツールの説明に決まりを書く | 2,048字より後ろが届かない | 2.1.295(ツール検索を通すときだけ) | 一度に読み込む設定では2,048字のまま |
この記事の版番号は、すべて Claude Code の版です。 自分の版は claude --version で分かります。
検証環境: Windows 10 / 場面ごとに直る前と後の Claude Code を隔離導入 /
claude -p/
全ラン設定ディレクトリ使い捨て / 測定は 2026-09-19〜10-09(場面ごとに記載)
どこで抜けるのか
6つとも、自分が Claude Code に渡したものが、モデル(Claude)に届く途中で抜けています。
どの場面でも、Claude は受け取れなかったことを知らないか、知っていても自分からは言いませんでした。
そのため、返ってくる答えは「書いていない」「ファイルが見つからない」「作りました」のような、もっともらしいものになります。
1. WebFetch は、長いページの10万字より後ろを読んでいなかった
Fixed WebFetch silently dropping page text past 100,000 characters; it now says how much
was unread and takes anoffsetto read on
(Claude Code 2.1.290 の changelog)
930,527字のテキストを WebFetch で読ませ、位置の分かっている語が「書いてあるか」を聞きました(2026-10-06、各3回)。
語の位置 Claude Code 2.1.289 Claude Code 2.1.290
8.6万字目(対照) 3/3 Yes 3/3 Yes
12.5万字目 3/3 No(実際は書いてある) 3/3 Yes
30.1万字目 3/3 No(実際は書いてある) 3/3 Yes
Claude Code 2.1.289 は、切ったことを Claude に伝えていませんでした。 WebFetch が返したのは The document does not mention "maxProseWidth". の1行だけです。
Claude Code 2.1.290 からは、答えの下に「どこまで読んだか」が付きます。
[WebFetch note: this page's text is 930527 characters long and the answer above covers only characters 0 to 100000; the final 830527 were not read — to read on, call WebFetch again with the same url and offset: 100000.]
Claude はこれを見て offset を変え、続きを読みに行きました。その分、費用は約6倍(中央値 $0.051 → $0.314)、時間は約3.8倍です。
確かめ方
長いページについて「〇〇は書いてある?」と聞き、WebFetch の結果に [WebFetch note: ...] が付くかを見ます。
付かずに「書いていない」だけが返るなら、Claude Code 2.1.289 以前です。
危ないのは「〇〇はある?」という聞き方です。 「無い」がそのまま答えになるので、読んでいないことに気づけません。
見出しを指定して「〇〇の下の最初の項目は?」と聞いた回は、古い版でも6回とも「取れなかった」と答えました。
詳しくは WebFetch の記事。
2. @ で渡したファイルは、英文110KB・日本語3万字で外れていた
Fixed @-mentioned text files over 256KB being left out silently: Claude is now told the file's size and to read it in portions
(Claude Code 2.1.292 の changelog)
1行目と最終行に合言葉を置いたファイルを @ で渡し、ツールを使えない状態で合言葉を聞きました(2026-10-07、62回)。
@ で渡したファイルが Claude に届いたか(Claude Code 2.1.292)
英文 105KB 届いた
英文 110KB〜258KB 届かない。通知もない ← 修正の対象外
英文 265KB 以上 届かない。通知あり ← 2.1.292 で直った範囲
日本語 約2万字(53KB) 届いた
日本語 約3万字(80KB) 届かない。通知もない
外れ始めるのは256KBよりずっと手前でした。 境目はバイト数ではなくトークン数で決まっているように見えます。届いた英文105KBで、入力は約2.7万トークン増えていました。
届かなかったとき、Claude の動きは2通りでした。
- ツールが使えれば、自分でファイルを開きに行く。 24回中23回、正しく答えました
- ツールが使えないと、作り話になる。 届かなかった20回のうち16回、Haiku 4.5 は存在しない合言葉を答えました
CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS を 80000 にすると、150KB と 200KB が届きました。256KB の上限は変わりません。
確かめ方
1行目と最終行に合言葉を入れた約150KBのファイルを作り、ツールを外して聞きます。
python -c "print('FIRST-KIWI'); print('\n'.join(['lorem ipsum dolor sit amet'] * 5500)); print('LAST-PLUM')" > big.txt
claude -p --tools "" "@big.txt の1行目と最終行の合言葉は?"
FIRST-KIWI と LAST-PLUM が返らなければ、中身は届いていません。
Claude Code 2.1.295 と Haiku 5.5 で1回ずつ試すと、154KB のファイルには「big.txt が見つかりませんでした」と答え、42KB では2つとも正しく答えました(2026-10-09)。
届かなかったファイルを、Claude は「無い」と受け取っていました。
詳しくは @ の記事。
3. 新しく作るファイルに、フォルダの CLAUDE.md が効いていなかった
Fixed path-scoped
.claude/rulesand nested CLAUDE.md files not loading when Write or Edit
creates or changes a file in their scope (previously only Read loaded them)
(Claude Code 2.1.288 の changelog)
api/CLAUDE.md に「新しいファイルの1行目は # owner: api-team にする」と書き、**「api/hello.py を新しく作って。先に何も読まないで」**と頼みました(2026-10-05、18回)。
| Claude Code の版 | 指示の置き場所 | 守った |
|---|---|---|
| 2.1.287 | フォルダの CLAUDE.md | 0/3 |
| 2.1.287 | パス指定ルール(.claude/rules/) |
0/3 |
| 2.1.287 | フォルダの CLAUDE.md(先に Read させる) | 3/3 |
| 2.1.289 | フォルダの CLAUDE.md | 3/3 |
| 2.1.289 | パス指定ルール | 3/3 |
Claude Code 2.1.287 で守らなかった6回は、指示の文面がセッションに一度も現れていませんでした。 無視したのではなく、届いていません。
直った版でも、指示は「書いた後」に届きます。 守れた6回はすべて Write を2回呼び、1回目は指示なしで書いて、読み込まれた指示を見て書き直していました。
その分、ファイル1本で費用が約15%、時間が約8割増えています。
確かめ方
mkdir api
echo "Every new file you create in this folder must begin with this exact first line: # owner: api-team" > api/CLAUDE.md
claude -p --permission-mode acceptEdits "api/hello.py を新しく作って。先に何も読まないで"
head -1 api/hello.py
1行目が # owner: api-team でなければ、フォルダの指示は新規作成に効いていません。 Claude Code 2.1.295 で1回試すと、1行目は # owner: api-team でした(2026-10-09)。
詳しくは フォルダの CLAUDE.md の記事。
4. CLAUDE.local.md を1つ置くと、AGENTS.md が読まれなくなる
Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead
(Claude Code 2.1.277 の changelog から抜粋)
CLAUDE.md が無いフォルダでは、AGENTS.md が読まれます。 ただし CLAUDE.local.md も「CLAUDE.md がある」に数えられます。
AGENTS.md と CLAUDE.local.md に別々の合言葉を書き、ツールを外して「指示にある合言葉を全部挙げて」と聞きました(Claude Code 2.1.295、2026-10-09、各2〜3回)。
| 置いたもの | 返ってきた合言葉 |
|---|---|
| AGENTS.md だけ | AGENTS(3/3) |
| AGENTS.md + CLAUDE.local.md | LOCAL だけ(2/2) |
| 同上 + 両方読む設定 | LOCAL と AGENTS(2/2) |
CLAUDE.local.md に個人メモを置いただけで、チームの AGENTS.md が消えます。 claude -p の出力に警告はありませんでした。公式にも書いてあります。
Because
CLAUDE.local.mdcounts, adding one to keep your own uncommitted instructions in a project that relies onAGENTS.mdstops Claude from readingAGENTS.mdfor you.
両方読ませるなら、~/.claude/settings.json にこう書きます。プロジェクトの設定ファイルに書いても無視されます(公式の記載)。
{
"pluginConfigs": {
"cc-plugin-agents-md@builtin": {
"options": { "instructionFiles": "claude-md-and-agents-md" }
}
}
}
この ID は Claude Code 2.1.285 で agents-md@builtin から変わりました。 それより前の版は古い ID しか読みません(2.1.285 以降は両方読む、と公式にあります)。
9/19 の記事で書いた「1回目のセッションでは読まれない」は、今は起きにくくなっています。
Claude Code 2.1.277 では新しい設定ディレクトリの1回目で読まれませんでしたが、Claude Code 2.1.295 では新しい設定ディレクトリの1回目から読まれました。
今のドキュメントは「2.1.276 以前から上げた直後の1回は、読まれないことがある」としています。
確かめ方
AGENTS.md に合言葉を1行書き、ツールを外して聞きます。
echo "The AGENTS passphrase is AGENTS-ORANGE-7731." > AGENTS.md
claude -p --tools "" "指示にある合言葉を全部挙げて"
AGENTS-ORANGE-7731 が返らなければ読まれていません。上の階層の CLAUDE.md や CLAUDE.local.md を探します。
対話モードなら、読まれたときに no CLAUDE.md found; AGENTS.md loaded: ... という1行が出るとドキュメントにあります(私は対話モードでは確かめていません)。
詳しくは AGENTS.md の記事。
5. 守りのフックは、台本が壊れると黙って通していた
Added
onFailure: "block"for command and HTTP hooks: a hook that can't start, times out, or exits with an unexpected code blocks the action instead of letting it through
(Claude Code 2.1.295 の changelog)
danger.txt への書き込みを止める PreToolUse フックを、3通りに壊して書かせました(2026-10-09、各3回)。
フックの状態 2.1.293 2.1.295 2.1.295 + onFailure: "block"
正常(対照) 止まった 止まった 止まった
台本が無い 書かれた 書かれた 止まった
終了コード1で落ちる 書かれた 書かれた 止まった
時間切れ 書かれた 書かれた 止まった
壊れたフックは、18回すべて書き込みを通しました。 Claude の返事は18回とも「danger.txt を作りました」で、-p の出力にも標準エラーにも何も出ません。
残っていたのは、セッションの記録の hook_non_blocking_error と hook_cancelled だけでした。
Claude Code 2.1.295 に上げただけでは変わりません。 フックの設定に1行足します。
{
"type": "command",
"command": "bash ~/hooks/guard.sh",
"timeout": 30,
"onFailure": "block"
}
確かめ方
onFailure: "block" を足したら、台本の名前を一時的に変えて、止めたい操作を頼みます。止まれば、壊れたときも止まる側に倒れています。
確かめたら名前を戻します。onFailure は、フックのドキュメントに 2026-10-09 時点でまだ載っていません。
詳しくは フックの記事。
6. MCP ツールの説明は、2,048字より後ろが届いていなかった
Changed MCP tool descriptions the model loads through tool search to be cut at 16,384 characters instead of 2,048
(Claude Code 2.1.295 の changelog)
この場面だけは、この記事のために測りました(2026-10-09)。
自作の MCP サーバーに天気を返すツールを1つ置き、説明文(17,133字)の4か所に決まりを書きました。
| 決まり | 説明文の位置 | 中身 |
|---|---|---|
| Rule 1 | 416字目 |
unit は kelvin
|
| Rule 2 | 1,944字目 |
lang は fi
|
| Rule 3 | 2,724字目 |
station は ORCHID-58
|
| Rule 4 | 17,026字目 |
source は archive
|
頼んだのは「東京の天気を調べて。説明に書かれた決まりは全部守って。そのあと、見つけた決まりと、説明の最後の1文を挙げて」です(実際は英語)。
ツールに実際に渡った引数をサーバー側で記録しました。本体は Opus 5.5 です。
条件の「ツール検索」は、MCP ツールの定義を必要になってから読み込む仕組みで、既定でオンです。オフにすると、起動時に全部を一度に読み込みます。
| 条件 | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
|---|---|---|---|---|
| 2.1.293・ツール検索(既定) | ○ | ○ | × | × |
| 2.1.295・ツール検索(既定) | ○ | ○ | ○ | × |
| 2.1.293・一度に読み込む | ○ | ○ | × | × |
| 2.1.295・一度に読み込む | ○ | ○ | × | × |
| 2.1.295・一度に読み込む+上限20,000字 | ○ | ○ | ○ | ○ |
| 2.1.295・ツール検索+上限20,000字 | ○ | ○ | ○ | ○ |
各3回、どの条件も3回とも同じ結果でした。「一度に読み込む」は ENABLE_TOOL_SEARCH=false、上限は CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH=20000 です。
Claude が引用した説明文の末尾は、ちょうど2,048字目と16,384字目で切れていました。
直ったのは、ツール検索を通すときだけ
Claude Code 2.1.295 でも、一度に読み込む設定では2,048字で切れたままでした。 changelog の「through tool search」のとおりです。
ツール検索は既定でオンですが、ドキュメントによると ANTHROPIC_BASE_URL が Anthropic 以外のホスト(プロキシなど)を指すと、自動でオフになります。
公式ドキュメントの MCP のページは、2026-10-09 時点でも 2,048 のままです。
Claude Code truncates each tool description and each server's instructions at 2,048 characters by default.
Claude は切れたことを知っているが、言わない
説明文の末尾には … [truncated] という印が付いていました(Claude の引用で確認)。
「説明の最後の1文を引用して」と頼んだ12回は、12回とも「途中で切れている」と答えています。
ところが「東京の天気を調べて」とだけ頼んだ6回は、1回も切れたことに触れませんでした。 Claude Code 2.1.293 の返事はたとえばこうです。
The weather tool's own instructions said to request Kelvin and Finnish, so I did.
Rule 3 と Rule 4 があったことには触れず、読めた2つが決まりの全部であるかのように答えています。
確かめ方
使っている MCP ツールについて、説明の末尾を引用させます。
lookup_weather ツールの説明の最後の1文を、そのまま引用して
末尾が [truncated] で終わっていれば、その先は届いていません。 Claude Code 2.1.295 で1回試すと、「途中で切れた状態で届いており、本当の末尾が見えない」と答えました。
長い説明を書くなら、大事な決まりは先頭に寄せる(ドキュメントもそう勧めています)か、CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH(Claude Code 2.1.280 以降)で上限を上げます。
6つに共通していたこと
エラーは1つも出なかった
| 場面 | 自分に見えたもの | Claude に届いたもの |
|---|---|---|
| 1. WebFetch(2.1.289) | 「書いていない」 | 前半10万字だけ。通知なし |
2. @(256KB以下) |
作り話か「見つからない」 | 何も。添付の記録も残らない |
| 3. フォルダの CLAUDE.md(2.1.287) | 指示どおりでないファイル | 何も |
| 4. AGENTS.md + CLAUDE.local.md | CLAUDE.local.md の合言葉だけ | CLAUDE.local.md だけ |
| 5. 壊れたフック | 「作りました」 | 書き込みの成功だけ |
| 6. MCP の説明 | 決まりの一部だけ守った呼び出し | 2,048字(または16,384字)まで+[truncated]
|
6つとも、-p の出力にエラーや警告は出ていません。 気づく手がかりは、答えの中身がおかしいことだけです。
「無い」が答えになる質問が一番危ない
WebFetch で「〇〇は書いてある?」と聞くと、読んでいない部分の語は「No」になりました。
@ で届かなかったファイルは「見つかりませんでした」になり、MCP の決まりは「読めた2つが全部」になりました。
受け取れなかったものは、答えの中で「無いもの」になるか、作り話で埋められていました。 「〇〇はある?」「他に決まりは?」の答えが「無い」なら、読めているかを先に疑います。
直っても、上限は残る
| 場面 | 残る上限 | 変えられるもの |
|---|---|---|
| 1. WebFetch | 1回で読むのは10万字まで | Claude が offset で続きを読む(費用は増える) |
2. @
|
約2.7万トークン(英文約105KB)、最大256KB |
CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS(256KB まで) |
| 3. フォルダの CLAUDE.md | 指示は書いた後に届く | 先にフォルダ内のファイルを Read させる(2.1.287 で3/3) |
| 4. AGENTS.md | CLAUDE.local.md があると読まれない | claude-md-and-agents-md |
| 5. フック | 既定は素通し | onFailure: "block" |
| 6. MCP の説明 | 16,384字(ツール検索)、2,048字(一度に読み込む) | CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH |
今日やること
-
claude --versionが 2.1.295 以上か確かめる。 場面1・2・3・5・6の修正が全部入ります -
守りのフックに
onFailure: "block"を足す。 足したら、台本の名前を変えて一度止まるか試す - MCP を一度に読み込む設定(
ENABLE_TOOL_SEARCH=falseやプロキシ経由)なら、CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTHを上げる - AGENTS.md のプロジェクトで CLAUDE.local.md を使うなら、
claude-md-and-agents-mdを設定する -
ツールを外した状態で、大きいファイルを
@で渡さない。 届かないと作り話になることがある(Haiku 4.5 で20回中16回)
言えないこと
- 場面ごとに、測った日と版が違います(2026-09-19〜10-09)。回数は各条件2〜6回で、ベンチマークではありません
- 「確かめ方」のコマンドは、Claude Code 2.1.295 で1〜3回ずつ試しただけです。モデルや版で答え方は変わります
-
Windows だけで測りました。
claude -pが中心で、対話モードの表示はほとんど見ていません - MCP は、自作の stdio サーバーのツール1つだけです。サーバーの instructions(同じく2,048字とドキュメントにある)と HTTP サーバーは測っていません
- MCP の測定は試運転2回を含めて26回、費用は $2.04(
total_cost_usd)。ほかの場面の費用は各記事に書いています
まとめ
- Claude Code に渡したファイルや指示は、6つの場面で黙って届いていなかった。 エラーは出ない
-
5つには 2026-10-02〜10-08 の1週間で手当てが入った。 ただし
@の通知は256KB超だけ、フックはonFailure: "block"を書かないと変わらず、MCP はツール検索を通すときだけ - AGENTS.md は、CLAUDE.local.md を1つ置くと今も読まれない
- 受け取れなかったものは「無い」として答えられることがある。 「書いていない」「見つからない」は、読めていないだけかもしれない
- どの場面も、合言葉を1つ置けば自分の環境で確かめられる
答えがおかしいと思ったら、指示の書き方より先に、そもそも届いているかを確かめてみてください。
関連記事
- Claude Code の WebFetch は、長いページの10万字より後ろを読まずに「書いていない」と答えていた — 場面1
- Claude Code の @ で渡したファイルは、英文110KB・日本語3万字で黙って外された。修正は256KB超だけだった — 場面2
- 新しく作ったファイルに、そのフォルダの CLAUDE.md は効いていなかった。直った今も指示は書いた後に届く — 場面3
- Claude Code が AGENTS.md を読むようになった。ただし1回目のセッションでは読まれない — 場面4
- Claude Code の守りのフックは、台本が壊れると黙って通す。2.1.295 の onFailure で止まった — 場面5
JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。
エンジニア採用も行っています。もしご興味あれば覗いてみてください。
▶ 採用サイト