Hook inventory
Skill hoangsonww/Claude-Code-Agent-Monitor/plugins/ccam-config/skills/hook-inventory
π A real-time monitoring dashboard for Claude Code, built with SQLite3, Node.js, Express, React, Vite, TailwindCSS, and WebSockets. It tracks sessions, agent activity, tool usage, and subagent orchestration, providing live analytics, a Kanban status board, status notifications, a cute buddy, and an interactive web UI/MacOS/Windows native app.
npx -y skills add hoangsonww/Claude-Code-Agent-Monitor --skill hook-inventoryAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Inventory hooks across the user, project, and project-local settings plus the ~/.claude/hooks scripts directory β read through the Agent Monitor Config Explorer API β and flag hooks that POST to the network or run arbitrary commands. Reads /api/cc-config/hooks and /api/cc-config/hook-scripts. Use when auditing hook safety.
SKILL.md
3.1 KB, as published. Nobody here has run it
Hook Inventory
Catalogue every Claude Code hook the user has configured and assess its safety β
read through the Agent Monitor dashboard at http://localhost:4820.
Input
The user provides: $ARGUMENTS
This may be:
- empty β inventory all hooks across every scope (default).
- an event name (
PreToolUse,PostToolUse,Stop,SubagentStop,SessionStart,SessionEnd,UserPromptSubmit,Notification,PreCompact) β restrict to that event. - "scripts" β focus on the
~/.claude/hookshandler scripts dir.
Data Sources
| Endpoint | Returns |
|---|---|
GET /api/cc-config/hooks | { items:[{ scope:"user"|"project"|"project-local", file, exists, hooks:{ <Event>:[{ matcher, type, command, timeout }] } }] } |
GET /api/cc-config/hook-scripts | { dir, items:[{ name, file, size, mtime }] } β the handler scripts under ~/.claude/hooks/ |
Report Sections
1. Configured hooks by scope
From /hooks, flatten each source into (scope, file, Event, matcher, type, command, timeout). Group by scope (user, project, project-local). Show the
event, matcher, hook type, and the raw command. Note which file each came
from so the user can edit the right one.
2. Hook scripts on disk
From /hook-scripts, list each file in ~/.claude/hooks/ with name, size
(KB), and mtime. Cross-reference: flag scripts referenced by a hook command
but missing from disk, and scripts on disk that no configured hook calls
(orphaned).
3. Safety flags
For every type: "command" entry escalate:
- Network egress (P0) β the command contains
curl,wget,http,https,nc, or pipes output off-box. Print the destination if visible. - Arbitrary execution (P1) β pipes to
sh/bash, evaluates downloaded content, or runs an unpinned interpreter on attacker-influenceable input. - No timeout (P2) β a
commandhook withtimeout: null; it can hang a session indefinitely. - Broad matcher (P3) β
matcher: "*"or empty on a destructive command.
Output
- Section 1 as a table (
Scope | Event | Matcher | Type | Command | Timeout). - Section 3 as a findings table (
Hook | Risk | Severity | Detail) with a one-line verdict first (SAFE / REVIEW NEEDED / RISKY HOOKS). - Print raw commands verbatim β do not paraphrase a command you are flagging.
- Cite only fields the API returned β never fabricate hooks or commands.
- Note: hooks live inside settings.json and are read-only via the Config
Explorer; edit them in the
filenamed by the source, then reinstall with the dashboard's hook setup if needed. - If the dashboard is unreachable at
http://localhost:4820, say so and tell the user to start it withnpm startfrom the repo root.