Mods (function-hook plugins) load but never run in desktop Code tab; CLAUDE_CODE_PLUGIN_DIRS ignored

Status Open
Reported on v2.1.295
Maintainer reply None cached
Activity 0 comments · opened Oct 12, 2026

Environment

  • Claude desktop app 2.31226.1, Code tab, local session (macOS, Darwin 25.5.0)
  • Claude Code 2.1.295
  • Team plan. No managed settings: no managed-settings.json, server-managed settings empty, no device profile.

What happened

  1. I wrote a mod in the session's dev-mods folder (.claude-plugin/plugin.json, hooks/hooks.json with "modules": ["./register.tsx"], hooks/register.tsx). The mod hooks tool.call, prompt.submit, session.start and ui.render on AbovePrompt.
  2. I accepted "Enable hot reloading for this session". The session reported the mod as loaded, and the engine wrote .claude-plugin/types/ and tsconfig.json into the mod folder.
  3. None of the hooks ever ran:
  • No AbovePrompt band was drawn.
  • A tool.call hook that calls $.ui.toast(...) and $.store.set(...) on every Bash call produced no toast and no store file.
  • Tested with 4 background Bash tasks, including after a full app restart.
  • No error lines appeared in the transcript.
  1. Separately, setting "env": { "CLAUDE_CODE_PLUGIN_DIRS": "~/.claude/mods/task-progress" } in ~/.claude/settings.json doesn't load the mod in new desktop sessions. The engine never writes .claude-plugin/types/ into that folder.

Expected
Per https://code.claude.com/docs/en/plugins/mods/overview, mods are on by default in the desktop Code tab from v2.1.286, so the hooks should run and the band should draw.

View original on GitHub ↗