npx claudepluginhub psychquant/psychquant-claude-plugins --plugin archive-firstDefined in hooks/hooks.json
Bash[ -f ~/.cache/archive-first/disabled ] && exit 0; COMMAND=$(jq -r '.tool_input.command // empty'); if echo "$COMMAND" | tr ';' '\n' | sed 's/&&/\n/g' | sed 's/||/\n/g' | grep -E '(rm|rmdir|unlink)' | grep -qE 'archived'; then jq -n '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Blocked: destructive command targeting archived/ directory. Use /archive-first:archived-unlock to disable protection first."}}'; else exit 0; fiWrite[ -f ~/.cache/archive-first/disabled ] && exit 0; FILE_PATH=$(jq -r '.tool_input.file_path // empty'); if echo "$FILE_PATH" | grep -qE '/archived/'; then jq -n '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Blocked: cannot write to archived/ directory. Use /archive-first:archived-unlock to disable protection first."}}'; else exit 0; fiEdit[ -f ~/.cache/archive-first/disabled ] && exit 0; FILE_PATH=$(jq -r '.tool_input.file_path // empty'); if echo "$FILE_PATH" | grep -qE '/archived/'; then jq -n '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Blocked: cannot edit files in archived/ directory. Use /archive-first:archived-unlock to disable protection first."}}'; else exit 0; fiPreToolUse hooks blocking dangerous bash ops (recursive rm outside node_modules/dist/etc., git force-push/reset/clean, credential cmds) and writes to .env/pem/keys. Includes move-delete and system-dir guards.