npx claudepluginhub binyamineden/claude-combine --plugin claude-combineDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"stop:check-console-log\" \"scripts/hooks/check-console-log.js\" \"standard,strict\""
}
],
"matcher": "*",
"description": "Check for console.log in modified files after each response"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"stop:session-end\" \"scripts/hooks/session-end.js\" \"minimal,standard,strict\"",
"timeout": 10
}
],
"matcher": "*",
"description": "Persist session state after each response"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"stop:evaluate-session\" \"scripts/hooks/evaluate-session.js\" \"minimal,standard,strict\"",
"timeout": 10
}
],
"matcher": "*",
"description": "Evaluate session for extractable patterns"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"stop:cost-tracker\" \"scripts/hooks/cost-tracker.js\" \"minimal,standard,strict\"",
"timeout": 10
}
],
"matcher": "*",
"description": "Track token and cost metrics per session"
}
],
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"pre:compact\" \"scripts/hooks/pre-compact.js\" \"standard,strict\""
}
],
"matcher": "*",
"description": "Save state before context compaction"
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"pre:bash:git-push-reminder\" \"scripts/hooks/pre-bash-git-push-reminder.js\" \"strict\""
}
],
"matcher": "Bash",
"description": "Reminder before git push to review changes"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"pre:write:doc-file-warning\" \"scripts/hooks/doc-file-warning.js\" \"standard,strict\""
}
],
"matcher": "Write",
"description": "Doc file warning: warn about non-standard documentation files"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"pre:edit-write:suggest-compact\" \"scripts/hooks/suggest-compact.js\" \"standard,strict\""
}
],
"matcher": "Edit|Write",
"description": "Suggest manual compaction at logical intervals"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags-shell.sh\" \"pre:observe\" \"skills/continuous-learning-v2/hooks/observe.sh\" \"standard,strict\"",
"timeout": 10
}
],
"matcher": "*",
"description": "Capture tool use observations for continuous learning"
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"session:end:marker\" \"scripts/hooks/session-end-marker.js\" \"minimal,standard,strict\"",
"timeout": 10
}
],
"matcher": "*",
"description": "Session end lifecycle marker"
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"post:bash:pr-created\" \"scripts/hooks/post-bash-pr-created.js\" \"standard,strict\""
}
],
"matcher": "Bash",
"description": "Log PR URL and provide review command after PR creation"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"post:bash:build-complete\" \"scripts/hooks/post-bash-build-complete.js\" \"standard,strict\"",
"timeout": 30
}
],
"matcher": "Bash",
"description": "Async hook for build analysis (runs in background)"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"post:quality-gate\" \"scripts/hooks/quality-gate.js\" \"standard,strict\"",
"timeout": 30
}
],
"matcher": "Edit|Write|MultiEdit",
"description": "Run quality gate checks after file edits"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"post:edit:format\" \"scripts/hooks/post-edit-format.js\" \"standard,strict\""
}
],
"matcher": "Edit",
"description": "Auto-format JS/TS files after edits (auto-detects Biome or Prettier)"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"post:edit:typecheck\" \"scripts/hooks/post-edit-typecheck.js\" \"standard,strict\""
}
],
"matcher": "Edit",
"description": "TypeScript check after editing .ts/.tsx files"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"post:edit:console-warn\" \"scripts/hooks/post-edit-console-warn.js\" \"standard,strict\""
}
],
"matcher": "Edit",
"description": "Warn about console.log statements after edits"
},
{
"hooks": [
{
"type": "command",
"async": true,
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags-shell.sh\" \"post:observe\" \"skills/continuous-learning-v2/hooks/observe.sh\" \"standard,strict\"",
"timeout": 10
}
],
"matcher": "*",
"description": "Capture tool use results for continuous learning"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"async": false,
"command": "'${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.cmd' session-start"
}
],
"matcher": "startup|resume|clear|compact",
"description": "[superpowers] Inject using-superpowers skill on session start"
},
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js\" \"session:start\" \"scripts/hooks/session-start.js\" \"minimal,standard,strict\""
}
],
"matcher": "*",
"description": "[ECC] Load previous context and detect package manager on new session"
}
]
}"{\"riskFlags\": {\"touchesBash\": true, \"matchAllTools\": true, \"touchesFileWrites\": true}, \"typeStats\": {\"command\": 19}, \"eventStats\": {\"Stop\": 4, \"PreCompact\": 1, \"PreToolUse\": 4, \"SessionEnd\": 1, \"PostToolUse\": 7, \"SessionStart\": 2}, \"originCounts\": {\"absolutePaths\": 0, \"pluginScripts\": 19, \"projectScripts\": 0}, \"timeoutStats\": {\"commandsWithoutTimeout\": 11}}"