npx claudepluginhub duongdev/ccpm --plugin ccpmDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/work-loop-stop-hook.sh",
"timeout": 3000,
"description": "Work loop: Intercepts exit to continue iterative implementation (ralph-wiggum pattern)"
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/guard-commit.cjs",
"timeout": 5000,
"description": "Guard commit: Warns about uncommitted changes when session ends to prevent work loss"
}
]
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/scout-block.cjs",
"timeout": 1000,
"description": "Scout block: Pre-filters tool calls to avoid wasted tokens (30-50% savings)"
}
],
"matcher": "Read|WebFetch|Task"
},
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/delegation-enforcer.cjs",
"timeout": 500,
"description": "Delegation enforcer: Warns when Edit/Write used during /ccpm:work AI mode"
}
],
"matcher": "Edit|Write"
},
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/context-capture.cjs",
"timeout": 500,
"description": "Context capture: Auto-logs file changes, task completions, and decisions for subagent context"
}
],
"matcher": "Write|Edit|Task|Bash"
},
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/linear-param-fixer.sh",
"timeout": 2000,
"description": "Linear parameter fixer: Catches issueId vs id mistakes before they fail"
}
],
"matcher": "mcp__agent-mcp-gateway__execute_tool"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/session-init.cjs",
"timeout": 5000,
"description": "Initializes CCPM session: detects project, git state, CLAUDE.md files, persists state"
}
],
"matcher": "startup|resume|clear|compact"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/smart-agent-selector.sh",
"timeout": 5000,
"description": "Smart agent selector: Dynamically discovers and scores all available agents"
}
]
}
]
}"{\"riskFlags\": {\"touchesBash\": true, \"matchAllTools\": false, \"touchesFileWrites\": true}, \"typeStats\": {\"command\": 8}, \"eventStats\": {\"Stop\": 2, \"PreToolUse\": 4, \"SessionStart\": 1, \"UserPromptSubmit\": 1}, \"originCounts\": {\"absolutePaths\": 0, \"pluginScripts\": 8, \"projectScripts\": 0}, \"timeoutStats\": {\"commandsWithoutTimeout\": 0}}"