
Research
Shai-Hulud Descends to Hades: Miasma Worm Campaign Spreads with New PyPI Wave
Socket found 37 malicious PyPI wheels that abuse Python startup hooks to launch a Bun-powered credential stealer tied to Mini Shai-Hulud/Miasma.
@claude-flow/hooks
Advanced tools
V3 Hooks System - Event-driven lifecycle hooks with ReasoningBank learning integration
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
FAQs
V3 Hooks System - Event-driven lifecycle hooks with ReasoningBank learning integration
We found that @claude-flow/hooks demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Socket found 37 malicious PyPI wheels that abuse Python startup hooks to launch a Bun-powered credential stealer tied to Mini Shai-Hulud/Miasma.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.