Claude Code Hooks Security Check
Paste a Claude Code hooks configuration and see which hook command strings match a known-dangerous shape — a remote download piped straight into a shell, a credential file read and sent over the network in the same line, an unguarded recursive delete, TLS verification disabled, and more. Hooks run automatically, with no confirmation prompt, on every matching tool call.
Textual pattern checks, not a safety guarantee. This tool never runs your commands and never calls an LLM — it only matches the text you paste against known-dangerous shapes. A match is worth a look, not a verdict, and a clean scan is not proof a command is safe. See why a clean scan isn't a safety guarantee.
1. Paste your hooks configuration
Either a full settings.json (its "hooks" key is used) or a standalone hooks object like {"PreToolUse": [...]}. Nothing here is uploaded — everything runs in this page.
Findings
Paste a hooks configuration above, or load the example, then press Scan.
Usage is optional, stays in this browser, and counts only that a scan ran or a summary was copied. Nothing you paste — no hook commands, paths, or findings — is ever recorded, uploaded, or sent to an analytics service. Uncheck to turn it off. Do Not Track and Global Privacy Control disable counting automatically.
Common questions
What does this tool check in a hooks configuration?
The command string inside every hook entry, against known-dangerous shapes: a remote download (curl/wget) piped straight into a shell interpreter, a PowerShell download executed with Invoke-Expression, an unguarded recursive delete of a broad path like / or $HOME, a credential file (SSH key, AWS credentials, .npmrc, kube config, and similar) read and sent over the network in the same line, environment variables dumped and sent over the network, TLS/certificate verification disabled, a shell startup file or crontab appended to, world-writable permissions granted, a base64-encoded payload decoded and executed, and a process started detached from the hook invocation.
How is this different from Claude Code Settings Check?
Claude Code Settings Check asks whether a hook or permission rule is shaped correctly -- does the matcher compile, is there a command at all. This tool assumes the JSON is well-formed and asks a different question: does the command text itself match a known-dangerous shape. Run both -- a hook can be structurally perfect and still risky, or structurally broken and harmless.
Does this tool contact a network or execute my commands?
No. Every check is a deterministic, textual pattern match against the command strings you paste, entirely in your browser. It never runs a single command and never uploads anything.
Does a clean scan mean my hooks are safe?
No. A zero-finding result means none of this tool's known patterns matched the text you pasted -- it does not mean a command is safe. A command can be dangerous in a way this tool doesn't recognise, and a command can match a pattern here and be completely ordinary (rm -rf on a build directory shares a shape with rm -rf on your home directory). See “Why a clean scan isn’t a safety guarantee” for what this tool can and can't see.
Read why a clean scan isn't a safety guarantee, or see this checker vs. reading the hooks config by eye for what a manual read reliably catches and what it doesn't.