From 3d49ee1262f62e2ea7b2bc57b051a41aff3b9e03 Mon Sep 17 00:00:00 2001 From: popododo0720 <78542988+popododo0720@users.noreply.github.com> Date: Thu, 8 Jan 2026 10:15:58 +0900 Subject: [PATCH] fix: respect disabled_hooks for keyword-detector in claude-code-hooks (#562) * fix: respect disabled_hooks for keyword-detector in claude-code-hooks The keyword detection in claude-code-hooks was running regardless of whether keyword-detector was in disabled_hooks. This caused analyze and search modes to trigger even when explicitly disabled. Pass keywordDetectorDisabled flag to createClaudeCodeHooksHook and skip keyword detection when the hook is disabled. Fixes #530 * refactor: restore keyword types in log output Add types array back to keyword detection log for better observability --- src/hooks/claude-code-hooks/index.ts | 18 +++++++++++------- src/hooks/claude-code-hooks/types.ts | 1 + src/index.ts | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/hooks/claude-code-hooks/index.ts b/src/hooks/claude-code-hooks/index.ts index acfc3ee..63482dc 100644 --- a/src/hooks/claude-code-hooks/index.ts +++ b/src/hooks/claude-code-hooks/index.ts @@ -138,14 +138,18 @@ export function createClaudeCodeHooksHook(ctx: PluginInput, config: PluginConfig return } - const detectedKeywords = detectKeywordsWithType(removeCodeBlocks(prompt), input.agent) - const keywordMessages = detectedKeywords.map((k) => k.message) + const keywordMessages: string[] = [] + if (!config.keywordDetectorDisabled) { + const detectedKeywords = detectKeywordsWithType(removeCodeBlocks(prompt), input.agent) + keywordMessages.push(...detectedKeywords.map((k) => k.message)) - if (keywordMessages.length > 0) { - log("[claude-code-hooks] Detected keywords", { - sessionID: input.sessionID, - types: detectedKeywords.map((k) => k.type), - }) + if (keywordMessages.length > 0) { + log("[claude-code-hooks] Detected keywords", { + sessionID: input.sessionID, + keywordCount: keywordMessages.length, + types: detectedKeywords.map((k) => k.type), + }) + } } const allMessages = [...keywordMessages, ...result.messages] diff --git a/src/hooks/claude-code-hooks/types.ts b/src/hooks/claude-code-hooks/types.ts index 33533e3..5d287f6 100644 --- a/src/hooks/claude-code-hooks/types.ts +++ b/src/hooks/claude-code-hooks/types.ts @@ -200,4 +200,5 @@ export interface ClaudeCodeMessage { export interface PluginConfig { disabledHooks?: boolean | ClaudeHookEvent[] + keywordDetectorDisabled?: boolean } diff --git a/src/index.ts b/src/index.ts index 226d6b6..267f36b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -122,6 +122,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { const thinkMode = isHookEnabled("think-mode") ? createThinkModeHook() : null; const claudeCodeHooks = createClaudeCodeHooksHook(ctx, { disabledHooks: (pluginConfig.claude_code?.hooks ?? true) ? undefined : true, + keywordDetectorDisabled: !isHookEnabled("keyword-detector"), }); const anthropicContextWindowLimitRecovery = isHookEnabled( "anthropic-context-window-limit-recovery"