Persistence hook auditor: scan repos for auto-exec hooks, flag Shai-Hulud patterns.
MCPpedia last refreshed this data
io.github.CloudCorpRecords/hookcheck is an MCP server that persistence hook auditor: scan repos for auto-exec hooks, flag Shai-Hulud patterns. Its tool list has not been published yet over stdio, sse and http, requires no API key, and scores 79/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"hookcheck": {
"args": [
"-y",
"@reneturcios/hookcheck",
"mcp"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Persistence hook auditor: scan repos for auto-exec hooks, flag Shai-Hulud patterns.
Run this in your terminal to verify the server starts. Then let us know if it worked - your result helps other developers.
npx -y '@reneturcios/hookcheck' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories - click any category to see the underlying evidence.
No known CVEs.
Checked @reneturcios/hookcheck against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in other
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 60-95% fewer tokens, same answers. Library, proxy, MCP server.
SQL for Android APK and DEX files: classes, methods, strings, references and smali.
System 1 decision models (Jev, Laya, Cua-S1) as brain for agents: Browser use, computer use, games and robotics
MCP Security Weekly
Get CVE alerts and security updates for io.github.CloudCorpRecords/hookcheck and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Find the hooks that run before you do. One scan, every auto-exec surface, one verdict.
Modern supply chain attacks do not need you to run anything. They persist through hooks that run automatically: an npm postinstall script, a Claude Code SessionStart hook in .claude/settings.json, a VS Code task set to run on folder open. The Shai-Hulud npm worm used exactly this pattern, planting a preinstall dropper and then persisting through agent and editor hooks so it survived cleanup and stole credentials on the next open.
hookcheck scans a local repo for every auto-exec hook, classifies each one, and prints a single verdict: CLEAN, REVIEW, or COMPROMISED-PATTERN, with the file, command, rules, and evidence for every finding. Deterministic only. No LLM, no network in the core scan.
Reports in October 2026 described AI agents orchestrating attacks and a self-propagating npm worm that backdoored hundreds of packages. Its persistence layer was not exotic malware. It was ordinary config files that every developer and every coding agent already trusts: package.json install scripts, .claude/settings.json hooks, and .vscode/tasks.json folderOpen tasks. Defenders needed a fast local check that an agent itself can call before opening, installing, or trusting a repo. That is hookcheck.
| surface | what it looks for |
|---|---|
package.json | preinstall, install, postinstall, prepare scripts. The root package.json and nested workspace package.json files (for example packages/*/package.json, apps/*/package.json, any directory up to 8 levels below the root, node_modules excluded) are inventoried the same way |
.claude/settings.json and settings.local.json | SessionStart, PreToolUse, and other hook commands. Also discovered: the GNU stow layout (claude/settings.json, no dot) and settings nested one level under a config dir (for example config/.claude/settings.json). A settings path that exists as a directory is reported as a warning, not silently skipped |
| Claude Code plugin hooks | hooks/hooks.json in a plugin root: at the repo root, or nested under plugin directories (for example plugins/<name>/hooks/hooks.json), with the plugin root at most 8 levels below the scan root. The file carries the same events map as the hooks key of .claude/settings.json (SessionStart, PreToolUse, PostToolUse, Stop, UserPromptSubmit, and the rest of the Claude Code event set) and its commands are classified exactly the same way. The sibling hooks/hooks-cursor.json variant carries the same command object shape under Cursor event names and is inventoried the same way |
.vscode/tasks.json | tasks with runOn folderOpen, plus task inventory |
.husky/ | every hook file and its full command content |
lefthook.yml | run commands |
.pre-commit-config.yaml | entry commands and remote repo URLs |
.cursor/ and .codex/ | config commands and files |
| MCP configs | .mcp.json, mcp.json, .vscode/mcp.json, .cursor/mcp.json, .windsurf/mcp.json, .codex/mcp.json servers that autostart, each inventoried exactly once |
.github/workflows/ | run steps, as inventory, including block scalar bodies (`run: |
.githooks/ | hook files |
Every surface above is discovered by one bounded recursive walk, not only at the scan root: a surface that appears inside a subdirectory (for example packages/foo/.claude/settings.json, sub/.vscode/tasks.json, or sub/.github/workflows/ci.yml) is inventoried from a parent scan with its real relative path in the finding, within the discovery bound documented under Limits. A surface file is inventoried exactly once however many discovery paths reach it.
Classification per hook: