Could not read Claude Code config — run `claude` with no arguments to recover it.
設定ファイルを読めない状態。JSONの構文エラーか、末尾のカンマが原因の大半。
エラー文字列
Could not read Claude Code config — run `claude` with no arguments to recover it.
⚠️ メッセージの後半に対処法が書かれています。 途中で切れた形で見ている場合は、全文を確認してください。
Could not read Claude Code config — run `claude` with no arguments to recover it.
何が起きているか
Claude Code の設定(~/.claude.json)を読めていません。
⭐ メッセージ自身が答えを持っています。 引数なしで claude を起動すると、設定を作り直します。
🔴 設定ファイルが壊れていても、普段は何も言われません
v2.1.238 で実測した結果です。壊れた設定は、エラーを出さずに丸ごと捨てられます。
| 状態 | 起動時の挙動 |
|---|---|
~/.claude.json が壊れている |
何も言わずに起動する(exit 0) |
settings.json が壊れている |
何も言わずに起動する。書いた設定は効かない |
settings.json が BOM 付き |
何も言わずに無視される。鍵を書いていても読まれない |
⚠️ つまり「設定が効かない」ときにこのメッセージは出ません。 逆に、このメッセージが出たときは設定を読む処理が明示的に走った場面です。
⭐ **設定が効かないと感じたら、エラーを待たずに自分で検証してください。**下の手順がそのまま使えます。
🔴 CI と -p では、警告そのものが出ません
v2.1.238 の claude --help は -p についてこう明記しています。
Settings files that fail validation are silently ignored in this mode (no error dialog is shown). (このモードでは、検証に失敗した設定ファイルは黙って無視されます。エラーダイアログは表示されません)
⚠️ これは非対話モードに限った挙動です。 対話セッションでは知らせる余地がありますが、次のときは何も出ません。
| 状況 | |
|---|---|
-p / --print を付けた |
明示的に非対話 |
| 標準出力が端末でない | パイプやリダイレクトも自動的に非対話になる |
| CI・cron・スクリプト | 上に該当する |
🔴 permissions.deny を書いたつもりで CI を回していると、その制限が効かないまま動きます。 しかもログには何も残りません。
⭐ **CI に載せる前に、設定ファイルを JSON として検証しておくこと。**次の手順で確認できます。
直し方
1. どのファイルが壊れているか確認する
設定ファイルは複数の場所に置けます。
| 場所 | 用途 |
|---|---|
~/.claude/settings.json |
ユーザー全体 |
.claude/settings.json |
プロジェクト(共有) |
.claude/settings.local.json |
プロジェクト(自分だけ) |
Windows の場合、ユーザー全体の設定は %USERPROFILE%\.claude\settings.json です。
2. JSON として妥当か検証する
macOS / Linux
python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "OK" || echo "構文エラー"
jq があるなら次でも構いません。
jq empty ~/.claude/settings.json && echo "OK"
Windows(PowerShell)
try {
Get-Content "$env:USERPROFILE\.claude\settings.json" -Raw -Encoding utf8 | ConvertFrom-Json | Out-Null
"OK"
} catch {
"構文エラー: $($_.Exception.Message)"
}
エラーが出たら、報告された行を見てください。
⚠️ -Encoding utf8 を省略しないでください。 PowerShell 5.1 は BOM が無い UTF-8 を CP932(日本語のANSI)として読みます。 設定に日本語のパスやメモが入っていると、化けた状態で検証することになります。
⚠️ PowerShell の ConvertFrom-Json は JSON 仕様より緩く、「OK」でも壊れていることがあります。 実測で確認した差は次のとおりです。
| 書き方 | PowerShell の判定 | 実際 |
|---|---|---|
| 末尾カンマ | エラー | ❌ 不正 |
| コメント | エラー | ❌ 不正 |
| バックスラッシュ1本のパス | エラー | ❌ 不正 |
| シングルクォート | 「OK」 | ❌ 不正 |
| BOM 付き | 「OK」 | ⚠️ 読み込みに失敗しうる |
⭐ 「PowerShell では OK なのに Claude Code が読めない」なら、シングルクォートか BOM を疑ってください。 どちらもこの検証では見つかりません。
3. よくある構文の誤り
末尾のカンマ — JSON では許されません。
{
"model": "sonnet",
"permissions": { "allow": ["Bash(git:*)"] },
}
最後の } の前のカンマが原因です。削除してください。
コメント — JSON にコメントは書けません。
{
// これは使えない
"model": "sonnet"
}
引用符 — キーも値もダブルクォートです。シングルクォートは使えません。
Windows のパス — バックスラッシュはエスケープが必要です。
{
"env": { "NODE_EXTRA_CA_CERTS": "C:\\certs\\company-ca.crt" }
}
C:\certs\... と1本で書くと壊れます。\\ にするか、C:/certs/... とスラッシュで書いてください。
4. BOM を取り除く(Windows)
見た目に問題が無いのに読めない場合、これを疑ってください。
まず BOM が付いているか確認します。
$bytes = [System.IO.File]::ReadAllBytes("$env:USERPROFILE\.claude\settings.json")
if ($bytes.Length -ge 3 -and $bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF) { "BOM あり" } else { "BOM なし" }
付いていたら、BOM なしで書き直します。
$p = "$env:USERPROFILE\.claude\settings.json"
$text = Get-Content $p -Raw -Encoding utf8
[System.IO.File]::WriteAllText($p, $text, (New-Object System.Text.UTF8Encoding($false)))
⚠️ -Encoding utf8 は必須です。 これを省くと、BOM を消した瞬間に PowerShell がそのファイルを CP932 として扱うようになり、次に開いたときに日本語が壊れます。「BOM を消したら文字化けするようになった」というのはこれが原因です。
⚠️ メモ帳(notepad.exe)で設定ファイルを編集しないでください。 VS Code など、文字コードを指定して保存できるエディタを使ってください。
5. 権限を確認する
macOS / Linux
ls -l ~/.claude/settings.json
読み取り権限が無ければ付与します。
chmod 600 ~/.claude/settings.json
6. どうしても直らない場合
⚠️ バックアップを取ってから、作り直させます。
mv ~/.claude/settings.json ~/.claude/settings.json.bak
claude
Rename-Item "$env:USERPROFILE\.claude\settings.json" "settings.json.bak"
claude
起動時に既定の設定が作られます。バックアップから必要な項目だけを手で戻してください。
再発防止
- 設定ファイルは JSON 対応のエディタで編集する。 構文エラーがその場で分かります
- ⚠️ PowerShell で
Get-Contentするときは-Encoding utf8を付ける。 5.1 は BOM の無い UTF-8 を CP932 として読みます - Windows ではメモ帳を使わない。BOM が混入します
- チームで共有する
.claude/settings.jsonは、変更時に JSON の検証を通してからコミットする .claude/settings.local.jsonは.gitignoreに入れておく