/plugin marketplace add ken2403/.claude-paralell-dev-plugin/plugin install pw@claude-parallel-dev-pluginDefined in hooks/hooks.json
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "mkdir -p \"${HOME}/.claude\" 2>/dev/null; echo \"$(date -Iseconds 2>/dev/null || date): Session completed in $(pwd)\" >> \"${HOME}/.claude/session-log.txt\" 2>/dev/null; exit 0"
}
],
"matcher": ".*"
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "FILE_PATH=$(echo '$TOOL_INPUT' | grep -o '\"file_path\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's/.*\"\\([^\"]*\\)\"$/\\1/' 2>/dev/null); PROTECTED='.env .secret credentials private_key id_rsa'; for p in $PROTECTED; do case \"$FILE_PATH\" in *$p*) echo \"BLOCKED: Cannot edit protected file: $FILE_PATH\" >&2; exit 2;; esac; done; exit 0"
}
],
"matcher": "Edit"
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "MSG=\"${CLAUDE_NOTIFICATION_MESSAGE:-Claude notification}\"; if command -v notify-send >/dev/null 2>&1; then notify-send 'Claude Code' \"$MSG\" 2>/dev/null; elif command -v osascript >/dev/null 2>&1; then osascript -e \"display notification \\\"$MSG\\\" with title \\\"Claude Code\\\"\" 2>/dev/null; fi; exit 0"
}
],
"matcher": ".*"
}
]
}{
"riskFlags": {
"touchesBash": false,
"matchAllTools": false,
"touchesFileWrites": true
},
"typeStats": {
"command": 3
},
"eventStats": {
"Stop": 1,
"PreToolUse": 1,
"Notification": 1
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 0,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 3
}
}