[BUG] Only one SessionStart hook executes when multiple are registered

Status Fixed / completed
Reported on v2.1.198
Maintainer reply None cached
Activity 1 comment · opened Sep 1, 2026 · closed Sep 4, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When two plugins each contribute a SessionStart hook, only one of them is dispatched. The other never executes and no error was logged. /reload-plugins and /hooks count all hooks, so registration succeeds but dispatch does not.

Hooks defined in settings.json are unaffected: I registered three (two commands in one matcher group, plus a second group) and all three ran and delivered their additionalContext. The problem is specific to plugin-contributed hooks.

Three plugins here contribute a SessionStart hook and all were affected at the same time. Whichever is registered first wins, the rest are dropped. All use the same shape, no matcher key:

{
  "hooks": {
    "SessionStart": [
      { "hooks": [ { "type": "command", "command": "..." } ] }
    ]
  }
}

What Should Happen?

All hooks should fire.

Error Messages/Logs

Steps to Reproduce

  1. Install two plugins that each define a SessionStart hook writing hookSpecificOutput.additionalContext.
  2. Start a session.
  3. Only one hook's context arrives; the other leaves no transcript entry.

Claude Model

Not sure / Multiple models

Is this a regression?

Yes, this worked in a previous version

Last Working Version

2.1.198

Claude Code Version

2.1.252

Platform

Other

Operating System

Windows

Terminal/Shell

Windows Terminal

Additional Information

| Range | Behaviour |
| --- | --- |
| up to v2.1.198 (last seen 2026-07-02) | Working — multiple plugin SessionStart hooks ran per session, up to 4 |
| v2.1.199 – v2.1.215 | Not verified — no sessions on these versions |
| v2.1.216 – v2.1.252 (2026-07-21 → 2026-09-01) | Broken — 18 versions, 85 sessions, never more than one |

Determined from ~/.claude/projects/**/*.jsonl, counting hook_success attachments with hookEvent: "SessionStart" per session, grouped by the version field.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗