Documentation
¶
Overview ¶
Package hook provides types and utilities for handling Claude Code hook events. For more information about Claude Code hooks, see: https://docs.anthropic.com/en/docs/claude-code/hooks
Package hook provides unified handling for both Claude Code and Codex hook events
Index ¶
- type CodexLifecycleEvent
- type CodexNotifyEvent
- type CursorAfterAgentResponseEvent
- type CursorBeforeSubmitPromptEvent
- type CursorHookEvent
- type CursorSessionStartEvent
- type CursorStopEvent
- type HookEvent
- type NotificationEvent
- type PostToolUseEvent
- type PreCompactEvent
- type PreToolUseEvent
- type SessionEndEvent
- type SessionStartEvent
- type StopEvent
- type UnifiedHookEvent
- func (e *UnifiedHookEvent) GetClaudeCodeEvent() (interface{}, bool)
- func (e *UnifiedHookEvent) GetCodexEvent() (*CodexNotifyEvent, bool)
- func (e *UnifiedHookEvent) GetCursorEvent() (interface{}, bool)
- func (e *UnifiedHookEvent) IsClaudeCode() bool
- func (e *UnifiedHookEvent) IsCodex() bool
- func (e *UnifiedHookEvent) IsCursor() bool
- type UserPromptSubmitEvent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CodexLifecycleEvent ¶ added in v0.1.21
type CodexLifecycleEvent struct {
SessionID string `json:"session_id"`
TranscriptPath string `json:"transcript_path"`
CWD string `json:"cwd,omitempty"`
HookEventName string `json:"hook_event_name"`
Model string `json:"model"`
PermissionMode string `json:"permission_mode"`
Source string `json:"source,omitempty"`
TurnID string `json:"turn_id,omitempty"`
Prompt string `json:"prompt,omitempty"`
StopHookActive bool `json:"stop_hook_active,omitempty"`
LastAssistantMessage string `json:"last_assistant_message,omitempty"`
}
CodexLifecycleEvent represents Codex hooks.json lifecycle events. These use hook_event_name like Claude Code, but include Codex-specific fields such as model and permission_mode.
type CodexNotifyEvent ¶ added in v0.1.5
type CodexNotifyEvent struct {
Type string `json:"type"` // "agent-turn-complete"
ThreadID string `json:"thread-id"` // UUID of the thread
TurnID string `json:"turn-id"` // Turn number (string from Codex)
CWD string `json:"cwd"` // Current working directory
InputMessages []string `json:"input-messages"` // User's input messages
LastAssistantMessage string `json:"last-assistant-message"` // Model's final response
}
CodexNotifyEvent represents the Codex notify hook event See: https://github.com/openai/codex/blob/main/docs/config.md
func ParseCodexNotifyEvent ¶ added in v0.1.5
func ParseCodexNotifyEvent(r io.Reader) (*CodexNotifyEvent, error)
ParseCodexNotifyEvent reads and parses Codex notify event from stdin
func ReadCodexNotifyEvent ¶ added in v0.1.5
func ReadCodexNotifyEvent() (*CodexNotifyEvent, error)
ReadCodexNotifyEvent is a convenience function to read Codex notify event from stdin
type CursorAfterAgentResponseEvent ¶ added in v0.1.11
type CursorAfterAgentResponseEvent struct {
CursorHookEvent
Text string `json:"text"` // The final AI response text
}
CursorAfterAgentResponseEvent represents Cursor's afterAgentResponse hook event This is the recommended hook for voice synthesis as it provides the AI response directly
type CursorBeforeSubmitPromptEvent ¶ added in v0.1.11
type CursorBeforeSubmitPromptEvent struct {
CursorHookEvent
Prompt string `json:"prompt"`
}
CursorBeforeSubmitPromptEvent represents Cursor's beforeSubmitPrompt hook event
type CursorHookEvent ¶ added in v0.1.11
type CursorHookEvent struct {
ConversationID string `json:"conversation_id"`
GenerationID string `json:"generation_id"`
Model string `json:"model"`
HookEventName string `json:"hook_event_name"`
CursorVersion string `json:"cursor_version"`
WorkspaceRoots []string `json:"workspace_roots"`
UserEmail string `json:"user_email,omitempty"`
TranscriptPath string `json:"transcript_path,omitempty"`
}
CursorHookEvent represents the common hook event data from Cursor See: https://cursor.com/docs/agent/hooks Note: Cursor uses conversation_id instead of session_id, and camelCase event names
type CursorSessionStartEvent ¶ added in v0.1.11
type CursorSessionStartEvent struct {
CursorHookEvent
}
CursorSessionStartEvent represents Cursor's sessionStart hook event
type CursorStopEvent ¶ added in v0.1.11
type CursorStopEvent struct {
CursorHookEvent
Status string `json:"status,omitempty"` // completed/aborted/error
LoopCount int `json:"loop_count,omitempty"`
}
CursorStopEvent represents Cursor's stop hook event
type HookEvent ¶
type HookEvent struct {
SessionID string `json:"session_id"`
TranscriptPath string `json:"transcript_path"`
CWD string `json:"cwd,omitempty"`
HookEventName string `json:"hook_event_name"`
}
HookEvent represents the common hook event data from Claude Code
func ParseHookEvent ¶
ParseHookEvent reads and parses the hook event from stdin
func ReadHookEvent ¶
ReadHookEvent is a convenience function to read hook event from stdin
type NotificationEvent ¶
NotificationEvent represents the Notification hook event
func ParseNotificationEvent ¶
func ParseNotificationEvent(r io.Reader) (*NotificationEvent, error)
ParseNotificationEvent reads and parses Notification event from stdin
func ReadNotificationEvent ¶
func ReadNotificationEvent() (*NotificationEvent, error)
ReadNotificationEvent is a convenience function to read Notification event from stdin
type PostToolUseEvent ¶
type PostToolUseEvent struct {
HookEvent
ToolName string `json:"tool_name"`
ToolResult map[string]interface{} `json:"tool_result,omitempty"`
}
PostToolUseEvent represents the PostToolUse hook event
type PreCompactEvent ¶
type PreCompactEvent struct {
HookEvent
CompactMode string `json:"compact_mode"` // "manual" or "auto"
}
PreCompactEvent represents the PreCompact hook event
type PreToolUseEvent ¶
type PreToolUseEvent struct {
HookEvent
ToolName string `json:"tool_name"`
ToolParams map[string]interface{} `json:"tool_params,omitempty"`
}
PreToolUseEvent represents the PreToolUse hook event
type SessionEndEvent ¶ added in v0.1.6
type SessionEndEvent struct {
HookEvent
}
SessionEndEvent represents the SessionEnd hook event Triggered when a Claude Code session ends
func ParseSessionEndEvent ¶ added in v0.1.6
func ParseSessionEndEvent(r io.Reader) (*SessionEndEvent, error)
ParseSessionEndEvent reads and parses SessionEnd event from stdin
func ReadSessionEndEvent ¶ added in v0.1.6
func ReadSessionEndEvent() (*SessionEndEvent, error)
ReadSessionEndEvent is a convenience function to read SessionEnd event from stdin
type SessionStartEvent ¶ added in v0.1.6
type SessionStartEvent struct {
HookEvent
}
SessionStartEvent represents the SessionStart hook event Triggered when a Claude Code session starts or resumes
func ParseSessionStartEvent ¶ added in v0.1.6
func ParseSessionStartEvent(r io.Reader) (*SessionStartEvent, error)
ParseSessionStartEvent reads and parses SessionStart event from stdin
func ReadSessionStartEvent ¶ added in v0.1.6
func ReadSessionStartEvent() (*SessionStartEvent, error)
ReadSessionStartEvent is a convenience function to read SessionStart event from stdin
type StopEvent ¶
StopEvent represents the Stop/SubagentStop hook event
func ParseStopEvent ¶
ParseStopEvent reads and parses Stop event from stdin
func ReadStopEvent ¶
ReadStopEvent is a convenience function to read Stop event from stdin
type UnifiedHookEvent ¶ added in v0.1.5
type UnifiedHookEvent struct {
Source string // "claude-code", "codex", or "cursor"
SessionID string // Session/Thread/Conversation identifier
CWD string // Current working directory
EventType string // Event type (e.g., "UserPromptSubmit", "agent-turn-complete", "sessionStart")
UserInput []string // User's input messages
AIResponse string // AI's response message
RawEvent interface{} // Original event for type-specific handling
}
UnifiedHookEvent represents a normalized hook event that works for Claude Code, Codex, and Cursor
func DetectAndParse ¶ added in v0.1.5
func DetectAndParse(r io.Reader) (*UnifiedHookEvent, error)
DetectAndParse automatically detects the hook source and parses the event
func DetectAndParseForSource ¶ added in v0.1.21
func DetectAndParseForSource(r io.Reader, sourceHint string) (*UnifiedHookEvent, error)
DetectAndParseForSource parses hook input with an optional source hint. Some lifecycle payloads intentionally share the same wire shape across assistants, so callers that know the invoking platform can pass it here.
func (*UnifiedHookEvent) GetClaudeCodeEvent ¶ added in v0.1.5
func (e *UnifiedHookEvent) GetClaudeCodeEvent() (interface{}, bool)
GetClaudeCodeEvent returns the underlying Claude Code event if available
func (*UnifiedHookEvent) GetCodexEvent ¶ added in v0.1.5
func (e *UnifiedHookEvent) GetCodexEvent() (*CodexNotifyEvent, bool)
GetCodexEvent returns the underlying Codex event if available
func (*UnifiedHookEvent) GetCursorEvent ¶ added in v0.1.11
func (e *UnifiedHookEvent) GetCursorEvent() (interface{}, bool)
GetCursorEvent returns the underlying Cursor event if available
func (*UnifiedHookEvent) IsClaudeCode ¶ added in v0.1.5
func (e *UnifiedHookEvent) IsClaudeCode() bool
IsClaudeCode returns true if the event is from Claude Code
func (*UnifiedHookEvent) IsCodex ¶ added in v0.1.5
func (e *UnifiedHookEvent) IsCodex() bool
IsCodex returns true if the event is from Codex
func (*UnifiedHookEvent) IsCursor ¶ added in v0.1.11
func (e *UnifiedHookEvent) IsCursor() bool
IsCursor returns true if the event is from Cursor
type UserPromptSubmitEvent ¶
UserPromptSubmitEvent represents the UserPromptSubmit hook event
func ParseUserPromptSubmitEvent ¶
func ParseUserPromptSubmitEvent(r io.Reader) (*UserPromptSubmitEvent, error)
ParseUserPromptSubmitEvent reads and parses UserPromptSubmit event from stdin
func ReadUserPromptSubmitEvent ¶
func ReadUserPromptSubmitEvent() (*UserPromptSubmitEvent, error)
ReadUserPromptSubmitEvent is a convenience function to read UserPromptSubmit event from stdin