AgentLayer▸docs
Agent · Harness

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

NoticeWhen it showsLevelActed on by
↑ UpgradeThe installed plugin is newer than the home's recorded baselinenudge; alert at two or more releases behind/agent-kevin:upgrade
↑ Turn on update trackingThe home has no .state/version.json yetnudge/agent-kevin:upgrade
⟳ SyncThree or more days since the last sync, or no sync everhint 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

LevelWhat it adds
hintA line in the session banner, and the suggested command in an empty prompt
nudgeThe row above the prompt, with a button that acts on it
alertA 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 ]  Tomorrow

The 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:sync

The 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

YouWhat happens
Press the action button, or type the command in a Claude Code session where the notice is showingRecorded as acted: the snooze streak resets
Press TomorrowHidden 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=acted

record 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.

On this page