# Claude Codeの復旧：Safe Mode、/cd、フォールバック

> safe mode、/cd コマンド、フォールバックモデル、設定の復旧を使った Claude Code の問題診断。確認の順序と元の制限事項。

Source: https://ailoot.ai/blog/ja/claude-code-safe-mode-recovery/
Canonical: https://ailoot.ai/blog/ja/claude-code-safe-mode-recovery/
Language: ja
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-140
Revision: sha256-73fc109e009267b3a60ccb102692ce2e829aacf6a3580e68fcbde21dfcc2b11a


エージェント活用の実践資料：[Ailootのドキュメント](https://ailoot.ai/docs/)。



## 2026年6月、Claude Codeに何が追加されたのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

2026年6月8日、Claude Code v2.1.169で、Anthropicは`--safe-mode`フラグと`/cd`コマンドを追加しました。その2日前には、v2.1.166でフォールバックモデルが導入され、最大3つのモデルを連鎖させられるようになりました。この3つの機能は、vibe coderに最もよくある悩み、「すべてがおかしくなった。誰のせいか分からないし、再インストールに1時間もかけたくない」に対処します。

</div>

以前は、Claude Codeの動作がおかしくなったとき、たとえばスピナーが終わらない、起動時にクラッシュする、エージェントが`CLAUDE.md`のルールを無視する、フックが黙って実行されない、といった場合の解決策は一つしかありませんでした。`.claude/settings.json`の一部を手動でコメントアウトする、MCPサーバーを一つずつ無効にする、最悪の場合は`~/.claude`を削除して再インストールすることです。ある事例では、`~/.claude`を削除した結果、組み立てに1時間半かけたMCPサーバーの設定を失いました。後になって、原因は`CLAUDE.md`の1行で、見つけるのに10秒しかかからなかったと分かりました。しかし、それが判明したのは完全に復旧した後でした。

2026年6月、Anthropicはこの状況を変える3つの仕組みを導入しました。追加された機能と時期を簡単にまとめます。

| バージョン | 日付 | 追加された機能 |
|----|----|----|
| **2.1.166** | 2026年6月6日 | `fallbackModel`設定と、対話セッション用の`--fallback-model`フラグ |
| **2.1.169** | 2026年6月8日 | `--safe-mode`フラグ、`CLAUDE_CODE_SAFE_MODE`環境変数、`/cd`コマンド |
| **2.1.176** | 2026年6月12日 | 修正：`/cd`とworktreeの切り替え後に古いgitブランチが表示される問題を解消 |

以下では、それぞれの仕組みと、Claude Codeのセッションがうまくいかなくなったときに適用する順序を、手順ごとに説明します。

## Claude Codeでは何が最もよく問題を起こすのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

説明されている経験を見ると、vibe coderのClaude Codeでよく問題を起こすのは、矛盾するルールを含む肥大化した`CLAUDE.md`、終了コードを誤ったフック、黙って失敗するMCPサーバー、3階層の`settings.json`にある設定の重複という4つです。原因は一つで、診断には数分しかかからないのに、パニックになってすぐ`rm -rf`を実行してしまいます。

</div>

説明されている例では、最初の`CLAUDE.md`は80行で、1か月は問題なく動いていました。2か月目になると、週に一度、設定したルールをClaudeがすべて破ることが目立つようになりました。`.env`に触れる、`git push --force`を実行する、`node_modules`を探る、といった行為です。悪意があるのではなく、単に忘れてしまうのです。一度は`.gitignore`が削除され、すぐには理由が分かりませんでした。この状況については、[`CLAUDE.md`のガイド](https://ailoot.ai/blog/ja/claude-md-template/)でさらに詳しく説明しています。

`CLAUDE.md`が400行を超えると、気づかれないまま問題を起こし始めます。セッション開始時にコンテキストウィンドウのかなりの部分を占め、重要な指示が二次的な指示に埋もれてしまいます。Claudeは形式上ファイルを読んでいるため、外から見ると「ルールは書いてあるのに、機能していない」ように見えます。これは契約が肥大化している典型的な兆候です。

2つ目によくある原因はフックです。`Claude Code hooks`には、Anthropicがあまり強調していない注意点があります。

つまり、Pythonフックの`sys.exit(1)`（またはUnixで一般的な「エラーで失敗した」という終了コード）ではClaudeを止められません。ブロックするのはコード`2`だけです。説明されている事例では、このフックは「絶対に禁止する」ものと考えられていましたが、実際には警告を記録するだけで、処理を続行させていました。

3つ目の層はMCPサーバーで、こちらも独自の形で問題を起こします。

症状は多くの場合同じです。MCPコマンドは使えるのに、トレースバックなしで`failed`を返します。MCPの設定や`claude mcp add`によるサーバーの追加については、[別のガイド](https://ailoot.ai/blog/ja/mcp-servers-claude-code/)を参照してください。

4つ目の原因は、3階層の`settings.json`構成です。`~/.claude/settings.json`（ユーザーレベル）、プロジェクトルートの`.claude/settings.json`（プロジェクトレベル）、`.claude/settings.local.json`（ローカル設定）があり、さらに企業の管理者が設定した管理対象設定が加わることもあります。これらは優先順位のルールに従って統合されます。プロジェクトレベルでMCPサーバーを追加し、ユーザーレベルに起動設定の異なる同様の項目があると、気づかれない競合が起こり、「Claude Codeが壊れた」ように見えます。

## `--safe-mode`はどのように動作し、何を無効にするのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

`claude --safe-mode`を実行すると、カスタマイズがすべて無効になった状態でClaude Codeが起動します。対象は`CLAUDE.md`、プラグイン、スキル、フック、MCPサーバー、ユーザーコマンド、エージェント、出力スタイル、ワークフロー、キーバインドです。認証、モデル選択、組み込みツール、権限はそのまま有効です。これは診断用ツールです。safe modeで問題が消えるなら、追加した層のいずれかが原因です。

</div>

v2.1.169のchangelogにあるAnthropicの原文は次のとおりです。

<figure>
<blockquote>
<p><code>--safe-mode</code>フラグ（および<code>CLAUDE_CODE_SAFE_MODE</code>）を追加。診断のため、カスタマイズ（<code>CLAUDE.md</code>、プラグイン、スキル、フック、MCPサーバー）を無効にしてClaude Codeを起動する。</p>
</blockquote>
<figcaption>— Anthropic Claude Code Changelog, https://code.claude.com/docs/en/changelog</figcaption>
</figure>

Anthropicは、model-configのドキュメントで次のように補足しています。

<figure>
<blockquote>
<p>カスタマイズが原因かどうかを確認するには、<code>claude --safe-mode</code>でセッションを開始します。これにより、<code>CLAUDE.md</code>、スキル、MCPサーバー、フックが無効になります。Gitの状態とディレクトリ名はカスタマイズと見なされず、引き続き利用できます。</p>
</blockquote>
<figcaption>— Anthropic Docs - Model configuration, https://code.claude.com/docs/en/model-config</figcaption>
</figure>

これは**診断用ツール**であり、「クリーンな環境」ではありません。safe modeを使って答えるのは、「問題はClaude Codeの初期状態の動作にあるのか、それとも追加したカスタマイズにあるのか」という一つの問いです。これはコンテキストエンジニアリングの一部であり、ある時点でClaudeに何を見せ、何を見せないかを管理することです。safe modeですべて動作するなら、二分探索で各層を調べれば原因が分かります。動作しない場合は、インストール自体、認証、ネットワーク、またはインフラに問題があります。その場合は`claude doctor`とログを確認するのが適切です。

safe modeで無効になる項目（Anthropic公式リストの主な5層）：

- すべての階層（ユーザー／プロジェクト）の`CLAUDE.md`
- プラグイン
- スキル
- フック
- MCPサーバー

引き続き使える項目：

- 認証（OAuthセッションまたはAPIキー）
- モデル選択（`--model sonnet`、`--model opus`）
- 組み込みツール（Read、Write、Bash、Grepなど）
- 権限
- Gitの状態
- ディレクトリ名

重要な点として、safe modeは企業の管理者が設定した管理対象設定やポリシーを無効にしません。Bedrock GovCloudやMDM設定で`availableModels`が指定されているチームで作業している場合、その制限は引き続き適用されます。safe modeが無効にするのはユーザーのカスタマイズだけであり、企業のポリシーではありません。

## 60秒で層を切り分け、原因を見つけるには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

手順1：問題が起きていたのと同じフォルダーで`claude --safe-mode`を実行します。動作するならカスタマイズに問題があり、一つずつ有効にしていきます。順番は`CLAUDE.md` -> フック -> MCP -> スキルです。safe modeでも動かないなら、認証、バージョン、ネットワーク、またはOSに問題があります。その場合は`rm -rf`に触れる前に、`claude doctor`で自動診断を実行してください。

</div>

Claude Codeが「言うことを聞かなくなった」ときの診断手順です。以下のコマンドを実行するには、**Claude Code v2.1.169**以降が必要です。古いバージョンを使っている場合は、先に更新してください（`npm update -g @anthropic-ai/claude-code`またはAnthropicのネイティブインストーラー）。

1.  問題が起きていたのと同じフォルダーを開きます。
2.  `claude --safe-mode`を実行します。
3.  問題なく起動したら、元のリクエストを試してください。動作しましたか？なら、原因は各層のいずれかです。手順4に進みます。
4.  safe modeでも問題が続く場合は、設定に触れないでください。まず`claude doctor`を実行し、認証、バージョン、インストールの競合を確認します。

safe modeで問題なく起動したら、原因の可能性が最も高いものから、一つずつ層を有効にします。説明されている経験に基づく順序は次のとおりです。

1.  **`CLAUDE.md`。** safe modeを使わずに`claude`を実行し、ファイル名を一時的に変更します：`mv CLAUDE.md CLAUDE.md.bak`。動作するなら、このファイルが原因です。その後、行を半分ずつ残して確認する二分探索ができます。
2.  **フック。** `.claude/settings.json`を開き、`hooks`セクションに一時的に`[]`を設定します。`claude`を再起動します。動作しますか？なら、原因はフックのいずれかです。一つずつ有効にしてください。
3.  **MCPサーバー。** 同様に、`~/.claude.json`または`.claude/settings.json`の`mcpServers`セクションに、一時的に空のオブジェクトを設定して再起動し、確認します。
4.  **スキル。** `.claude/skills/`を一時フォルダーに移します。起動して確認します。

「一時的な名前変更」とは、診断中にファイルを削除しないという意味です。`mv`や`git stash`を使えば、その層が原因でないと分かったときに、コマンド一つですべてを復元できます。



## コンテキストを失わずに`/cd`で作業フォルダーを切り替えるには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

Claude Code 2.1.169以降の`/cd <path>`コマンドは、プロンプトキャッシュを失わずに、アクティブなセッションの作業フォルダーを切り替えます。現在のプロジェクト設定に問題がある場合に便利です。クリーンなフォルダーに移動してClaudeが動作するかを確認し、元のフォルダーに戻れます。以前はセッションを終了して再開する必要がありました。

</div>

6月8日のv2.1.169 changelogには次のように記載されています。

<figure>
<blockquote>
<p>セッション中にプロンプトキャッシュをリセットせず、新しい作業フォルダーにセッションを切り替える`/cd`コマンドを追加。</p>
</blockquote>
<figcaption>— Anthropic Claude Code Changelog, https://code.claude.com/docs/en/changelog</figcaption>
</figure>

問題の修正にこの機能が役立つ理由を説明します。たとえば、プロジェクトフォルダー`~/work/myapp`で作業していて、Claude Codeの動作がおかしいとします。以前は「そもそも動くのか」を確認する唯一の方法は、セッションを終了し、別のフォルダーに移動して、改めて起動することでした。コンテキスト、履歴、温めたプロンプトキャッシュを失っていました。今は次のようにできます。

```bash
# 同じセッション内で実行：
/cd ~/sandbox/test
```

Claudeは新しいフォルダーに切り替え、そのフォルダーに`CLAUDE.md`があれば、それをシステムプロンプトの置き換えではなくメッセージとして読み込みます。つまり、キャッシュは維持されます。`~/sandbox/test`ですべて動作するなら、問題は`~/work/myapp`の設定にあったと分かります。

6月12日、v2.1.176で一つ厄介なリグレッションが修正されました。`/cd`後に完全に再起動するまで古いgitブランチが表示されていた問題です。古いバージョンを使っている場合は、更新するか、切り替え後の最初の数メッセージでは`git status`を無視してください。そのうち表示が追いつきます。

## 529エラーに備えてフォールバックモデルを設定するには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

v2.1.166でAnthropicは`fallbackModel`を追加しました。プライマリモデルが過負荷または利用不能になったとき、最大3つのモデルを順番に試すチェーンです。このチェーンは、過負荷と再試行できないサーバーエラーの場合にのみ起動します。認証、課金、レート制限、通信エラーではフォールバックチェーンは起動せず、通常の再試行処理に従います。

</div>

説明されている状況では、週に一度、プロジェクト内の長いタスクをOpusで実行すると、10分後にAPIが529 Overloadedを返してセッションがクラッシュします。以前は待つか、手動で`--model sonnet`を使ってSonnetに切り替えるしかなく、その場合は温めたコンテキストを失っていました。second-brainの仕組みを構築した大きな`business/`フォルダーでは、これに約20分かかります。今は、適切な仕組みがあります。

公式ドキュメントからの正確な引用は次のとおりです。

<figure>
<blockquote>
<p>プライマリモデルが過負荷、利用不能、またはその他の再試行できないサーバーエラーを返した場合、Claude Codeはリクエストを失敗させずにフォールバックモデルへ切り替えられます。認証、課金、レート制限、リクエストサイズ、通信のエラーでは切り替えは起動しません。これらは通常の再試行とエラー処理の経路に従います。</p>
</blockquote>
<figcaption>— Anthropic Docs - Model configuration, https://code.claude.com/docs/en/model-config</figcaption>
</figure>

チェーンの動作については、別途次のように説明されています。

<figure>
<blockquote>
<p>1つ以上のフォールバックモデルを設定すると、Claude Codeはその順番に試し、切り替え時には通知を表示します。切り替えが適用されるのは現在のターンだけです。次のメッセージでは再びプライマリモデルが試されます。重複を除いたチェーンは最大3モデルに制限され、それ以降の項目は無視されます。</p>
</blockquote>
<figcaption>— Anthropic Docs - Model configuration, https://code.claude.com/docs/en/model-config</figcaption>
</figure>

設定方法は2つあります。CLIを使う方法：

```bash
claude --fallback-model sonnet,haiku
```

`~/.claude/settings.json`を使う方法：

```json
{
  "fallbackModel": ["claude-sonnet-4-6", "claude-haiku-4-5"]
}
```

レート制限については、別の注意点があります。Anthropicは429エラーを意図的にチェーンに回さないため、次のモデルに切り替えてリクエスト制限を回避することはできません。フォールバックが機能するのは、プライマリモデルが過負荷、利用不能、または再試行できないサーバーエラー（たとえば529 Overloaded）を返した場合だけです。レート制限には、通常の再試行とバックオフが適用されます。

もう一つ注意点があります。6月12日、v2.1.174でリグレッションが修正され、コンパクションが`--fallback-model`を尊重するようになりました。長いセッション中、過負荷の状態でコンパクションが起きる場合、この修正以前はフォールバックモデルが呼び出されませんでした。長時間のセッション（夜間の`/compact`、`/loop`など）を使う場合は、少なくともv2.1.174に更新してください。

## 原因が`CLAUDE.md`、フック、MCP、またはスキルだった場合の修正方法

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

safe modeで原因の層を特定できたら、修正方法は層によって異なります。`CLAUDE.md`には二分探索を使うか、200行未満の既製テンプレートに戻します。フックでは終了コード（2はブロックし、1はブロックしません）とロジックを確認します。MCPではサーバーを一つ取り除いて確認します。スキルでは`SKILL.md`と`CLAUDE.md`のルールに矛盾がないか確認します。

</div>

層ごとの具体的な対処方法を説明します。

### 原因が`CLAUDE.md`の場合

ファイルを開き、サイズを確認します。説明されている経験では、**有効な`CLAUDE.md`は200行以下にしてください**。残りは、プロジェクト内のルーターや補助ドキュメントに移します（second-brain全体の構成については、[second brainのガイド](https://ailoot.ai/blog/ja/claude-code-second-brain/)を参照してください）。400行を超えているなら、ほぼ間違いなく原因です。手順は次のとおりです。

1.  バックアップを作成します：`cp CLAUDE.md CLAUDE.md.full`。
2.  短い動作確認済みのテンプレートに戻します。既製のテンプレートは[「CLAUDE.mdの設定方法」ガイド](https://ailoot.ai/blog/ja/claude-md-template/)にあります。
3.  Claude Codeを再起動し、確認します。
4.  動作する場合は、10～20行の小さなブロックでルールを戻し、ブロックごとに確認します。
5.  動作を壊すブロックを見つけます。そのブロックを、正しい終了コードを使うフックとして書き直します（フックの終了コードについては、このH2の次の小節で説明します）。

### 原因がフックの場合

まず終了コードが正しいか確認してください。Claude Codeのフックでは、次のように扱われます。

- **終了コード0** — 問題ありません。処理が続行されます。
- **終了コード1** — エラーですが、**ブロックしません**。何もなかったかのようにClaudeは処理を続けます。
- **終了コード2** — **ブロックする**エラーです。処理を実際に止めるのはこれだけです。

ブロックするつもりでシェルフックに`sys.exit(1)`や`exit 1`を書いた場合、Claude Codeではこのコードは警告を記録するだけで、処理を止めません。`2`に変更してください。この落とし穴を避けるフックの詳細と設定方法については、[別のガイド](https://ailoot.ai/blog/ja/claude-code-hooks/)を参照してください。

2つ目によくあるケースは、フックが標準出力に無効なJSONを返すことです。Claude Codeはフックの応答をJSONとして解析します。出力にログ、進捗表示、絵文字などの余計なものがあると、フックは失敗と見なされ、処理は続行されます。ルールは、**標準出力にはJSONのみを出し、それ以外はすべて標準エラー出力に送る**ことです。

3つ目は、safe modeで隠された`~/.claude/`内の情報をフックが読み取ろうとするケースです。これは通常起こり得ることです。フックにパッチを当てるのではなく、冒頭で`os.environ.get('CLAUDE_CODE_SAFE_MODE')`を確認し、該当する場合は0で終了するように修正してください。

### 原因がMCPサーバーの場合

症状：MCPコマンドは利用できるのに、明確なトレースバックなしで`failed`を返します。手順は次のとおりです。

1.  `claude mcp list`を実行し、どのサーバーが定義されているか確認します。
2.  `~/.claude.json`内のサーバーを一つずつ無効にします。キー名`claude-server-A`を`_claude-server-A`に変更します（削除せずに無効化できます）。
3.  `claude`を再起動し、どの呼び出しが動作するか確認します。
4.  原因のサーバーが見つかったら、ログを確認します：`claude mcp logs <name>`。
5.  サードパーティ製サーバー（`@modelcontextprotocol/server-postgres`など）の場合は、最近のリリースがあるか確認します。MCPエコシステムはまだ不安定で、Claude Codeの更新によってサーバーが頻繁に壊れます。

「MCPが2つあるときだけ起動時にクラッシュする」場合は、safe modeでMCPを使わずに動作を比べてください。

### 原因がスキルの場合

スキルは`SKILL.md`と`.claude/skills/<name>/`内のコードで構成されます。症状としては、Claudeがスキルを無視する、誤ったタイミングで適用する、または適用しても使えない結果を出す、といったものがあります。手順は次のとおりです。

1.  `SKILL.md`を開き、説明を確認します。**説明は1～2文で、いつ使うかを具体的に示してください**。「あらゆることに使える万能ヘルパー」と書かれていると、Claudeはいつ呼び出せばよいか判断できません。
2.  `CLAUDE.md`の内容と矛盾していないか確認します。`CLAUDE.md`に「必ずテストを書く」とあり、スキルの説明に「テストなしの素早いプロトタイプに使う」とあれば、矛盾しています。
3.  スキルが外部コマンド（npm、python、git）を使う場合、システム全体のPATHからコマンドを利用できるか確認します。スキルが使える環境は最低限のものです。

## safe modeでも解決しない場合：診断と状態保全をしてから修復する

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

safe modeも失敗する場合、導入、認証、通信、基盤が候補に残ります。`claude doctor`の証拠を確認してください。結論が出ないだけで設定や履歴を削除する理由にはなりません。全状態を保全・検証してから、診断されたインストールだけを修復します。

</div>

ユーザー状態の削除を診断の近道にしないでください。以下で原因を特定し、不明なら証拠を保って調べます。修復は検証済みバックアップから始め、既存アカウントと認証ストアの識別を維持します。順序は次のとおりです。

1.  **`claude doctor`** — 自動診断。Anthropicのドキュメントには次のように書かれています。

<figure>
<blockquote>
<p>`claude --version`が動作するのに、ほかの何かに問題がある場合は、`claude doctor`を実行して自動診断レポートを生成してください。</p>
</blockquote>
<figcaption>— Anthropic Docs - Troubleshoot installation, https://code.claude.com/docs/en/troubleshoot-install</figcaption>
</figure>

2.  **インストールの競合を確認します。** npmのグローバル版とネイティブインストーラー版の両方が、同時にインストールされていることがよくあります。

<figure>
<blockquote>
<p>Claude Codeが複数インストールされていると、バージョンの不一致や予期しない動作が起こることがあります。</p>
</blockquote>
<figcaption>— Anthropic Docs - Troubleshoot installation, https://code.claude.com/docs/en/troubleshoot-install</figcaption>
</figure>

3.  **`ANTHROPIC_API_KEY`がOAuthセッションに割り込んでいないか確認します。**「何も動かない。キーが期限切れになった」という問題のよくある原因です。

<figure>
<blockquote>
<p>`ANTHROPIC_API_KEY`が設定され、確認されている場合、Claude CodeはサブスクリプションのOAuth認証情報ではなく、そのキーを使用します。</p>
</blockquote>
<figcaption>— Anthropic Docs - Troubleshoot installation, https://code.claude.com/docs/en/troubleshoot-install</figcaption>
</figure>

対処法：現在のシェルセッションで`unset ANTHROPIC_API_KEY`を実行するか、`~/.zshrc`／`~/.bashrc`から削除します。

4. **診断で特定したインストールだけを修復し、先に全ユーザー状態を保全します。** safe modeの失敗やdoctorの不明結果だけでは削除が必要といえません。一貫したコピーのため全Claudeセッションと書き手を停止します。Unixアカウント、HOME、OSの認証ストア、Anthropicアカウントを維持し、キー変更や代替の識別を作りません。

次の例は**GNU tarを使うLinux用**です。macOSやWindowsでは、そのOSのACL、拡張属性、リンク、メタデータを保つ手段を使い、復元を検証します。GNU専用フラグを流用しないでください。認証と会話を含むので、アーカイブは非公開でリポジトリ外へ置きます。

```bash
# Run as the same user who owns the Claude state, after stopping writers.
set -eu
umask 077
backup_dir=$(mktemp -d "$HOME/.claude-recovery-XXXXXXXX")
set --
if [ -e "$HOME/.claude" ] || [ -L "$HOME/.claude" ]; then
  set -- "$@" .claude
fi
if [ -e "$HOME/.claude.json" ] || [ -L "$HOME/.claude.json" ]; then
  set -- "$@" .claude.json
fi
[ "$#" -gt 0 ] || exit 1
tar --acls --xattrs --numeric-owner -cpf "$backup_dir/claude-state.tar" -C "$HOME" "$@"
tar --acls --xattrs --compare -f "$backup_dir/claude-state.tar" -C "$HOME"
sha256sum "$backup_dir/claude-state.tar" > "$backup_dir/claude-state.sha256"
(cd "$backup_dir" && sha256sum -c claude-state.sha256)
mkdir "$backup_dir/restore-check"
tar --acls --xattrs -xpf "$backup_dir/claude-state.tar" -C "$backup_dir/restore-check"
tar --acls --xattrs --compare -f "$backup_dir/claude-state.tar" -C "$backup_dir/restore-check"
printf 'Verified recovery directory: %s\n' "$backup_dir"
```

全コマンドの成功が必要です。Git管理済み設定だけでなく、無視・未追跡の履歴、プラグインを含む`.claude`全体と`.claude.json`を保存します。シンボリックリンクや別の保存先がある場合は止まり、解決した実体も同じ検証済みコピーへ含めます。リンクだけでは実体を保存しません。macOS Keychainなどの外部認証ストアはこのアーカイブに入らないため、その識別は維持してください。

診断が**旧ローカルインストール**を競合元と特定した場合だけ、設定や履歴を消さず、その導入部分だけを非公開の復旧先へ移します。

```bash
# Use the verified backup_dir from the previous block.
if [ -d "$HOME/.claude/local" ]; then
  mv "$HOME/.claude/local" "$backup_dir/legacy-local"
fi
```

npm版も競合と診断し、ネイティブ版を残す場合だけ除去します。[公式ネイティブインストーラー](https://code.claude.com/docs/en/setup)を使い、`.claude`と`.claude.json`は削除しません。

```bash
curl -fsSL https://claude.ai/install.sh | bash
claude --version
claude doctor
```

Windowsのネイティブ導入は次です。

```powershell
irm https://claude.ai/install.ps1 | iex
```

**復元は別工程です。** 再び書き手を止め、チェックサムと空の復旧フォルダーへの展開・比較を確認します。移した旧導入を戻す場合、`$HOME/.claude/local`がないことを確認してから、`$backup_dir/legacy-local`をその正確なパスへ戻します。診断対象の設定は現在の置き換えを先に保全し、検証済み展開から戻します。全ツリーを盲目的に上書きしません。履歴、MCP、元の識別を保ちます。Gitスナップショットだけでは無視・未追跡の会話、認証、メタデータを覆えません。

## Claude Codeが壊れたときにしてはいけないこと

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

説明されているサポート事例から、6つのアンチパターンが分かりました。診断前にキーを変更する、最初に完全リセットを行う、フックのUIエラーに慌てる、ロジックを直す前にフックの終了コードを引き上げる、safe modeという安全策なしで`CLAUDE.md`を編集する、「Claudeが自分でMCPを直す」と信じることです。どれも何時間もの損失につながりますが、いずれも必要ありません。

</div>

### 診断前にキーを変更しない

「認証が機能しない」問題の90%は、`ANTHROPIC_API_KEY`がサブスクリプションに割り込んでいる、フックのUIバグ、またはMCPの失敗のいずれかです。キーをローテーションしてもこれらは直りません。それどころか、古いキーを無効化して新しいキーを発行し、CIに再署名し、本番環境の変数を更新する必要があるため、さらに1時間の停止を招きます。まず`claude --safe-mode`を実行してください。動作しますか？なら、カスタマイズに問題があります。キーに触れる必要はありません。

### safe modeの前に完全リセットしない

safe modeなら、1秒で隔離された環境を用意できます。`.claude`の削除は履歴、MCP設定、未追跡状態を失わせることがあります。先に診断し、非公開バックアップを検証して、原因と分かった導入または設定層だけを元に戻せる形で移してください。

### フックのUIエラーに慌てない

修正を始める前に、表示だけを信用せず、ログを`stderr`に出すか明示的なprintを使って、フックが実際に実行されたか確認してください。

### ロジックを直す前にフックの終了コードを引き上げない

ブロッキングフックが処理を止めないときは、`exit 2`にして終わりにしたくなるかもしれません。これは一時的には動作する修正ですが、別の問題を隠してしまいます。1か月にわたってブロックが機能していなかったのなら、フックが禁止するはずだった処理はすべて通過しています。まずgitのログを調べ、何がすり抜けたのかを正確に確認してください。その後でブロックを追加します。そうしなければ、後からブロックを設けても、それ以前に起きたことは取り消せません。

### safe modeという安全策なしで本番の`CLAUDE.md`を編集しない

説明されている事例では、`CLAUDE.md`を編集した後にClaudeの動作がおかしくなり、`git diff`を見ると、その日の夕方に誰かがMCPサーバーとフックもリポジトリに追加していたことが分かりました。自分の編集が原因だと考えて元に戻したものの、Claudeの動作はおかしいままでした。ルール：`git revert`の前に`claude --safe-mode`を実行してください。safe modeでも問題が続くなら、あなたの編集とは無関係です。元に戻す必要はありません。

### 「Claudeが自分でMCPを直す」と信じない

よくある事例を挙げます。Claudeに「MCPサーバーに特定のツールを追加して」と依頼すると、Claudeは動作していた設定を書き換えて、すべてを壊し、その後何ターンもかけて自分が起こした損害をデバッグし、その過程でセッションの利用上限を使い切ります。MCPが壊れたら、**設定は手動で確認してください**。エージェントに任せてはいけません。ツール群の一部もMCP上で動作しており、MCPが壊れると診断する側も壊れます。

## 修復後はどうすればよいか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaways">

重要なポイント

Claude Codeを復旧したら、再び壊れないよう予防策を追加してください。最低限、ユーザー設定に`disableBypassPermissionsMode: "disable"`を設定し、`.env`と`git push --force`をブロックするフックを追加し、長時間の自律実行にはサンドボックスを使います。予防ガイドは、このガイドの対になるものです。

</div>

インシデントを分析した後、すぐに作業へ戻ってはいけません。まず、同じことが繰り返されないように予防策を追加してください。second brain（プロジェクト構造を持つ`business/`フォルダー）と`CLAUDE.md`には何時間もかけることがあり、それらを手動で復元するのは困難です。これには十分な理由があります。最低限のセットは次のとおりです。

1.  <strong>`~/.claude/settings.json`</strong>に`permissions.disableBypassPermissionsMode: "disable"`を設定します。これにより、バイパスモードを設計上禁止できます。誤って`--dangerously-skip-permissions`を起動しても動作しません。
2.  **`Read(./env*)`、`Bash(git push --force)`、`Write(./node_modules/**)`に対するフック**を設定します。願いではなく、ルールとして捕捉しなければならない操作です。
3.  **長時間の自律実行（`/loop`、`/schedule`）向けにサンドボックスを設定します。**
4.  <strong>独自のルールを使って`/compact`を設定し、コンテキストから何を破棄するかを定めます。</strong>Claudeがコンテキストを使い切らないようにするためです。

4層の保護策の全容は、[「Claude Codeが一晩でプロジェクトを壊さないように設定する方法」ガイド](https://ailoot.ai/blog/ja/claude-code-safe-overnight-setup/)で説明しています。一方のガイドでは`/loop`を実行する前の予防を扱い、もう一方では`/loop`がすでに何かを壊した後の復旧を扱います。理にかなった組み合わせです。

<div class="section" role="doc-bibliography" aria-label="Sources">

### 出典

- [Anthropic Claude Code Changelog](https://code.claude.com/docs/en/changelog) — v2.1.166（`fallbackModel`）、v2.1.169（safe mode、/cd）、v2.1.174（コンパクション修正）、v2.1.176（/cdのgitブランチ修正）を記載した公式changelog。
- [Anthropic Docs - Model configuration](https://code.claude.com/docs/en/model-config) —「Fallback model chains」「Check what triggered fallback」「Setting your model」の各セクション。
- [Anthropic Docs - Troubleshoot installation and login](https://code.claude.com/docs/en/troubleshoot-install) —インストールの競合、`claude doctor`、`ANTHROPIC_API_KEY`による割り込み。

</div>

実践資料：[Ailootのドキュメント](https://ailoot.ai/docs/)。





資料とツール：[Ailoot](https://ailoot.ai/)。

## Claude Codeの復旧：Safe Mode、/cd、フォールバック | Ailoot：よくある質問

### safe modeで失敗したら、~/.claudeを消すべきですか？

いいえ。導入、認証、ネットワーク、基盤の原因が残ります。doctorが結論を出せないことは設定や履歴の削除理由ではありません。診断した層だけを修復してください。

### インストール修復の前に何を保全しますか？

書き手を止め、セッション、プラグイン・MCP、無視ファイル、メタデータを含む全状態を保存し、ハッシュと展開を確認します。同じアカウントと認証ストアを保ち、現在の状態へ一括上書きせず、原因の層だけを復元してください。


## Ailoot · 企業とそのプロジェクト群

Ailootは、蓄積した運営経験、幅広い顧客基盤、安定したサービス、継続的なKPI管理を基盤としています。

企業とそのプロジェクト群：数百万の顧客、毎月数十億規模の売上。

Ailootはこの運営経験を、お客様の製品、エージェント、アプリケーション、自動化でAI機能を利用するためのAPIアクセスに活かしています。
