npx claudepluginhub kylesnowschwartz/claude-code-hero --plugin claude-code-heroDefined in hooks/hooks.json
{
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/level-banner.sh",
"timeout": 5
}
],
"matcher": "Skill"
},
{
"hooks": [
{
"if": "Write(*.claude/hero-journal.md)",
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/warden-stirs.sh",
"timeout": 5,
"statusMessage": "The Warden watches..."
}
],
"matcher": "Write"
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "pkill -f 'afplay.*assets/audio' 2>/dev/null; pkill -f 'play-music.sh' 2>/dev/null; exit 0",
"timeout": 2
}
]
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/preflight.sh",
"timeout": 10
}
],
"matcher": "startup"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/music-intercept.sh",
"timeout": 5
}
]
}
]
}"{\"riskFlags\": {\"touchesBash\": false, \"matchAllTools\": false, \"touchesFileWrites\": true}, \"typeStats\": {\"command\": 5}, \"eventStats\": {\"PreToolUse\": 2, \"SessionEnd\": 1, \"SessionStart\": 1, \"UserPromptSubmit\": 1}, \"originCounts\": {\"absolutePaths\": 0, \"pluginScripts\": 4, \"projectScripts\": 0}, \"timeoutStats\": {\"commandsWithoutTimeout\": 0}}"