SessionStart always-on hook can't run without Node, but Node is no longer a Claude Code dependency
Summary
On a machine where Claude Code is installed without Node available anywhere (e.g. a native-binary install rather than an npm one), the always-on SessionStart hook fails on every session start with:
SessionStart:startup hook error
Failed with non-blocking status code: /bin/sh: node: command not found(not a PATH/desktop-app issue — Node is genuinely absent)
This leads ADHD mode to never activate, only giving this oneline hook error which is easy to miss.
History
Saw that in issue #66 it was switched from node-based to a POSIX sh script, then reverted back to node in #71 after #70 found the sh version broke on Windows (no sh on PATH under PowerShell). #71's reasoning was that "Node ships with Claude Code on all platforms"
But that's not actually true anymore: Anthropic's native installer (curl -fsSL claude.ai/install.sh | bash, now the recommended default) ships a standalone binary without Node dependency, and even the npm install path just downloads the same native binary and doesn't invoke Node at runtime.
Repro
which -a node finds nothing, no install anywhere on disk (checked Homebrew, nvm, volta, fnm, asdf), claude itself is a native Mach-O binary. Flag file at ~/.claude/.i-have-adhd-always is present and correct, so the hook is genuinely never firing, not a config issue.
Precedent
The hook's own logic (read a flag file, strip YAML frontmatter, print a banner) doesn't need Node — hooks/always-on.sh and hooks/always-on.ps1 already exist in the repo as equivalents, they're just never dispatched to from hooks.json.
There's also #129 (open) showing a second, different way the current Node hook fails silently — CLAUDE_PLUGIN_ROOT isn't exported on the desktop app, so even when Node is present it can no-op with zero error.
Source: ayghri/i-have-adhd