一覧へEnglish

H03

Claude Code のフックが1つも動かない(disableAllHooks が残っている)

症状

書き込みを止めるフックも、通知のフックも、何も動かない。エラーも警告も出ない。試しに一時的に止めたつもりの設定が、そのまま残っていることがある。

30秒で確かめる

PowerShell(Windows PowerShell 5.1)に貼って実行します。一時フォルダ(%TEMP% の下)にだけファイルを作ります。最後に REPRODUCED と出たら、あなたの PC で起きています。 claude を1回呼ぶので、1分ほどかかります。

$d = Join-Path $env:TEMP ('cc-trap-' + (Get-Date -Format 'yyyyMMddHHmmss')); New-Item -ItemType Directory $d -Force | Out-Null
foreach ($f in @("$env:USERPROFILE\.claude\settings.json", "$PWD\.claude\settings.json", "$PWD\.claude\settings.local.json")) {
  if (Test-Path -LiteralPath $f) { try { $v = (Get-Content -LiteralPath $f -Raw -Encoding UTF8 | ConvertFrom-Json).disableAllHooks; "your settings: $f -> disableAllHooks=$v" } catch { "your settings: $f -> not valid JSON" } }
}
[IO.File]::WriteAllText("$d\deny.ps1", '[IO.File]::WriteAllText(''MARK'', ''x''); [Console]::Error.WriteLine("denied"); exit 2'.Replace('MARK', "$d\called.txt"))
$hook = 'powershell -NoProfile -ExecutionPolicy Bypass -File \"' + ($d -replace '\\', '/') + '/deny.ps1\"'
[IO.File]::WriteAllText("$d\s.json", '{"disableAllHooks":true,"hooks":{"PreToolUse":[{"matcher":"Write|Edit","hooks":[{"type":"command","command":"HOOK","onFailure":"block"}]}]}}'.Replace('HOOK', $hook))
Push-Location $d
'Use the Write tool once to create the file written.txt with the content hi. Do not retry if it is blocked.' | claude -p --settings s.json --permission-mode acceptEdits | Out-Null
Pop-Location
$w = Test-Path "$d\written.txt"; $c = Test-Path "$d\called.txt"
"deny hook with onFailure block, plus disableAllHooks true: hook called=$c, written=$w"
if ((-not $c) -and $w) { 'REPRODUCED' } else { 'NOT REPRODUCED' }

なぜ起きるか

設定ファイルに "disableAllHooks": true があると、Claude Code はそのファイルが効く範囲のフックを全部動かさない(管理者の設定で入れたフックは除く)。値は設定の優先順位で決まり、あなた用の設定(~/.claude/settings.json)で true でも、プロジェクトの設定で false なら動く。onFailure: "block" を付けた安全装置も、呼ばれないので止めない。

直し方

その行を消す(または false にする)。確かめるコードの最初の行に、あなたの設定ファイルごとの値が出る。1回だけフックを外して動かしたいなら、設定ファイルに書かずに、コマンドの --settings で渡す。

claude -p --settings '{"disableAllHooks": true}'   # その1回だけ止める(ファイルには残らない)

作者の PC での結果

拒否するフック(onFailure: block 付き)を入れても、disableAllHooks: true と一緒だと、フックは呼ばれず書き込まれた

作者の PC: Windows 11 / Windows PowerShell 5.1.26100 / Python 3.13.7 / Claude Code 2.1.304、日本語の Windows(コードページ 932)。2026-10-20〜22 に確認。

こんな言葉で探した人へ

関連

この穴を最初から踏まないようにした部品(書き込み先を絞る安全装置〈onFailure: block 付き〉、夜の無人実行、ファイルとフックの設定を調べる健康診断、CLAUDE.md の型、試験一式)は cc-win-kit にまとめています。

cc-win-kit 英語版(Payhip、19ドル。日本語版は 2026年10月31日に note で公開)

ほかの症状