Plugin SessionStart hooks don't surface hookSpecificOutput.additionalContext to Claude

Resolved 💬 8 comments Opened Jan 7, 2026 by christinetyip Closed May 11, 2026

Description

When a SessionStart hook is defined in a plugin's hooks.json (referenced via plugin.json), the hook executes successfully but the hookSpecificOutput.additionalContext content is not passed to Claude. Claude only receives a generic success message like "SessionStart:Callback hook success: Success" instead of the actual context.

Expected behavior

The additionalContext value should be injected into Claude's context, as documented in the hooks reference.

Actual behavior

  • Hook executes and returns valid JSON with hookSpecificOutput.additionalContext
  • Claude only sees the success callback message, not the context content

Reproduction

  1. Create a plugin with hooks.json containing a SessionStart hook:
{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh"
          }
        ]
      }
    ]
  }
}
  1. Hook script outputs valid JSON:
{
  "hookSpecificOutput": {
    "hookEventName": "SessionStart",
    "additionalContext": "test context that should be visible to Claude"
  }
}
  1. Start a new Claude Code session
  2. Claude does not receive the "test context" - only sees the success callback

Workaround

Adding the same hook directly to ~/.claude/settings.json (user config) works correctly - the additionalContext is properly surfaced to Claude.

Environment

  • macOS Darwin 24.5.0
  • Claude Code CLI

Impact

Plugins cannot provide session startup context to Claude, limiting use cases like:

  • Loading previous session state
  • Injecting project-specific instructions at startup
  • Providing retrieval practice prompts
  • Any plugin that needs to influence Claude's initial behavior

View original on GitHub ↗

This issue has 8 comments on GitHub. Read the full discussion on GitHub ↗