Files
oh-my-openagent/src/hooks/claude-code-hooks/AGENTS.md
2026-01-26 11:48:30 +09:00

2.1 KiB

CLAUDE CODE HOOKS COMPATIBILITY

OVERVIEW

Full Claude Code settings.json hook compatibility layer. Intercepts OpenCode events to execute external scripts/commands defined in Claude Code configuration.

STRUCTURE

claude-code-hooks/
├── index.ts              # Main factory (401 lines)
├── config.ts             # Loads ~/.claude/settings.json
├── config-loader.ts      # Extended config (disabledHooks)
├── pre-tool-use.ts       # PreToolUse executor
├── post-tool-use.ts      # PostToolUse executor
├── user-prompt-submit.ts # UserPromptSubmit executor
├── stop.ts               # Stop hook executor (with active state tracking)
├── pre-compact.ts        # PreCompact executor
├── transcript.ts         # Tool use recording
├── tool-input-cache.ts   # Pre→post input caching
└── types.ts              # Hook & IO type definitions

HOOK LIFECYCLE

Event Timing Can Block Context Provided
PreToolUse Before tool exec Yes sessionId, toolName, toolInput, cwd
PostToolUse After tool exec Warn + toolOutput, transcriptPath
UserPromptSubmit On message send Yes sessionId, prompt, parts, cwd
Stop Session idle/end Inject sessionId, parentSessionId, cwd
PreCompact Before summarize No sessionId, cwd

CONFIG SOURCES

Priority (highest first):

  1. .claude/settings.json (Project-local)
  2. ~/.claude/settings.json (Global user)

HOOK EXECUTION

  • Matchers: Hooks filter by tool name or event type via regex/glob.
  • Commands: Executed via subprocess with env vars ($SESSION_ID, $TOOL_NAME).
  • Exit Codes:
    • 0: Pass (Success)
    • 1: Warn (Continue with system message)
    • 2: Block (Abort operation/prompt)

ANTI-PATTERNS

  • Heavy PreToolUse: Runs before EVERY tool; keep logic light to avoid latency.
  • Blocking non-critical: Prefer PostToolUse warnings for non-fatal issues.
  • Direct state mutation: Use updatedInput in PreToolUse instead of side effects.
  • Ignoring Exit Codes: Ensure scripts return 2 to properly block sensitive tools.