Marketplace update (13.x → 15.0.1) left hooks broken with "Executable not found in $PATH: claude-mem" — no self-heal, no actionable error
### What Updated claude-mem via Claude Code's `/plugin` command (marketplace install, not `npx claude-mem install`/`update`), going from 13.24.23 → 15.0.1 and reloading plugins. Immediately after, the `UserPromptSubmit` hook started failing on every prompt: ``` UserPromptSubmit hook error Failed with non-blocking status code: Error occurred while executing hook command: Executable not found in $PATH: "claude-mem" ``` `which claude-mem` confirmed the binary genuinely did not exist anywhere on the machine (`~/.local/bin`, `/opt/homebrew/bin`, etc. — nowhere). The new exec-form hooks (`{"command":"claude-mem","args":[...]}`) require a compiled launcher on PATH, but nothing had ever placed one for this install. ### Why (traced via the repo's own plan docs) Found `plans/2026-10-02-claude-mem-on-path-hooks.md` and its `SPIKE.md` in the marketplace checkout. The SPIKE explicitly documents the gap that caused this: > **The `Setup` hook never fires on plugin install or update** (item 8). The plan's Setup self-heal route is dead. So the exec-form launcher install was shipped in this version jump, but the only route that was supposed to self-heal it for marketplace-only users (the `Setup` hook) was already known, pre-ship, to never fire on install/update — only on `--init`, `--init-only`, `--maintenance`. For someone who updates purely through Claude Code's `/plugin` UI/command (never running the `npx claude-mem` CLI directly), there is no code path that compiles and places the launcher. The result is a hard, immediate break on every single prompt, with an error message that gives no indication a manual `npx claude-mem install` is required. ### Steps to reproduce 1. Have claude-mem installed via the Claude Code marketplace (not via `npx claude-mem install`), on a version before the exec-form hook change (e.g. 13.x). 2. Run `/plugin` → update, then `/reload-plugins`. 3. Send any prompt. `UserPromptSubmit` (and presumably every other hook) fails with `Executable not found in $PATH: "claude-mem"`. 4. `which claude-mem` confirms nothing is on PATH anywhere. ### Fix that worked Manually running `npx claude-mem@latest install` compiled and placed the launcher at `~/.local/bin/claude-mem` (`npx claude-mem doctor` then showed `✓ Hook launcher ... protocol 1`), which resolved it. But this required already knowing that command existed and that it was the remediation — nothing in the broken state pointed to it. ### Suggested fix - Per the SPIKE's own "Open decisions" section, the marketplace-only self-heal route needs to actually land on one of: a working `Setup`-hook path (ruled out), the `${CLAUDE_PLUGIN_ROOT}/bin/ ` fallback (confirmed working per the SPIKE's item 4), or a loud, actionable error. Right now it looks like none of the three actually shipped for the marketplace-update path — the failure is just a bare PATH-resolution error from Claude Code itself, with zero claude-mem-specific remediation text. - At minimum, the hook error surfaced to the user should say something like `claude-mem: launcher not found, run 'npx claude-mem install'` rather than relying on Claude Code's generic "Executable not found in $PATH" message. ### Environment - macOS (Apple Silicon), Claude Code (recent, 2.1.3xx-ish) - claude-mem installed via marketplace `/plugin` command, updated 13.24.23 → 15.0.1 - Confirmed via `~/.claude/plugins/data/installed_plugins.json` timestamps that the update completed around the same time the hook errors started Happy to provide more logs/timestamps if useful.