Claudeが `court` と言って止まる。気のせいかと思ってログを数えた
Claude Code を使っていると、たまにこんなものが出てきます。
court
<invoke name="Read">
...
</invoke>最初は何かのコマンドかと思いました。でも違う。`Read` も `Edit` も `Bash` も実行されない。ただ画面にその文字列が出て、止まる。
X を見ると、同じ話が流れていました。「court が出ると Claude Code が固まる」「一度出ると繰り返す」という声が複数。自分も何度か覚えがある。ただ、体感はあてにならない。だから生ログを数えることにしました。
ログはどこにある?
意外と知られていないと思うのですが、Claude Code は会話の全記録をローカルに残しています。場所はここです。
Windows: `%USERPROFILE%.claude\projects`
macOS/Linux: `~/.claude/projects/`
プロジェクトフォルダごとに分かれていて、セッションひとつにつき `.jsonl` ファイルが積まれます。中身は JSON 行形式で、assistant が出力した文章、ツール呼び出しの内容と結果、停止理由(`stop_reason`)まで入っています。`rg`(ripgrep)で横断検索できます。
rg -i 'court' ~/.claude/projects/手元では 4,758 ファイル、合計 1.3GB になっていました。全部 Claude との会話の記録です。多分、自分のログが多い方だとは思いますが。
まず雑に検索すると、92件あった
`rg -i 'court'` で横断した最初の結果は 92 件でした。
「やっぱり大量に起きてる」と思いかけて、止まりました。`court` という文字列は普通の英語テキストにも混ざります。`courtesy`、`courts`、人名の `Delcourt`。画像データや署名の中に偶然入っているものもある。92 件をそのまま「Claude が 92 回止まった」と読むのは雑すぎます。

絞り込むと、本当に怪しいのは 58 件だった
ログを JSON としてパースし直して、ノイズを落としました。見るポイントはこれです。
・`court` が単独の単語として出ているか
・直後に `<invoke name="...">` が続いているか
・`stop_reason=end_turn` でターンが終わっていないか
・ツール実行の結果が次のターンに存在するか
こうやって絞ると、問題の形に近いものは 58 件、7 セッションにわたっていました。そのうち `court <invoke ...>` の形式は 30 件。直後に「ツール呼び出しが壊れています」というエラーか、生テキストで漏れた文脈があるものは 29 件。
これはもう、気のせいではありません。
でも「court = 即フリーズ」ではない
正直に書いておきます。`court` が出ても、必ず Claude Code が完全に止まるわけではない。ログ上、そのあとも会話が続いているものが多い。malformed と判定されて Claude が自動リトライして復帰するケースもあります。
壊れ方には 2 種類あります。
ひとつは、Claude Code 側が「壊れたツール呼び出し」と検知して `Your tool call was malformed and could not be parsed` と返すパターン。エラーが出るので気づけます。
もうひとつが厄介です。`court <invoke ...>` がただの文章として画面に出て、エラーも返らないままターンが終わるパターン。`stop_reason=end_turn`。Read も Edit も Bash も実行されていない。でも見た目だけだと「Claude が何か作業しようとしている途中」に見えて、止まったように映る。

「止まってますよ」というログが手元にあった
手元ログの中に、かなりはっきりした例がありました。
あるセッションで、Claude が画像を読もうとしていました。本来 `Read` ツールが実行される場面で出てきたのは、これです。
court
<invoke name="Read">
...
</invoke>停止理由は `end_turn`。Claude Code 側はこれをツール呼び出しとして扱っていない。ただの返答として出して終えています。Read は実行されていない。
その約 1 分後、ユーザーはこう送りました。
「大丈夫ですか?止まってますよ。」
Claude は「ツール呼び出しをミスして止まっていました。確認します」と返しました。ここまではいい。ところがその直後に、また同じ `court <invoke name="Read">` が通常テキストとして出て、またツールは実行されないまま終わっています。
ユーザーの体感どおり、止まっていました。
外でも同じ報告が出ていた
自分だけかと思って外の報告も確認しました。
GitHub の Claude Code issues には同じ現象の報告が複数あります。`court <invoke>` が通常テキストとして出てツールが実行されない、本来の `antml:` prefix が落ちている、`function_calls` の wrapper がない、など。
Zenn では「一度壊れた出力が会話履歴に残ると、モデルがそれを正しい形と覚えて同じ壊れ方を繰り返す」という説明が出ていました。これは怖い。retry や「続けて」で同じ場所でまた壊れる理由がそこにある。
参考リンク:
手元ログでは発生は Opus 4.8 に集中、Claude Code バージョンは複数の 2.1.x にまたがっていました。特定バージョン固有ではなさそうです。
怖いのは「やったことになること」
止まるだけならまだいいんです。気づけるから。
本当に怖いのは、ツールが実行されていないのに、会話だけが先に進むことです。Claude が「ファイルを書き換えます」と言って `court <invoke name="Write">` が本文として出る。Write は実行されていない。でも Claude は書き換えたつもりで次の説明に進む。`git diff` を見なければ、実ファイルが変わっていないことに気づけません。
「失敗しました」と言われることより、「成功した顔で失敗している」のが怖い。`court` 問題はそこに刺さります。
court が出たらやること
根本修正は Claude Code 側の仕事です。ユーザーが完全に直すことはできない。ただ、被害を減らすことはできます。
・`court <invoke>` が出たら、そのターンのツールは実行されていない前提で扱う
・Read なら読めていない。Edit なら書けていない。Bash なら走っていない
・すぐ `git diff` または `git status` を確認する
・同じセッションで「もう一回やって」と連続して言わない。壊れた形式が会話履歴に残ると、モデルがそれを正しい形と覚えて繰り返す
・`court` が繰り返し出るようなら、早めに `/clear` か新規セッションへ移す
自分はこうしています。
・長時間セッションを引っ張りすぎない
・大量の読み込みや調査のあとに Write/Edit を続けるときは、要約して新セッションへ移す
・重要な変更の前後では必ず diff を見る
数えたら、落ち着いた
「また court で固まった。最近多すぎる」という体感から始まりました。
数えると見え方が変わります。単純一致は 92 件。ノイズを落とすと問題の形は 58 件。`court <invoke>` は 30 件。「止まってますよ」とユーザーが介入して、そのあとも同じ壊れ方をした強い証拠は 1 セッション。
多い。けれど、全部がフリーズではない。
`court` を見たら慌てるのではなく、「このターンのツールは実行されていないかもしれない」と考えて差分を見る。繰り返すなら早めにセッションを捨てる。
ログは `~/.claude/projects/` 以下にあって、`.jsonl` で全部残っています。`rg` で検索すればすぐ出てきます。画面の印象ではなく、ログを見る。数える。そうすると「なんか変な現象」が「対処できる不具合」に変わります。
`court` が出たら、まず疑う。それだけで、かなり事故は減らせるはずです。
※ ヘッダー画像は AI(画像生成)で作成しています。
書いた人: ishizakahiroshi
群馬の北部で、保護猫2匹と暮らす、在宅エンジニア(何でも屋)
https://github.com/ishizakahiroshi
X(業務委託・各種相談はこちら)
バックエンド・インフラ・AI連携まわりで、業務委託のご相談を受け付けています。フルリモートです。スポットや週2〜3時間からでも歓迎で、いろんな案件に携われたらうれしいです。こんな相談、歓迎です。
