npx claudepluginhub sleachga/dev-ship --plugin dev-shipDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/notify.js\""
}
]
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/narrator-hook.sh\""
}
]
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/check-update.js\""
},
{
"type": "command",
"command": "node -e \"try { require('fs').writeFileSync(require('path').join(require('os').homedir(), '.narrator', 'context.json'), '[]') } catch {}\""
},
{
"type": "command",
"command": "node -e \"const fs=require('fs'),p=require('path'),src=p.join(process.env.CLAUDE_PLUGIN_ROOT,'scripts'),dst=p.join(require('os').homedir(),'.dev-ship','scripts');try{fs.mkdirSync(dst,{recursive:true});for(const f of['narrator-daemon.js','narrator-config-default.json'])fs.copyFileSync(p.join(src,f),p.join(dst,f))}catch{}\""
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/narrator-prompt-hook.sh\""
}
]
}
]
}"Initializes narrator daemon on SessionStart via node scripts (update check, context.json init, daemon/config copy to home); runs bash narrator hooks on UserPromptSubmit and PostToolUse; node notify on Stop."