Claude CodeでAuto-update failedが消えない原因と対処
一時的な通信断がinstall_failedとして記録され、最新版なのにバナーが残る不具合の仕組みと、.last-update-result.jsonを消して直す手順をまとめます。
Auto-update failedが消えない — 多くは「失敗した記録」が残っているだけ
Claude Codeの起動時に ✗ Auto-update failed · Run /doctor と出て、再起動しても、ネットワークが戻っても消えない。しかも claude update は「up to date」と答える。この組み合わせなら、更新が壊れているのではなく、過去の失敗が1枚のファイルに残り続けている可能性が高いです。
GitHubのissue #65093では、Windowsのネイティブインストールで次の経過が報告されています。
- 実行中にネットワークアダプターを無効化すると、バックグラウンドの更新確認が失敗してバナーが出る
- アダプターを有効に戻してもバナーは残り、起動のたびに出る
/doctorはLast update attempt: failed (install_failed)と表示するだけで、状態を消さない- 実行中のバージョンと最新版は同じ(報告ではどちらも2.1.161)で、入れるものは最初から無かった
つまり「通信できなかった」という一過性の出来事が、「インストールに失敗した」という恒久的な記録に変わっています。このissueはopenのままで、最新のコメントはv2.1.295での再現報告です。直る前の今できる対処は、記録ファイルを手で消すことです。
バナーの裏で何が記録されているのか
issueの報告者がたどった記録は、~/.claude/.last-update-result.json というJSONです。Windowsの報告者も同じパスで書いています。失敗時の中身は次の形でした。
{"timestamp":"2026-07-30T18:12:39.840Z","path":"native","outcome":"failed","status":"install_failed","version_from":"2.1.220","version_to":null,"error_code":null}読むべきは version_from と version_to です。version_from は実行中のバージョンで、version_to が null なのは、更新先のバージョンを決める前に処理が止まったことを示しています。何かをインストールしかけて失敗したなら、ここには目標バージョンが入るはずです。
/doctor の画面も同じ事実を示します。issueに載っていた出力(サニタイズ済み)から、更新まわりの行を抜き出します。
Currently running: native (2.1.161)
Auto-updates: enabled
Auto-update channel: latest
Last update attempt: failed (install_failed) — 2026-06-03
Stable version: 2.1.150
Latest version: 2.1.161Currently running と Latest version が一致しているのに、最後の更新試行は失敗扱いです。この食い違いが、このバグの見分け方になります。
なぜ一過性の通信断が消えない失敗になるのか
報告者たちがバンドルのコードを読んで書いている内容を整理すると、原因は3つあります。以下は報告者がバンドルのコードを読んで挙げた内容で、Anthropicが仕組みを説明したものではありません。
記録が消えない3つの理由
成功しても何も書かない
すでに最新で何も入れなかった確認は、記録ファイルを書き換えません。過去の
install_failedを上書きする経路が、実際にインストールが成功したときしか無いという指摘です。どんな失敗も install_failed になる
例外が出ると、
network_errorやtimeoutに分類した上で、記録と画面の状態には一律install_failedが入ります。分類はテレメトリにしか使われていないという報告です。画面のバナーは別の状態
ファイルの記録とは別に、起動中のセッションが表示用の状態を持っています。ファイルを消しても、表示済みのバナーは再起動まで残るという報告があります。
メンテナーのコメントも、この見立てを裏づけています。issueには、Linuxで同じ状況を再現したという確認があります。ネットワークをOSレベルで塞いだまま更新確認を走らせると、最新版なのにバナーが出ます。ネットワークを戻した後の新しいセッションでは確認が成功しますが、保存済みの失敗は上書きされず、claude doctor が失敗の記録を表示し続けます。
ここには食い違いも1点あります。メンテナーのテストでは、一度確認が成功すると、後のセッションでバナー自体は再表示されなかったとされています。一方、Windowsの報告者は再接続後も再起動後もバナーが残ると書いています。記録の残留は全員が確認していて、バナーの出方だけが環境で分かれていると見ておくと判断を誤りません。
claude doctorもclaude updateも記録を消さない
読者が最初に試すのは、バナーの指示どおり /doctor を開くか、claude update を実行することでしょう。報告では、どちらも効きません。
| 試したこと | 結果(報告) |
|---|---|
/doctor を開く | 結果(報告)Last update attempt: failed (install_failed) を表示するだけで、記録は消えない |
claude update | 結果(報告)Claude Code is up to date と出るが、記録ファイルは書き換わらない |
| ネットワークの復旧 | 結果(報告)記録もバナーも残る |
| Claude Codeの再起動 | 結果(報告)記録は残る。バナーが残るかは報告が分かれる |
| 記録ファイルを手で削除 | 結果(報告)claude doctor が Last update attempt: none recorded になる |
別のissue #82408には、この仕様を突いた指摘があります。claude doctor は、更新試行の失敗状態が入るこのファイルを読んでいないというものです。バナーが「Run claude doctor」と案内するのに、doctorの結果が「No installation issues found」のまま失敗を表示しないのは、このためと考えられます。
公式ドキュメントのsetupページにも、自動更新について「claude doctor で直近の更新試行の結果を確認できる」という記載があります。確認の入口としては正しく、クリアの入口ではありません。
手で直す手順
直近の更新が本当に成功しているかを確かめた上で、記録ファイルを削除します。WindowsのPowerShellでは、~ に当たるのは $HOME です。
claude --version
claude update
Get-Content "$HOME\.claude\.last-update-result.json"
Remove-Item "$HOME\.claude\.last-update-result.json"
claude doctorclaude --version と claude update の結果で、実行中のバージョンが最新だと分かります。ファイルの中身が "version_to":null なら、先に挙げた一過性の記録です。削除後の claude doctor が Last update attempt: none recorded を表示すれば、ファイルは片づいています。
macOSとLinuxでは、~ が通常のシェルでそのまま使えるので、削除は次の1行です。
rm ~/.claude/.last-update-result.json落とし穴
削除してもすでに出ているバナーは残る
macOSの報告者は、バナーが出ている最中のセッションで記録を削除し、claude update と claude doctor まで実行しても、同じセッションのバナーが消えなかったと書いています。画面の状態は記録ファイルとは別なので、そのセッションを終了して開き直してから、バナーが出ないことを確認します。
本物のインストール失敗との見分け方
バナーが同じでも、中身が別の失敗ということはあります。判断に使えるのは、記録ファイルの2つの値です。
記録ファイルで見る切り分け
一過性の記録で済む場合
version_from が実行中のバージョンと同じで、version_to が null。claude update がup to dateと答えるなら、更新は止まっていません。ファイルの削除で片づきます。
実際の更新が止まっている場合
claude --version が最新より古い、または claude update 自体がエラーを返す。この場合はバナーの残留ではなく、ダウンロードやインストールの問題です。
後者のときは、原因が別にあります。ダウンロードの途中で接続が切れる場合はClaude Codeの更新が「connection dropped」で失敗するとき、Windowsで更新そのものが進まない場合はClaude Codeが更新されないときのWindows 11での切り分けが受け皿になります。
Windows固有の不具合ではない
issueの起票はWindows 10のネイティブインストールですが、同じ記録は他のOSでも報告されています。
issue #65093で報告された経過
- 2026-06-03Windows 10で起票
ネットワークアダプターの無効化で再現。v2.1.161。
- 2026-06-15macOSで同じ症状
通信が正常でも、約1日に1回、
install_failedが書き直されるという報告。 - 2026-07-02Linuxでも再現
複数セッションを同時に動かす環境で、更新は毎日成功しているのに失敗記録だけが残る。
- 2026-08-19メンテナーが再現を確認
v2.1.233とv2.1.236で再現。チェックの失敗を一過性として扱い、次の成功で記録を戻す修正を検討しているというコメント。
- 2026-10-09v2.1.295でも再現
2.1.281から2.1.295のCHANGELOGに、この経路に触れる項目は無いと報告。
macOSの報告では、通信が正常なのに失敗が記録されており、通信断だけが原因ではない可能性も示されています。いずれも、最新版を実行中に version_to が null の失敗が残るという点は共通です。関連する #81898と #82408にも reproduced ラベルが付いています。
自動更新を止めて回避する必要はあるか
バナーを消すために自動更新を止める必要はありません。失敗の記録は、更新の動作とは別に残っているだけです。実際、Linuxの報告者は失敗記録が出ている間も、毎日新しいバージョンが入っていると書いています。
更新そのものを止めたい事情が別にある場合の手順は、Claude Codeアップデートの方法にまとめています。設定を入れても止まらないという報告はautoUpdatesが無視される件で扱っています。claude doctor の出力の読み方は/doctorとclaude doctorの違いが詳しいです。
まとめ
「Auto-update failed」が最新版なのに残るのは、通信断のような一過性の失敗が install_failed として保存され、次の成功で上書きされないためです。見分けは、.last-update-result.json の version_to が null かどうか。直し方は、実行中のバージョンが最新だと確かめてからそのファイルを削除し、セッションを開き直すことです。修正が入るまでは、通信が不安定な環境では再発する可能性があります。再発したら、同じ手順を繰り返すだけで済みます。