Repository navigation
fix: start the hook on native Windows (1.0.5) - #11
Merged
Merged
Conversation
hooks.json declared one interpreter, `python3`. Hooks run in exec form, which Claude Code spawns with no shell, so the name must resolve to a real executable. On native Windows it usually does not: the python.org installer creates python.exe and py.exe but no python3.exe, and Windows ships an App Execution Alias stub of that name which exits 9009 without running Python. Existence checks pass, so the failure is invisible, and a failed MessageDisplay hook shows the original text without an error. Declare the hook as both `python3` and `py -3`. Entries dedupe on command plus args so both are attempted, a failing one contributes no displayContent, and the merge keeps the last defined one. `python` is not a third entry. On Arch and in an activated venv it is the same interpreter as `python3`, so it would run the transform twice per flush for many POSIX users. Also fix `/claude-bionify:status` reporting ON while nothing is bolded. The commands reach Python through a shell, which resolves names the hook's spawn cannot, so status could describe a hook that never ran. It now warns when no declared interpreter starts, judging each by running it rather than locating it, and discounting one that only resolves because Windows searches our own directory before PATH. The commands keep their single-command form. A `python3 || py -3` chain fails to parse under PowerShell 5.1, which is what shell form falls back to when Git Bash is absent. Refs #7. Claude-Session: https://claude.ai/code/session_011ZEJcomZuou2T23FGSBmdd
This was referenced Aug 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7. Thanks to @aermak for the report and for identifying the cause.
On native Windows the plugin was silently inert. No bolding, no error, and
/claude-bionify:statusreportingONthroughout.Cause
hooks.jsondeclared one interpreter,python3. Hooks run in exec form, which Claude Code spawns with no shell, so the name must resolve to a real executable. On native Windows it usually does not:python.exeandpy.exe, never apython3.exe.python3.exeinWindowsApps, on PATH and enabled by default. Running it printsPython was not foundand exits 9009.So the spawn succeeds and runs the wrong thing. Existence checks like
where python3pass while the plugin stays dead. A failedMessageDisplayhook is display-only, so Claude Code keeps the original delta and surfaces nothing;claude --debugis the only trace.Fix
{"command": "python3", "args": ["${CLAUDE_PLUGIN_ROOT}/scripts/bionify.py"], "timeout": 10}, {"command": "py", "args": ["-3", "${CLAUDE_PLUGIN_ROOT}/scripts/bionify.py"], "timeout": 10}Entries dedupe on
commandplusargsso both are attempted, a failing one yields nodisplayContent, and the merge keeps the last defined one.python3covers Linux, macOS, WSL and Store Python;pycovers python.org on Windows, whose launcher is a real.exeinC:\Windows.Not chosen: a
pythonthird entry, which on Arch and in any activated venv is the same interpreter aspython3and would run the transform twice per flush; and shell form with a||chain, which fails to parse under PowerShell 5.1, the fallback when Git Bash is absent./claude-bionify:statusalso stopped reporting ON while nothing was bolded, which is what made this look like a settings problem.Known limitation
Where
python3is the Store placeholder, bolding works but the/claude-bionify:*commands do not, since they run through a shell. Installing Git for Windows, or a realpython3onPATH, restores them. Documented in both READMEs.Test plan
hooks.jsoncontract asserted in the suite, sinceclaude plugin validate --strictdoes not check itclaude plugin validate --stricton both manifests, ruff clean