diff --git a/CLAUDE.md b/CLAUDE.md index c10e984..ccf1f9b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -198,8 +198,33 @@ question. ### Notifications -When the user is away, notify him when you're done and there -is nothing left to do. +Two states call for a notify; nothing else does: + +1. **Done-state.** The autonomous queue is empty — the milestone + closed, the audit ratified, and no further iteration is obvious + from the spec or the roadmap (or, in a user-scoped session, + every objective the user named has been completed and there is + nothing else queued). A finished sub-goal inside a still-open + milestone is *not* done-state. If the next iteration is obvious + and substantive, keep dispatching — "test suite landed", "audit + clean before close-fixes", "iter N done with N+1 in scope" are + internal progress, not notify events. + +2. **Problem-state.** A bounce-back trigger per §"Direction + freedom" — design fork I cannot resolve, an unexpected + invariant violation, an external dependency failure, or the + user has explicitly asked for a checkpoint. + +A user-specified stop trigger ("until X is done, then notify") +counts as done-state only if X is truly the last actionable item +in the autonomous queue at that moment. If hitting X still leaves +an open milestone with obvious follow-up iters, the right action +is to continue past X without notifying — the user's intent +behind the trigger is "wake me when there's nothing else to do", +not "wake me at this specific checkpoint". + +Mid-flow progress notifications burn the user's attention without +giving him a decision to make. When in doubt, continue. ~/.claude/notify.sh "Text" @@ -208,7 +233,7 @@ summary: what I need from them, in one short line. Skip the "hi, I" framing — just the gist. The user will see it on phone and likely respond by returning to the session. -By default, you act autonomous. The notification is the +By default, I act autonomous. The notification is the exception, not the rule. ### Done-state notifications: WhatsNew.md