npx claudepluginhub chkim-su/serena-refactor --plugin serena-refactorDefined in ./hooks/hooks.json
TaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"serena-refactor-executor"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 🔧 REFACTOR EXECUTOR - Workflow Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && BLOCKED=0 && if [ ! -f .refactor-analysis-done ]; then echo ' ❌ BLOCKED: Analysis not completed'; echo ' → Run /serena-refactor:analyze first'; BLOCKED=1; else echo ' ✓ Analysis completed'; fi && if [ ! -f .refactor-plan-approved ]; then echo ' ❌ BLOCKED: Plan not approved'; echo ' → Run /serena-refactor:plan and approve'; BLOCKED=1; else echo ' ✓ Plan approved'; fi && git rev-parse --git-dir > /dev/null 2>&1 && (git diff --quiet HEAD 2>/dev/null && echo ' ✓ Git clean' || echo ' ⚠️ Uncommitted changes - git stash recommended') && echo '' && if [ $BLOCKED -eq 1 ]; then echo ' 🚫 Execution blocked due to workflow violation.' && echo '════════════════════════════════════════════════════════════' && exit 1; else echo ' ✓ All conditions met - Execution allowed' && echo '════════════════════════════════════════════════════════════'; fi10msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"refactor-auditor"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 🔍 AUDIT GATE - Pre-Audit Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && if [ ! -f .refactor-execution-done ]; then echo ' ⚠️ No refactoring execution record'; echo ' Audit will proceed, but verify changes exist.'; else echo ' ✓ Refactoring execution confirmed'; fi && echo '' && echo ' Audit items:' && echo ' • Incomplete patterns (TODO/FIXME)' && echo ' • Reference integrity' && echo ' • SOLID improvement' && echo ' • Test passing' && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"refena-planner"* ]] && [[ "$SUBAGENT" != *"refactor-planner"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 📋 PLAN GATE - Pre-Planning Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && if [ ! -f .refactor-analysis-done ]; then echo ' ⚠️ WARNING: Planning without analysis'; echo ' → Recommended: Run /serena-refactor:analyze first'; else echo ' ✓ Analysis confirmed'; fi && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"duplicate-detector"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 🔎 DUPLICATE DETECTION - Starting Detection' && echo '════════════════════════════════════════════════════════════' && echo '' && echo ' Detection targets:' && echo ' • Clone code (Type 1-3)' && echo ' • Role duplication (similar classes/functions)' && echo ' • Variable/constant duplication' && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"serena-solid-analyzer"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 📊 SOLID ANALYSIS - Starting Analysis' && echo '════════════════════════════════════════════════════════════' && echo '' && echo ' Analysis items:' && echo ' • SRP (Single Responsibility)' && echo ' • OCP (Open-Closed)' && echo ' • LSP (Liskov Substitution)' && echo ' • ISP (Interface Segregation)' && echo ' • DIP (Dependency Inversion)' && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"knowledge-extractor"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 📚 KNOWLEDGE EXTRACTION - Starting Extraction' && echo '════════════════════════════════════════════════════════════' && echo '' && echo ' Extraction targets:' && echo ' • Project structure and modules' && echo ' • Symbol definitions and relationships' && echo ' • Design patterns and conventions' && echo ' • Dependency graph' && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"feature-planner"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 📋 FEATURE PLANNING - Pre-Planning Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && if [ ! -f .inject-knowledge-extracted ]; then echo ' ⚠️ WARNING: Planning without knowledge extraction'; echo ' → Recommended: Run /serena-refactor:extract first'; else echo ' ✓ Knowledge extraction confirmed'; fi && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"code-injector"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 💉 CODE INJECTION - Workflow Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && BLOCKED=0 && if [ ! -f .inject-plan-approved ]; then echo ' ❌ BLOCKED: Feature plan not approved'; echo ' → Run feature-planner and approve plan first'; BLOCKED=1; else echo ' ✓ Feature plan approved'; fi && git rev-parse --git-dir > /dev/null 2>&1 && (git diff --quiet HEAD 2>/dev/null && echo ' ✓ Git clean' || echo ' ⚠️ Uncommitted changes - git stash recommended') && echo '' && if [ $BLOCKED -eq 1 ]; then echo ' 🚫 Injection blocked due to workflow violation.' && echo '════════════════════════════════════════════════════════════' && exit 1; else echo ' ✓ All conditions met - Injection allowed' && echo '════════════════════════════════════════════════════════════'; fi10msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"e2e-test-runner"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 🧪 E2E TEST RUNNER - Pre-Test Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && echo ' Checking environment:' && echo '' && if command -v curl &>/dev/null; then (curl -s -o /dev/null -w '' http://localhost:3000 2>/dev/null && echo ' ✓ Dev server running on :3000') || (curl -s -o /dev/null -w '' http://localhost:8000 2>/dev/null && echo ' ✓ Dev server running on :8000') || echo ' ⚠️ No dev server detected on common ports'; else echo ' ⚠️ curl not available for server check'; fi && echo '' && echo ' Test types available:' && echo ' • UI E2E (Playwright browser automation)' && echo ' • API Sequence (HTTP request flows)' && echo ' • Integration (UI + API combined)' && echo ' • Scenario-based (custom user journeys)' && echo '' && echo ' ⚠️ Note: Tests may consume real resources!' && echo '════════════════════════════════════════════════════════════'10msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"debug-explorer"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 🔍 DEBUG EXPLORER - Starting Investigation' && echo '════════════════════════════════════════════════════════════' && echo '' && FOCUS=$(echo "$INPUT" | jq -r '.tool_input.prompt // ""' | grep -oE 'Focus: [a-z_]+' | head -1 | cut -d' ' -f2); echo " Focus: ${FOCUS:-unknown}" && echo '' && echo ' Investigation targets:' && echo ' • Execution path tracing' && echo ' • Data flow analysis' && echo ' • Dependency mapping' && echo ' • Symbol-level inspection' && echo '' && echo ' Using Serena MCP for precise analysis' && echo '════════════════════════════════════════════════════════════'5msTaskINPUT=$(cat); SUBAGENT=$(echo "$INPUT" | jq -r '.tool_input.subagent_type // ""'); [[ "$SUBAGENT" != *"debug-strategist"* ]] && exit 0; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 📋 DEBUG STRATEGIST - Workflow Verification' && echo '════════════════════════════════════════════════════════════' && echo '' && BLOCKED=0 && if [ ! -f .debug-exploration-done ]; then echo ' ❌ BLOCKED: Debug exploration not completed'; echo ' → Run debug-explorer agents first'; BLOCKED=1; else echo ' ✓ Debug exploration completed'; fi && APPROACH=$(echo "$INPUT" | jq -r '.tool_input.prompt // ""' | grep -oE 'Approach: [a-z]+' | head -1 | cut -d' ' -f2); echo " Approach: ${APPROACH:-unknown}" && echo '' && if [ $BLOCKED -eq 1 ]; then echo ' 🚫 Strategy design blocked due to workflow violation.' && echo '════════════════════════════════════════════════════════════' && exit 1; else echo ' Strategy design:' && echo ' • Risk assessment' && echo ' • Side effect analysis' && echo ' • Implementation blueprint' && echo ' • SOLID compliance check' && echo '════' || true15msMCP_FILE="$HOME/.claude/mcp_servers.json"; echo '' && echo '════════════════════════════════════════════════════════════' && echo ' 🔧 Serena Refactor Plugin - MCP Configuration Check' && echo '════════════════════════════════════════════════════════════' && echo '' && if ! command -v jq &>/dev/null; then echo ' ⚠️ jq not installed - manual MCP setup required' && echo ' Add to ~/.claude/mcp_servers.json:' && echo ' "serena": {"command": "uvx", "args": ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server"]}' && echo '════════════════════════════════════════════════════════════' && exit 0; fi && if ! command -v uvx &>/dev/null; then echo ' ⚠️ uvx not installed - Serena requires uv' && echo ' Install: curl -LsSf https://astral.sh/uv/install.sh | sh' && echo '════════════════════════════════════════════════════════════' && exit 0; fi && [ ! -f "$MCP_FILE" ] && mkdir -p "$HOME/.claude" && echo '{"mcpServers":{}}' > "$MCP_FILE"; if jq -e '.mcpServers.serena' "$MCP_FILE" >/dev/null 2>&1; then echo ' ✓ Serena MCP configured' && echo '════════════════════════════════════════════════════════════' && exit 0; fi && echo ' ⚙️ Adding Serena MCP...' && jq '.mcpServers.serena = {"command": "uvx", "args": ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server"]}' "$MCP_FILE" > "${MCP_FILE}.tmp" && mv "${MCP_FILE}.tmp" "$MCP_FILE" && echo ' ✅ Serena MCP auto-configured!' && echo '' && echo ' ⚠️ RESTART CLAUDE CODE for changes to take effect' && echo '════════════════════════════════════════════════════════════'15msEnforces delegation via Node script on PreToolUse for Agent|Task tools, potentially blocking them. Sets up HUD with Node script on every SessionStart. No bash or file writes.