Borrowing it
Nothing to install: this file belongs to steve-magne/hookstack. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/steve-magne/hookstack/main/.claude/settings.jsongit clone --depth 1 https://github.com/steve-magne/hookstackWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/hooks/steve-magne/hookstack/pre-tool-use)<a href="https://agentmods.dev/hooks/steve-magne/hookstack/pre-tool-use"><img src="https://agentmods.dev/badge/hooks/steve-magne/hookstack/pre-tool-use/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/hooks/steve-magne/hookstack/pre-tool-use"><img src="https://agentmods.dev/badge/hooks/steve-magne/hookstack/pre-tool-use.svg" alt="Reviewed on agentmods" width="80" height="20"></a>Grade A, and why
PreToolUse scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the commands this hook runs, not an audit. A hook is shell that executes on your machine at the event it names, which is why every command in it is printed with what was found.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-curl-pipe-sh.mjs" This is a copy
44% identical to SessionStart — 120 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 123 lines — stays where its author put it; the contents beside it link to each section on GitHub.
{
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/detect-secrets.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-destructive.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/enforce-package-managers.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-push-closed-pr.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-curl-pipe-sh.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/guard-force-push-any.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/warn-sudo.mjs"
}
],
"matcher": "Bash"
},
{
"hooks": [
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/protect-paths.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/protect-lockfiles.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-main-guard.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/pre-write-secret-detection.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/block-generated-paths.mjs"
},
{
"type": "command",
"command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/env-gitignore-guard.mjs"
}
],
"matcher": "Write|Edit"
},
{
"hooks": [
{
"type": "command",
"command": "node $CWhat else settings.json configures
This page is one entry in a file that holds 26. Installing the file brings all of them; each is measured and scanned on its own page.
- Settings file hookstack A not measured
- Hook ConfigChange A not measured
- Hook CwdChanged A not measured
- Hook FileChanged A not measured
- Hook InstructionsLoaded A not measured
- Hook MessageDisplay A not measured
- Hook Notification A not measured
- Hook PermissionDenied A not measured
- Hook PermissionRequest A not measured
- Hook PostCompact A not measured
- Hook PostToolBatch A not measured
- Hook PostToolUse A not measured
- Hook PostToolUseFailure A not measured
- Hook PreCompact A not measured
- Hook SessionEnd A not measured
- Hook SessionStart A not measured
- Hook Stop A not measured
- Hook StopFailure A not measured
- Hook SubagentStart A not measured
- Hook SubagentStop A not measured
- Hook TaskCompleted A not measured
- Hook TaskCreated A not measured
- Hook UserPromptExpansion A not measured
- Hook UserPromptSubmit A not measured
- Hook WorktreeRemove A not measured
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 123 lines scan A 0b448a8f9116
PreToolUse is a hook published in the GitHub repository steve-magne/hookstack (7 stars, last pushed 5d ago), licensed MIT. Its token cost is not measured: a hook is shell that never enters the context. A static security scan graded it A with 1 finding (makes network calls). It is 44% identical to SessionStart, differing in 120 lines, and is treated as a copy.
Other hooks, from other repositories
SessionStart
Runs when a session starts on startup, running echo '✓ plugin-development loaded: Use /plugin-development:i. From ivan-magda/claude-code-plugin-template.
PreToolUse
Runs before the agent uses a tool for Bash tool calls, running an inline shell check. From apache/superset.
PreToolUse
Runs before the agent uses a tool, executing pre-write.sh and pre-bash.sh (2 commands). From anthropics/claude-cookbooks.
PostToolUse
Runs after a tool call finishes for Bash tool calls, executing hooks.sh via sh (3 commands). From anthropics/claude-plugins-official.
PreCompact
Runs before the context is compacted for manual and auto tool calls, executing hook-handler.cjs via node (4 commands). From ruvnet/RuView.
PreToolUse
Runs before the agent uses a tool for Bash tool calls, running node -e ". From heygen-com/hyperframes.