Problem
The system has two independently-updated halves: the plugin (per Claude profile, per session reloads) and the container. Updating one and forgetting the other is easy and produced a real cross-boundary bug today (plugins 2.7.5 talking to a 2.7.6 daemon — #15 fix inert). /noisy-coding:update now always ends with a plugin check, but the reverse path (claude plugin update run directly) is a bare CLI command we cannot hook.
Direction — the daemon is the only place that sees both halves
- The hooks know their own plugin version for free:
CLAUDE_PLUGIN_ROOT contains it (.../cache/noisy/noisy-coding/<version>/). exec.sh passes it along (e.g. -e NOISY_CODING_PLUGIN_VERSION=<v>), hooks include it in /register.
- The daemon compares that with its own version. On mismatch, per affected agent:
- append a nudge to the next drain/hook response ("[SYSTEM] plugin 2.7.5 ≠ daemon 2.7.7 — run claude plugin update + /reload-plugins / or /noisy-coding:update for the container half", whichever half is older),
- badge the dashboard tab / system state panel with the skew.
- One nudge per session per skew, not per hook call.
This also covers multi-profile machines: each profile's sessions report their own plugin version, so a stale personal profile gets nudged even when the work profile is current.
Relations
🤖 Generated with Claude Code
Problem
The system has two independently-updated halves: the plugin (per Claude profile, per session reloads) and the container. Updating one and forgetting the other is easy and produced a real cross-boundary bug today (plugins 2.7.5 talking to a 2.7.6 daemon — #15 fix inert).
/noisy-coding:updatenow always ends with a plugin check, but the reverse path (claude plugin updaterun directly) is a bare CLI command we cannot hook.Direction — the daemon is the only place that sees both halves
CLAUDE_PLUGIN_ROOTcontains it (.../cache/noisy/noisy-coding/<version>/).exec.shpasses it along (e.g.-e NOISY_CODING_PLUGIN_VERSION=<v>), hooks include it in /register.This also covers multi-profile machines: each profile's sessions report their own plugin version, so a stale personal profile gets nudged even when the work profile is current.
Relations
🤖 Generated with Claude Code