tags:
- domain/skills
- artifact/workflow
- source/hooks
<!-- Parent: ../AGENTS.md --> <!-- Generated: 2026-01-28 | Updated: 2026-01-31 -->
hooks
31 event-driven hooks that power execution modes and behaviors.
Purpose
Hooks intercept Claude Code events to enable:
- Execution modes: autopilot, ultrawork, ralph, ultrapilot, swarm, pipeline (mode-registry)
- Validation: thinking blocks, empty messages, comments
- Recovery: edit errors, session recovery, context window
- Enhancement: rules injection, directory READMEs, notepad
- Detection: keywords, think mode, slash commands
Key Files
| File | Description |
|---|---|
index.ts | Re-exports all hooks |
bridge.ts | Shell script entry point - processHook() routes events to handlers |
Subdirectories
Execution Mode Hooks
| Directory | Purpose | Trigger |
|---|---|---|
autopilot/ | Full autonomous execution | "autopilot", "build me" |
ultrawork/ | Maximum parallel execution | "ulw", "ultrawork" |
ralph/ | Persistence until verified | "ralph", "don't stop" |
ultrapilot/ | Parallel autopilot with file ownership | "ultrapilot" |
swarm/ | N coordinated agents with task claiming | "swarm N agents" |
ultraqa/ | QA cycling until goal met | test failures |
mode-registry/ | Tracks active execution mode | internal |
persistent-mode/ | Maintains mode state across sessions | internal |
Validation Hooks
| Directory | Purpose |
|---|---|
thinking-block-validator/ | Validates thinking blocks in responses |
empty-message-sanitizer/ | Handles empty/whitespace messages |
comment-checker/ | Checks code comment quality |
permission-handler/ | Handles permission requests and validation |
Recovery Hooks
| Directory | Purpose |
|---|---|
recovery/ | Edit error recovery, session recovery |
preemptive-compaction/ | Prevents context overflow |
pre-compact/ | Pre-compaction processing |
Enhancement Hooks
| Directory | Purpose |
|---|---|
rules-injector/ | Injects matching rule files |
directory-readme-injector/ | Injects directory READMEs |
notepad/ | Persists notes for compaction resilience |
learner/ | Skill extraction from conversations |
agent-usage-reminder/ | Reminds about agent delegation |
Detection Hooks
| Directory | Purpose |
|---|---|
keyword-detector/ | Magic keyword detection |
think-mode/ | Extended thinking detection |
auto-slash-command/ | Slash command expansion |
non-interactive-env/ | Non-interactive environment detection |
plugin-patterns/ | Plugin pattern detection |
Coordination Hooks
| Directory | Purpose |
|---|---|
todo-continuation/ | Enforces task completion |
omc-orchestrator/ | Orchestrator behavior |
subagent-tracker/ | Tracks spawned sub-agents |
session-end/ | Session termination handling |
background-notification/ | Background task notifications |
Setup Hooks
| Directory | Purpose |
|---|---|
setup/ | Initial setup and configuration |
For AI Agents
Working In This Directory
Hook Structure
Each hook follows a standard pattern:
hook-name/
├── index.ts # Main hook implementation
├── types.ts # TypeScript interfaces
├── constants.ts # Configuration constants
└── *.ts # Supporting modules
When Adding a New Hook
- Create hook directory with
index.ts,types.ts,constants.ts - Export from
index.ts(hook re-exports) - Register handler in
bridge.tsif needed - Update
docs/REFERENCE.md(Hooks System section) with new hook entry - If execution mode hook, also create
skills/*/SKILL.mdandcommands/*.md
Hook Implementation
// index.ts
export interface HookConfig {
enabled: boolean;
// hook-specific config
}
export function createHook(config: HookConfig) {
return {
name: 'hook-name',
event: 'UserPromptSubmit', // or 'Stop', 'PreToolUse', 'PostToolUse'
handler: async (context) => {
// Hook logic
return { modified: false };
}
};
}
Key Hooks Explained
autopilot/ - Full autonomous execution:
- Validates goals and creates plans
- Manages execution state
- Handles cancellation
- Enforces completion
ralph/ - Persistence mechanism:
- Tracks progress via PRD
- Spawns architect for verification
- Loops until verified complete
- Supports structured PRD format
ultrapilot/ - Parallel autopilot:
- Decomposes tasks into subtasks
- Assigns file ownership to workers
- Coordinates parallel execution
- Integrates results
swarm/ - Coordinated multi-agent:
- SQLite-based task claiming
- 5-minute timeout per task
- Atomic claim/release
- Clean completion detection
learner/ - Skill extraction:
- Detects skill patterns in conversation
- Extracts to local skill files
- Auto-invokes matching skills
- Manages skill lifecycle
Common Patterns
State Management
import { readState, writeState } from '../features/state-manager';
const state = readState('autopilot-state');
state.phase = 'executing';
writeState('autopilot-state', state);
Event Handling
// UserPromptSubmit - Before prompt is sent
// Stop - Before session ends
// PreToolUse - Before tool execution
// PostToolUse - After tool execution
Testing Requirements
- Test specific hooks with
npm test -- --grep "hook-name" - Test execution modes end-to-end with skill invocation
- Verify state persistence in
.omc/state/ - For security hooks, follow
templates/rules/security.mdchecklist
Dependencies
Internal
features/state-manager/for state persistencefeatures/verification/for verification protocolagents/for spawning sub-agents
External
| Package | Purpose |
|---|---|
better-sqlite3 | Swarm task coordination |
fs, path | State file operations |
Hook Events
| Event | When Fired | Common Uses |
|---|---|---|
UserPromptSubmit | Before prompt processing | Keyword detection, mode activation |
Stop | Before session ends | Continuation enforcement |
PreToolUse | Before tool execution | Permission validation |
PostToolUse | After tool execution | Error recovery, rules injection |
Stop Hook Output Contract
The persistent-mode stop hook uses soft enforcement:
// Stop hook ALWAYS returns continue: true
// Enforcement is via message injection, not blocking
return {
continue: true,
message: result.message || undefined // Injected into context
};
Why soft enforcement: Hard blocking (continue: false) would prevent context compaction and could deadlock Claude Code.
Bypass conditions (checked first, allow stopping):
context-limit- Context window exhausted, must allow compactionuser-abort- User explicitly requested stop
Mode priority (checked after bypass, may inject continuation message):
- Ralph (explicit persistence loop)
- Autopilot (full orchestration)
- Ultrapilot (parallel workers)
- Swarm (coordinated agents)
- Pipeline (sequential stages)
- UltraQA (test cycling)
- Ultrawork (parallel execution)
Session isolation: Hooks only enforce for matching session_id. Stale states (>2 hours) are ignored.
Mode completion criteria: Hook blocks while state.active === true && state.session_id === currentSession && !isStaleState(). Running /cancel sets active: false and removes state files.
State Files
| Hook | State File |
|---|---|
| autopilot | .omc/state/autopilot-state.json |
| ultrapilot | .omc/state/ultrapilot-state.json |
| ralph | .omc/state/ralph-state.json |
| swarm | .omc/state/swarm-tasks.db (SQLite) |
| learner | ~/.claude/local-skills/ |
🔗 Связи
- [[MOC - System]] — hooks
- [[000 - Map of Maps]] — Map of Maps