From 4fbb23de26550e843cdecd9dc3972f5b036ca5ed Mon Sep 17 00:00:00 2001 From: JeremyDev87 Date: Sat, 28 Mar 2026 12:48:42 +0900 Subject: [PATCH 1/2] fix(plugin): quote HOOK_COMMAND path to handle spaces in home directory (#993) Use $HOME with double quotes instead of unquoted ~ to prevent breakage when the home directory path contains spaces. --- packages/claude-code-plugin/hooks/session-start.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/claude-code-plugin/hooks/session-start.py b/packages/claude-code-plugin/hooks/session-start.py index 81f1b9e3..8b52b882 100644 --- a/packages/claude-code-plugin/hooks/session-start.py +++ b/packages/claude-code-plugin/hooks/session-start.py @@ -30,7 +30,7 @@ # Constants HOOK_FILENAME = "codingbuddy-mode-detect.py" SOURCE_FILENAME = "user-prompt-submit.py" -HOOK_COMMAND = f"python3 ~/.claude/hooks/{HOOK_FILENAME}" +HOOK_COMMAND = f'python3 "$HOME/.claude/hooks/{HOOK_FILENAME}"' # i18n Messages MESSAGES: Dict[str, Dict[str, str]] = { From 446db60f755e0d3e18dda7399349be783147377a Mon Sep 17 00:00:00 2001 From: JeremyDev87 Date: Sat, 28 Mar 2026 12:51:40 +0900 Subject: [PATCH 2/2] fix(plugin): use substring match in _is_hook_in_settings for backward compat Existing installations store the old ~ format in settings.json. Exact string comparison against the new $HOME format would fail, causing duplicate hook registration. Match by HOOK_FILENAME substring instead. --- packages/claude-code-plugin/hooks/session-start.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/claude-code-plugin/hooks/session-start.py b/packages/claude-code-plugin/hooks/session-start.py index 8b52b882..bd7445fd 100644 --- a/packages/claude-code-plugin/hooks/session-start.py +++ b/packages/claude-code-plugin/hooks/session-start.py @@ -271,7 +271,7 @@ def _is_hook_in_settings(settings: dict) -> bool: user_prompt_hooks = settings.get("hooks", {}).get("UserPromptSubmit", []) for hook_group in user_prompt_hooks: for hook in hook_group.get("hooks", []): - if hook.get("command") == HOOK_COMMAND: + if HOOK_FILENAME in hook.get("command", ""): return True return False