# @claude-flow/hooks [![npm version](https://img.shields.io/npm/v/@claude-flow/hooks.svg)](https://www.npmjs.com/package/@claude-flow/hooks) [![npm downloads](https://img.shields.io/npm/dm/@claude-flow/hooks.svg)](https://www.npmjs.com/package/@claude-flow/hooks) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/TypeScript-5.3+-blue.svg)](https://www.typescriptlang.org/) [![Node.js](https://img.shields.io/badge/Node.js-20+-green.svg)](https://nodejs.org/) > Event-driven lifecycle hooks with ReasoningBank learning integration for Claude Flow V3 The `@claude-flow/hooks` package provides a comprehensive hooks system for intercepting and extending Claude Flow operations. It enables intelligent task routing, pattern learning, background metrics collection, and real-time statusline integration. ## Features - 🎣 **Hook Registry** - Priority-based hook registration with filtering and management - ⚑ **Hook Executor** - Timeout handling, error recovery, and result aggregation - πŸ€– **Background Daemons** - Metrics collection, swarm monitoring, pattern learning - πŸ‘· **Background Workers** - 12 specialized workers for analysis, optimization, and automation - πŸ“Š **Statusline Integration** - Real-time status display for Claude Code - 🧠 **ReasoningBank Learning** - Intelligent task routing based on learned patterns - πŸ”§ **MCP Tools** - 13 MCP tools for programmatic hooks access - πŸ”„ **V2 Compatibility** - Backward compatible with V2 hook commands ## Installation ```bash # Using npm npm install @claude-flow/hooks # Using pnpm pnpm add @claude-flow/hooks # Using yarn yarn add @claude-flow/hooks ``` ## Quick Start ### Basic Usage ```typescript import { HookRegistry, HookExecutor, HookEvent, HookPriority, } from '@claude-flow/hooks'; // Create registry and executor const registry = new HookRegistry(); const executor = new HookExecutor(registry); // Register a pre-edit hook registry.register( HookEvent.PreEdit, async (context) => { console.log(`Editing file: ${context.file?.path}`); return { success: true }; }, HookPriority.Normal, { name: 'log-edits' } ); // Execute hooks const result = await executor.preEdit('src/app.ts', 'modify'); console.log(`Hooks executed: ${result.hooksExecuted}`); ``` ### Initialize with Daemons ```typescript import { initializeHooks } from '@claude-flow/hooks'; // Initialize full system with background daemons const { registry, executor, statusline } = await initializeHooks({ enableDaemons: true, enableStatusline: true, }); // Generate statusline console.log(statusline.generateStatusline()); ``` ### Using MCP Tools ```typescript import { hooksMCPTools, getHooksTool } from '@claude-flow/hooks'; // Get specific tool const routeTool = getHooksTool('hooks/route'); // Execute routing const result = await routeTool.handler({ task: 'Implement user authentication', includeExplanation: true, }); console.log(`Recommended agent: ${result.recommendedAgent}`); console.log(`Confidence: ${result.confidence}%`); ``` ## CLI Commands ### Hooks Daemon Manage background daemon processes for metrics and learning. ```bash # Start daemon with default 60s interval hooks-daemon start # Start with custom interval (30 seconds) hooks-daemon start 30 # Stop daemon hooks-daemon stop # Check status hooks-daemon status # Run pattern consolidation hooks-daemon consolidate # Export learned patterns hooks-daemon export json # Rebuild HNSW index hooks-daemon rebuild-index # Notify activity (for hook integration) hooks-daemon notify-activity ``` ### Statusline Generate statusline output for Claude Code integration. ```bash # Display formatted statusline statusline # Output JSON data statusline --json # Compact JSON (single line) statusline --compact # Show help statusline --help ``` **Example Output:** ``` β–Š Claude Flow V3 ● agentic-flow@alpha β”‚ βŽ‡ v3 ───────────────────────────────────────────────────── πŸ—οΈ DDD Domains [●●●●●] 5/5 ⚑ 1.0x β†’ 2.49x-7.47x πŸ€– Swarm Agents β—‰ [ 5/15] 🟒 CVE 3/3 πŸ’Ύ 156 patterns πŸ”§ Architecture DDD ●93% β”‚ Security ●CLEAN β”‚ Hooks ●ACTIVE πŸ“Š Routing 89% accuracy β”‚ Avg 4.2ms β”‚ 1547 operations ───────────────────────────────────────────────────── ``` ## Hook Events | Event | Description | |-------|-------------| | `PreToolUse` | Before any tool execution | | `PostToolUse` | After tool execution completes | | `PreEdit` | Before file modification | | `PostEdit` | After file modification | | `PreRead` | Before file read | | `PostRead` | After file read | | `PreCommand` | Before shell command execution | | `PostCommand` | After shell command completes | | `PreTask` | Before task starts | | `PostTask` | After task completes | | `TaskProgress` | During task execution | | `SessionStart` | When session begins | | `SessionEnd` | When session ends | | `SessionRestore` | When restoring previous session | | `AgentSpawn` | When agent is spawned | | `AgentTerminate` | When agent terminates | | `PreRoute` | Before task routing | | `PostRoute` | After routing decision | | `PatternLearned` | When new pattern is learned | | `PatternConsolidated` | When patterns are consolidated | ## Hook Priorities | Priority | Value | Use Case | |----------|-------|----------| | `Critical` | 1000 | Security validation, must run first | | `High` | 100 | Pre-processing, preparation | | `Normal` | 50 | Standard hooks | | `Low` | 10 | Logging, metrics | | `Background` | 1 | Async operations, runs last | ## Background Workers The hooks system includes 12 specialized background workers that can be triggered automatically or manually dispatched. ### Available Workers | Worker | Priority | Est. Time | Description | |--------|----------|-----------|-------------| | `ultralearn` | normal | 60s | Deep knowledge acquisition and learning | | `optimize` | high | 30s | Performance optimization and tuning | | `consolidate` | low | 20s | Memory consolidation and cleanup | | `predict` | normal | 15s | Predictive preloading and anticipation | | `audit` | critical | 45s | Security analysis and vulnerability scanning | | `map` | normal | 30s | Codebase mapping and architecture analysis | | `preload` | low | 10s | Resource preloading and cache warming | | `deepdive` | normal | 60s | Deep code analysis and examination | | `document` | normal | 45s | Auto-documentation generation | | `refactor` | normal | 30s | Code refactoring suggestions | | `benchmark` | normal | 60s | Performance benchmarking | | `testgaps` | normal | 30s | Test coverage analysis | ### Worker CLI Commands ```bash # List all available workers claude-flow hooks worker list # Detect triggers from prompt text claude-flow hooks worker detect --prompt "optimize performance" # Auto-dispatch when triggers match (confidence β‰₯0.6) claude-flow hooks worker detect --prompt "deep dive into auth" --auto-dispatch --min-confidence 0.6 # Manually dispatch a worker claude-flow hooks worker dispatch --trigger refactor --context "auth module" # Check worker status claude-flow hooks worker status # Cancel a running worker claude-flow hooks worker cancel --id worker_refactor_1_abc123 ``` ### Performance Targets | Metric | Target | |--------|--------| | Trigger detection | <5ms | | Worker spawn | <50ms | | Max concurrent | 10 | ### UserPromptSubmit Integration Workers are automatically triggered via the `UserPromptSubmit` hook when prompt patterns match worker triggers with confidence β‰₯0.6. Add this to your Claude settings: ```json { "hooks": { "UserPromptSubmit": [{ "matcher": ".*", "hooks": [{ "type": "command", "timeout": 6000, "command": "claude-flow hooks worker detect --prompt \"$USER_PROMPT\" --auto-dispatch --min-confidence 0.6" }] }] } } ``` ## MCP Tools | Tool | Description | |------|-------------| | `hooks/pre-edit` | Get context and suggestions before file edit | | `hooks/post-edit` | Record edit outcome for learning | | `hooks/route` | Route task to optimal agent | | `hooks/metrics` | Query learning metrics | | `hooks/pre-command` | Assess command risk | | `hooks/post-command` | Record command outcome | | `hooks/daemon-status` | Get daemon status | | `hooks/statusline` | Get statusline data | | `hooks/worker-list` | List all 12 background workers | | `hooks/worker-dispatch` | Dispatch a worker by trigger type | | `hooks/worker-status` | Get status of running workers | | `hooks/worker-detect` | Detect worker triggers from prompt text | | `hooks/worker-cancel` | Cancel a running worker | ## API Reference ### HookRegistry ```typescript class HookRegistry { // Register a hook register( event: HookEvent, handler: HookHandler, priority: HookPriority, options?: HookRegistrationOptions ): string; // Unregister a hook unregister(hookId: string): boolean; // Get hooks for event getForEvent(event: HookEvent, enabledOnly?: boolean): HookEntry[]; // Enable/disable hooks enable(hookId: string): boolean; disable(hookId: string): boolean; // List hooks with filtering list(filter?: HookListFilter): HookEntry[]; // Get statistics getStats(): HookRegistryStats; } ``` ### HookExecutor ```typescript class HookExecutor { // Execute hooks for any event execute( event: HookEvent, context: Partial>, options?: HookExecutionOptions ): Promise; // Convenience methods preToolUse(toolName: string, parameters: Record): Promise; postToolUse(toolName: string, parameters: Record, duration: number): Promise; preEdit(filePath: string, operation: 'create' | 'modify' | 'delete'): Promise; postEdit(filePath: string, operation: 'create' | 'modify' | 'delete', duration: number): Promise; preCommand(command: string, workingDirectory?: string): Promise; postCommand(command: string, exitCode: number, output?: string, error?: string): Promise; sessionStart(sessionId: string): Promise; sessionEnd(sessionId: string): Promise; agentSpawn(agentId: string, agentType: string): Promise; agentTerminate(agentId: string, agentType: string, status: string): Promise; } ``` ### DaemonManager ```typescript class DaemonManager { // Register and manage daemons register(config: DaemonConfig, task: () => Promise): void; start(name: string): Promise; stop(name: string): Promise; restart(name: string): Promise; // Bulk operations startAll(): Promise; stopAll(): Promise; // Status getState(name: string): DaemonState | undefined; getAllStates(): DaemonState[]; isRunning(name: string): boolean; } ``` ### StatuslineGenerator ```typescript class StatuslineGenerator { // Register data sources registerDataSources(sources: StatuslineDataSources): void; // Generate output generateData(): StatuslineData; generateStatusline(): string; generateJSON(): string; generateCompactJSON(): string; // Configuration updateConfig(config: Partial): void; invalidateCache(): void; } ``` ## Environment Variables | Variable | Description | Default | |----------|-------------|---------| | `CLAUDE_FLOW_HOOK_TIMEOUT` | Hook execution timeout (ms) | `5000` | | `CLAUDE_FLOW_REASONINGBANK_ENABLED` | Enable ReasoningBank | `true` | | `CLAUDE_FLOW_HOOKS_NAMESPACE` | Learning namespace | `hooks-learning` | | `CLAUDE_FLOW_HOOKS_LOG_LEVEL` | Logging level | `info` | | `CLAUDE_FLOW_SHOW_HOOKS_METRICS` | Show hooks in statusline | `true` | | `CLAUDE_FLOW_SHOW_SWARM_ACTIVITY` | Show swarm in statusline | `true` | | `CLAUDE_FLOW_SHOW_PERFORMANCE` | Show performance targets | `true` | ## Integration with Claude Code Add to your Claude settings (`~/.claude/settings.json`): ```json { "hooks": { "SessionStart": [{ "hooks": [{ "type": "command", "timeout": 5000, "command": "hooks-daemon start" }] }], "SessionEnd": [{ "hooks": [{ "type": "command", "timeout": 3000, "command": "hooks-daemon stop" }] }], "PreToolUse": [{ "hooks": [{ "type": "command", "timeout": 100, "command": "hooks-daemon notify-activity" }] }] }, "statusLine": { "type": "command", "command": "statusline" } } ``` ## Related Packages - [@claude-flow/shared](../shared) - Shared utilities and types - [@claude-flow/neural](../neural) - Neural network and SONA learning - [@claude-flow/swarm](../swarm) - Multi-agent coordination - [@claude-flow/memory](../memory) - AgentDB memory system ## License MIT Β© [Claude Flow Team](https://github.com/ruvnet/claude-flow)