v3/@claude-flow/hooks/README.md
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.
# Using npm
npm install @claude-flow/hooks
# Using pnpm
pnpm add @claude-flow/hooks
# Using yarn
yarn add @claude-flow/hooks
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}`);
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());
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}%`);
Manage background daemon processes for metrics and learning.
# 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
Generate statusline output for Claude Code integration.
# 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
βββββββββββββββββββββββββββββββββββββββββββββββββββββ
| 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 |
| 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 |
The hooks system includes 12 specialized background workers that can be triggered automatically or manually dispatched.
| 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 |
# 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
| Metric | Target |
|---|---|
| Trigger detection | <5ms |
| Worker spawn | <50ms |
| Max concurrent | 10 |
Workers are automatically triggered via the UserPromptSubmit hook when prompt patterns match worker triggers with confidence β₯0.6. Add this to your Claude settings:
{
"hooks": {
"UserPromptSubmit": [{
"matcher": ".*",
"hooks": [{
"type": "command",
"timeout": 6000,
"command": "claude-flow hooks worker detect --prompt \"$USER_PROMPT\" --auto-dispatch --min-confidence 0.6"
}]
}]
}
}
| 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 |
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;
}
class HookExecutor {
// Execute hooks for any event
execute<T>(
event: HookEvent,
context: Partial<HookContext<T>>,
options?: HookExecutionOptions
): Promise<HookExecutionResult>;
// Convenience methods
preToolUse(toolName: string, parameters: Record<string, unknown>): Promise<HookExecutionResult>;
postToolUse(toolName: string, parameters: Record<string, unknown>, duration: number): Promise<HookExecutionResult>;
preEdit(filePath: string, operation: 'create' | 'modify' | 'delete'): Promise<HookExecutionResult>;
postEdit(filePath: string, operation: 'create' | 'modify' | 'delete', duration: number): Promise<HookExecutionResult>;
preCommand(command: string, workingDirectory?: string): Promise<HookExecutionResult>;
postCommand(command: string, exitCode: number, output?: string, error?: string): Promise<HookExecutionResult>;
sessionStart(sessionId: string): Promise<HookExecutionResult>;
sessionEnd(sessionId: string): Promise<HookExecutionResult>;
agentSpawn(agentId: string, agentType: string): Promise<HookExecutionResult>;
agentTerminate(agentId: string, agentType: string, status: string): Promise<HookExecutionResult>;
}
class DaemonManager {
// Register and manage daemons
register(config: DaemonConfig, task: () => Promise<void>): void;
start(name: string): Promise<void>;
stop(name: string): Promise<void>;
restart(name: string): Promise<void>;
// Bulk operations
startAll(): Promise<void>;
stopAll(): Promise<void>;
// Status
getState(name: string): DaemonState | undefined;
getAllStates(): DaemonState[];
isRunning(name: string): boolean;
}
class StatuslineGenerator {
// Register data sources
registerDataSources(sources: StatuslineDataSources): void;
// Generate output
generateData(): StatuslineData;
generateStatusline(): string;
generateJSON(): string;
generateCompactJSON(): string;
// Configuration
updateConfig(config: Partial<StatuslineConfig>): void;
invalidateCache(): void;
}
| 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 |
Add to your Claude settings (~/.claude/settings.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"
}
}
MIT Β© Claude Flow Team