Hook systemMessage display: redundant prefix wastes screen space

Resolved 💬 4 comments Opened Mar 9, 2026 by LinuxIsCool Closed May 1, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

When multiple plugins output systemMessage from SessionStart hooks, the terminal displays:

⎿  SessionStart:startup says: [journal] 3 entries today · latest: "observatory" (14:46)
⎿  SessionStart:startup says: [backlog] empty · /task to create first
⎿  SessionStart:startup says: [temporal] Monday, 2026-03-09 15:07 PDT (afternoon)
⎿  SessionStart:startup says: [observatory] 40 plugins · 12 hooking · 8 injecting context

The prefix SessionStart:startup says: is repeated verbatim on every line. With 4+ hooks outputting systemMessages, this wastes significant screen space and creates visual clutter. The prefix contains two pieces of redundant information:

  1. SessionStart: — the user already knows these are startup messages (they appear at startup)
  2. startup says: — "startup" is the same generic label for all SessionStart hooks, and "says:" adds nothing

Proposed Solutions

Option A (minimal): Collapse the prefix to just the hook output:

⎿  [journal] 3 entries today · latest: "observatory" (14:46)
⎿  [backlog] empty · /task to create first
⎿  [temporal] Monday, 2026-03-09 15:07 PDT (afternoon)
⎿  [observatory] 40 plugins · 12 hooking · 8 injecting context

Option B: Show the event once as a header, then list hook outputs:

⎿  SessionStart hooks:
     [journal] 3 entries today · latest: "observatory" (14:46)
     [backlog] empty · /task to create first
     [temporal] Monday, 2026-03-09 15:07 PDT (afternoon)
     [observatory] 40 plugins · 12 hooking · 8 injecting context

Option C: Allow hooks to specify a short display name via a hookName field in the output JSON, replacing the generic "startup":

{
  "systemMessage": "[journal] 3 entries today",
  "hookName": "journal"
}

Rendered as:

⎿  journal: [journal] 3 entries today

Context

  • Related to #16418 (closed as stale) which requested systemMessage be used in system-reminders sent to Claude
  • Related to #15936 (closed) which requested user-visible messages without context injection
  • The plugin ecosystem is growing — users with 4-8 hooks outputting systemMessages see 4-8 identical prefixes
  • The actual hook messages already self-identify (e.g. [journal], [temporal]) making the prefix purely redundant

Environment

  • Claude Code v2.1.71
  • Linux (CachyOS)
  • 4+ custom plugins with SessionStart systemMessage output

View original on GitHub ↗

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