Notices
The one list of upkeep only you can start, how loud each item gets, and where every surface shows it.
Some upkeep only you can start: applying an upgrade, running a sync. Instead of each surface working out its own reminder, the plugin works out one list of notices from the home's state whenever something asks, and every surface draws from that list. The only things stored are what you did with each notice and the row's stamp.
What becomes a notice
| Notice | When it shows | Level | Acted on by |
|---|---|---|---|
| ↑ Upgrade | The installed plugin is newer than the home's recorded baseline | nudge; alert at two or more releases behind | /agent-kevin:upgrade |
| ↑ Turn on update tracking | The home has no .state/version.json yet | nudge | /agent-kevin:upgrade |
| ⟳ Sync | Three or more days since the last sync, or no sync ever | hint at 3 days, nudge at 5, alert at 8 or never | /agent-kevin:sync |
Each notice carries a few facts beside its title. The upgrade notice gives the versions and how far behind the home is (0.7.0 → 0.7.1 · 1 release behind). The sync notice gives what is waiting to compile (session logs, inbox items, new feedback) and, above the prompt, how long a sync usually takes on this machine. The sync notice stays quiet until the first-session welcome has run, and the age is counted in calendar days in your timezone.
The order is the priority, and upgrade comes first: an upgrade ends in a sync, or asks for one after the restart, so doing it first answers both.
Levels
| Level | What it adds |
|---|---|
| hint | A line in the session banner, and the suggested command in an empty prompt |
| nudge | The row above the prompt, with a button that acts on it |
| alert | A toast at session start |
Each level adds to the one before it. In the terminal, the row takes over a nudge's or alert's banner line, as below.
Where they show
Above the prompt, in the Claude Code terminal. A mod draws the top nudge or alert as one row: its icon in the level's colour, the title, the facts, and two buttons.
⟳ Brain 5 days behind · 3 session logs · 2 in the inbox · ~6m12s [ Sync now ] TomorrowThe top notice's command is also the Tab suggestion, so an empty prompt plus Tab runs it, and an alert raises a toast at session start that says so. When more than one notice applies, the row shows the first and a +1 more. While the command it started is running, the row steps aside, then comes back recomputed once that turn ends. It refreshes on its own every 30 minutes.
In the session banner, everywhere else. Outside the Claude Code terminal (the VS Code panel, the desktop app, claude -p, Codex), the SessionStart banner lists every notice with the command that acts on it, as plain text:
⟳ Sync: Brain 5 days behind · 3 session logs · 2 in the inbox · run /agent-kevin:syncThe terminal banner shows them too, colour-coded by level, until the row has proven it runs. At each session start the mod fetches notices and stamps .state/notices.json with the plugin version and the date. While that stamp is from the installed version and at most seven days old, the terminal banner leaves nudges and alerts to the row and keeps only hints. After a plugin update they are back in the banner until the mod runs on the new version, and a mod that stops running hands them back within a week, so a broken row never hides a notice for long.
On the dashboard. The last-sync age reads the same stamp the sync notice does, which sync writes when it refreshes the dashboards.
Acting and snoozing
| You | What happens |
|---|---|
| Press the action button, or type the command in a Claude Code session where the notice is showing | Recorded as acted: the snooze streak resets |
| Press Tomorrow | Hidden for the rest of today, back tomorrow |
kevin notices record <id> --outcome=acted records the same and also lifts a snooze. A notice can be pinned, which keeps its level however often you snooze it; upgrade and sync both are. An unpinned notice drops one level after five snoozes in a row, never below hint.
What you did lives in .state/notices.json: snooze streaks, what is snoozed through which date, and the row's stamp. A hand-edited value of the wrong type is ignored rather than obeyed, so a typo can't hide a notice for good.
From the terminal
kevin notices # every notice that applies now, as JSON, top first
kevin notices record sync --outcome=snoozed # or --outcome=actedrecord prints the updated list too. This is the same call the row makes, so a script or another surface can show notices the way the row does. See CLI.