Feature: User-facing MOTD (Message of the Day) on session start and resume
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:
- Injects into model context, not the user-facing UI — wastes tokens on every turn
- Does not fire on
--resumeor-c - 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 dedup —
intervalfield prevents spamming; tracks last-shown timestamp locally - Self-expiring —
untilfield 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.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗