# Unify 2.1 Plugin Hooks Intelligent prompt interception system with dual-stage hook pipeline for automatic skill activation and orchestrator routing. ## Overview This plugin provides **three hooks** that work together to enhance Claude Code's capabilities: 1. **skill-activation-prompt** - Detects domain-specific needs and recommends skills 2. **orchestrator-interceptor** - Analyzes complexity and routes to multi-agent orchestration 3. **combined-prompt-hook** - Chains both hooks seamlessly ## Architecture ``` ┌──────────────────────────────────────────────────────────────┐ │ USER PROMPT SUBMITTED │ └────────────────┬─────────────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────┐ │ combined-prompt-hook.py │ ← Single entry point │ (Hook Orchestration Layer) │ └────────────────┬───────────────────┘ │ ┌────────────┴────────────┐ │ │ ▼ ▼ ┌───────────────────┐ ┌──────────────────────┐ │ STAGE 1: SKILLS │ │ STAGE 2: ORCHESTRATOR│ │ skill-activation │ │ orchestrator- │ │ -prompt.py │ │ interceptor.py │ └────────┬──────────┘ └──────────┬───────────┘ │ │ ▼ ▼ ┌─────────────┐ ┌──────────────┐ │ Detects │ │ Analyzes │ │ domain │ │ complexity │ │ skills │ │ & routing │ │ needed │ │ │ └─────────────┘ └──────────────┘ │ │ └────────────┬─────────────┘ │ ▼ ┌──────────────────────┐ │ COMBINED CONTEXT │ │ injected into │ │ Claude's conversation│ └──────────────────────┘ ``` ## Hook 1: Skill Activation **File**: `skill-activation-prompt.py` **Purpose**: Load domain-specific knowledge before execution **Detection Rules** (from `../skills/skill-rules.json`): - Keywords: `["pyspark", "schema", "bronze", "silver", "gold", "etl", "transform"]` - Intent patterns: `["generate.*pyspark", "create.*table", "transform.*data"]` **Example Output**: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎯 SKILL ACTIVATION CHECK ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⚠️ CRITICAL SKILLS (REQUIRED): → schema-reference 📚 RECOMMENDED SKILLS: → pyspark-patterns ACTION: Use Skill tool BEFORE responding ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` ## Hook 2: Orchestrator Interceptor **File**: `orchestrator_interceptor.py` **Purpose**: Analyze complexity and route to optimal execution strategy **Classification Rules**: | Pattern | Reason | Complexity | Action | |---------|--------|------------|--------| | "what is", "explain", <20 words | Simple query | simple_query | Skip orchestration | | Contains "bronze", "silver", "gold" (2+) | Cross-layer work | high_complexity | Multi-agent (6-8) | | "all", "across", "entire", "multiple" | Broad scope | complex_task | Multi-agent (4-6) | | "linting", "formatting" + "all"/"entire" | Quality sweep | high_complexity | Multi-agent (6-8) | | "implement", "create", "build" + >10 words | Implementation | moderate_task | Single agent or 2-3 | **Cost Estimates**: - Simple query: ~500 tokens, $0.002 - Moderate task: ~6,000 tokens, $0.018 - Complex task: ~17,000 tokens, $0.051 - High complexity: ~43,000 tokens, $0.129 **Example Output**: ``` ORCHESTRATOR INTERCEPTION ACTIVE BEFORE responding to the user, you MUST: 1. Launch the master-orchestrator agent 2. USER PROMPT: "Fix linting across bronze, silver, and gold layers" 3. Classification: Cross Layer Work (High Complexity) 4. COST ESTIMATION: - Total estimated: ~43,000 tokens - Approximate cost: $0.129 USD Present execution plan with user approval options. ``` ## Hook 3: Combined Hook **File**: `combined-prompt-hook.py` **Purpose**: Chain both hooks seamlessly in pure Python **Logic**: 1. Read prompt once from stdin 2. Pass to skill-activation-prompt.py → Get skill recommendations (JSON) 3. Pass to orchestrator_interceptor.py → Get complexity analysis (JSON) 4. Parse and merge both JSON outputs 5. Return combined JSON context **Benefits**: - No bash/jq dependencies - Better error handling - Type-safe with proper JSON parsing - Easier to debug and maintain ## Installation ### Option 1: Plugin-Level (Recommended) Update `.claude/settings.json` to use the plugin hooks: ```json { "hooks": { "user-prompt-submit": ".claude/plugins/repos/unify_2_1/hooks/combined-prompt-hook.py" } } ``` ### Option 2: Global Level Copy hooks to global hooks directory: ```bash cp -r .claude/plugins/repos/unify_2_1/hooks/* ~/.claude/hooks/ ``` Then configure in `~/.claude/settings.json`: ```json { "hooks": { "user-prompt-submit": ".claude/hooks/combined-prompt-hook.py" } } ``` **Restart Claude Code** after configuration changes. ## Configuration ### Adjust Skill Detection Edit `../skills/skill-rules.json`: ```json { "skills": { "schema-reference": { "priority": "critical", "promptTriggers": { "keywords": ["schema", "table", "column"], "intentPatterns": ["generate.*table", "create.*etl"] } } } } ``` ### Adjust Orchestrator Classification Edit `orchestrator_interceptor.py`: ```python # Add custom patterns def should_orchestrate(prompt: str) -> tuple[bool, str, str]: # Your custom logic here if "custom_pattern" in prompt.lower(): return True, "custom_reason", "high_complexity" ``` ### Adjust Cost Estimates Edit `orchestrator_interceptor.py`: ```python token_estimates = { "moderate_task": { "orchestrator_analysis": 1000, "agent_execution": 5000, "total_estimated": 6000, "cost_usd": 0.018 }, # Adjust as needed } ``` ## Monitoring & Logs ### Log Location All orchestrator decisions logged to: ``` ~/.claude/hook_logs/orchestrator_hook.log ``` ### View Logs ```bash # Real-time monitoring tail -f ~/.claude/hook_logs/orchestrator_hook.log # Recent entries tail -50 ~/.claude/hook_logs/orchestrator_hook.log # Search classifications grep "Classified as" ~/.claude/hook_logs/orchestrator_hook.log # View cost estimates grep "Cost estimate" ~/.claude/hook_logs/orchestrator_hook.log ``` ### Log Format ``` 2025-11-10 23:00:44 | INFO | ================================================================================ 2025-11-10 23:00:44 | INFO | Hook triggered - Session: abc123 2025-11-10 23:00:44 | INFO | CWD: /workspaces/unify_2_1_dm_niche_rms_build_d10 2025-11-10 23:00:44 | INFO | Prompt: Fix all linting errors across bronze, silver, and gold layers 2025-11-10 23:00:44 | INFO | Classified as CROSS-LAYER WORK (3 layers) 2025-11-10 23:00:44 | INFO | Decision: ORCHESTRATE 2025-11-10 23:00:44 | INFO | Reason: cross_layer_work 2025-11-10 23:00:44 | INFO | Complexity: high_complexity 2025-11-10 23:00:44 | INFO | Cost estimate: $0.129 USD (~43,000 tokens) 2025-11-10 23:00:44 | INFO | Hook completed successfully 2025-11-10 23:00:44 | INFO | ================================================================================ ``` ### Log Rotation - **Rotation**: 10 MB - **Retention**: 30 days - **Location**: `~/.claude/hook_logs/orchestrator_hook.log` ## Examples ### Example 1: Simple Domain Query **Prompt**: "What is TableUtilities?" **Skill Hook**: ``` 📚 RECOMMENDED SKILLS: → pyspark-patterns ``` **Orchestrator Hook**: ``` Handle directly without orchestration overhead. ``` **Result**: Skill loaded for accurate answer, no orchestration overhead ### Example 2: Complex Multi-Layer Task **Prompt**: "Fix linting across bronze, silver, and gold layers" **Skill Hook**: ``` 📚 RECOMMENDED SKILLS: → project-architecture → pyspark-patterns ``` **Orchestrator Hook**: ``` Classification: Cross-layer work (High complexity) Cost: $0.129 USD (~43,000 tokens) Strategy: Multi-agent (6-8 agents in parallel) ``` **Result**: Architecture loaded + Multi-agent orchestration plan presented ### Example 3: PySpark ETL Implementation **Prompt**: "Generate gold table g_x_mg_vehicle_stats from silver_cms and silver_fvms" **Skill Hook**: ``` ⚠️ CRITICAL SKILLS: → schema-reference (exact schemas) 📚 RECOMMENDED SKILLS: → pyspark-patterns (TableUtilities methods) ``` **Orchestrator Hook**: ``` Classification: Implementation task (Moderate) Cost: $0.018 USD (~6,000 tokens) Strategy: Single pyspark-developer agent ``` **Result**: Schemas + patterns loaded, orchestrator plans single-agent execution ## Testing ### Test Skill Hook Only ```bash echo '{"prompt":"Generate PySpark table from bronze_cms","session_id":"test","cwd":"/workspaces"}' | \ python3 .claude/plugins/repos/unify_2_1/hooks/skill-activation-prompt.py | jq ``` ### Test Orchestrator Hook Only ```bash echo '{"session_id":"test","cwd":"/workspaces","prompt":"Fix linting across all layers"}' | \ python3 .claude/plugins/repos/unify_2_1/hooks/orchestrator_interceptor.py | jq ``` ### Test Combined Hook ```bash echo '{"session_id":"test","cwd":"/workspaces","prompt":"Generate gold table from silver data"}' | \ python3 .claude/plugins/repos/unify_2_1/hooks/combined-prompt-hook.py | jq ``` ## Troubleshooting ### Hook Not Running 1. **Verify configuration**: ```bash cat .claude/settings.json | grep -A 2 hooks ``` 2. **Check executability**: ```bash ls -l .claude/plugins/repos/unify_2_1/hooks/*.{sh,py} ``` 3. **Test directly**: ```bash echo '{"prompt":"test"}' | python3 .claude/plugins/repos/unify_2_1/hooks/orchestrator_interceptor.py ``` 4. **Restart Claude Code** (required for settings changes) ### Dependencies Missing ```bash # Check loguru python3 -c "import loguru; print(f'loguru {loguru.__version__}')" # Install if needed pip install loguru # Check jq which jq || sudo apt-get install -y jq ``` ### Hook Errors Hooks are fail-safe - errors don't block prompts: - Error logged to `orchestrator_hook.log` - Prompt passes through unchanged - Claude responds normally Check logs: ```bash tail -50 ~/.claude/hook_logs/orchestrator_hook.log | grep ERROR ``` ## Performance Impact ### Minimal Overhead - **Skill hook**: <50ms (keyword matching, local file read) - **Orchestrator hook**: <100ms (regex patterns, logging) - **Total**: ~150ms added to each prompt ### When Hooks Skip - Simple queries: Both hooks run but skip actions (~100ms) - Domain queries: Skill loads, orchestrator skips (~120ms) - Complex tasks: Both hooks activate fully (~150ms) ### Fail-Safe Design - Hooks never block prompts - Errors are caught and logged - Default action: allow prompt through unchanged ## Integration with Plugin ### Plugin Components Using Hooks - **16 Agents** - All benefit from orchestrator routing - **30 Commands** - Some trigger orchestrator explicitly (`/orchestrate`) - **9 Skills** - Activated automatically by skill hook ### Workflow ``` User types prompt ↓ Combined hook analyzes ↓ Skills loaded (if needed) ↓ Orchestrator invoked (if complex) ↓ Specialized agents launched (if approved) ↓ Results aggregated ↓ User receives comprehensive response ``` ## Files ``` .claude/plugins/repos/unify_2_1/hooks/ ├── README.md # This file ├── combined-prompt-hook.py # Main entry point (chains hooks in Python) ├── orchestrator_interceptor.py # Complexity analysis + routing └── skill-activation-prompt.py # Skill detection (Python implementation) ``` ## Version History **1.0.0** (2025-11-10) - Initial release - Dual-stage hook pipeline - Skill activation + orchestrator routing - Cost estimation - Comprehensive logging ## Support For issues: 1. Check logs: `~/.claude/hook_logs/orchestrator_hook.log` 2. Test hooks individually (see Testing section) 3. Verify dependencies (Python, loguru) 4. Review this README ## License MIT License (same as parent plugin)