Executes automated commands before and after tool usage, during sessions, and on notifications for streamlined development workflows.
npx claudepluginhub michael-harris/devteamDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" stop-hook",
"description": "Block exit unless EXIT_SIGNAL:true or quality gates pass"
}
]
}
],
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" pre-compact",
"description": "Save state to SQLite before context compaction"
}
]
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" pre-tool-use-hook",
"description": "Validate tool calls, check iteration limits, circuit breaker"
},
{
"type": "prompt",
"prompt": "The agent is about to modify a file. Check if this modification is within the current task scope. The task scope should be defined in the agent's prompt context. If the file being modified is clearly unrelated to the task (e.g., modifying auth code when the task is about UI styling), return ok:false with a reason. If it's reasonable, return ok:true.",
"description": "LLM-based scope pre-check — catches obvious scope violations before they happen"
}
],
"matcher": "Edit|Write"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" pre-tool-use-hook",
"description": "Validate bash commands, check for dangerous operations"
}
],
"matcher": "Bash"
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" session-end",
"description": "Finalize session, calculate costs"
}
]
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" post-tool-use-hook",
"description": "Detect quality gate results from bash output"
}
],
"matcher": "Bash"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" post-tool-use-hook",
"description": "Track file modifications in state"
}
],
"matcher": "Edit|Write"
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" persistence-hook",
"description": "Detect and prevent abandonment during autonomous execution"
}
],
"matcher": "idle_prompt"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.js\" session-start",
"description": "Initialize or resume session in SQLite"
}
],
"matcher": "startup|resume"
}
],
"SubagentStop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/log-event.js\" agent_stop orchestration \"Subagent completed\"",
"description": "Track agent completion for cost tracking and metrics"
}
]
}
],
"SubagentStart": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/log-event.js\" agent_start orchestration \"Subagent started\"",
"description": "Track agent start time for cost tracking"
}
]
}
]
}{
"riskFlags": {
"touchesBash": true,
"matchAllTools": false,
"touchesFileWrites": true
},
"typeStats": {
"prompt": 1,
"command": 11
},
"eventStats": {
"Stop": 1,
"PreCompact": 1,
"PreToolUse": 3,
"SessionEnd": 1,
"PostToolUse": 2,
"Notification": 1,
"SessionStart": 1,
"SubagentStop": 1,
"SubagentStart": 1
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 11,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 11
}
}