Feature: User-facing MOTD (Message of the Day) on session start and resume

Resolved 💬 3 comments Opened Apr 12, 2026 by LZong-tw Closed Apr 16, 2026

Not a duplicate of #2735 or #6999

Those issues request auto-executing slash commands at startup. This issue requests a static, user-defined message display — no command execution, no model context injection, no slash commands involved.

Problem

There is no way to show a reminder to the human user when Claude Code starts or resumes. The only existing mechanism is SessionStart hooks with additionalContext, which:

  1. Injects into model context, not the user-facing UI — wastes tokens on every turn
  2. Does not fire on --resume or -c
  3. Requires writing a Node.js script just to show a one-liner

Real-world example

I switched my statusLine from npx -y pkg@latest (which caused repeated hangs from npm registry checks on every poll cycle) to a globally-installed binary. Now I need a lightweight way to remind myself to periodically run npm i -g pkg@latest — but the only option is a SessionStart hook that burns tokens every turn just to tell me something.

Proposal

A motd config in settings.json that displays messages in the UI (like the startup banner), not in model context.

{
  "motd": [
    {
      "message": "Remember to update ccstatusline: npm i -g ccstatusline@latest",
      "interval": "14d"
    },
    {
      "message": "Merge freeze starts Thursday — check with team before pushing",
      "until": "2026-04-17"
    }
  ]
}

Suggested fields

| Field | Description |
|-------|-------------|
| message | Text displayed to the user in the TUI |
| interval | Show once per time period (7d, 24h), suppress until next interval. Tracked via local state file. |
| until | Auto-expire after this date (for temporary reminders) |
| on | When to show: start, resume, continue (default: all) |

Key design points

  • UI-only — displayed like the welcome banner, never enters model context, zero token cost
  • Fires on all session types — new, resume, continue
  • Zero overhead — just a config read, no subprocess, no network
  • Interval dedupinterval field prevents spamming; tracks last-shown timestamp locally
  • Self-expiringuntil field lets temporary reminders (deadlines, freezes) auto-disappear

How this differs from existing features

| Mechanism | Audience | Token cost | Fires on resume | Custom content |
|-----------|----------|------------|-----------------|----------------|
| SessionStart hook + additionalContext | Model | Yes, every turn | No | Yes (requires script) |
| CLAUDE.md | Model | Yes, every turn | Yes | Yes |
| Startup banner | Human | None | Yes | No |
| This proposal (MOTD) | Human | None | Yes | Yes |

Analogous to /etc/motd on Linux — a simple, zero-cost message shown at login.

View original on GitHub ↗

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