diff --git a/README.md b/README.md index 919bd5d..5658294 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,8 @@ Code](https://code.claude.com/docs/en/skills) and a throwaway systemd user unit that can't see `~/.ssh` and friends. - [what-was-i-doing](what-was-i-doing/SKILL.md) — where did this file come from? Correlate mtimes with git history across every repo. +- [notify-me](notify-me/SKILL.md) — desktop notification at the end + of a long turn, sticky if I'm stepping away; not every reply. ## adding one diff --git a/notify-me/SKILL.md b/notify-me/SKILL.md new file mode 100644 index 0000000..afd33b5 --- /dev/null +++ b/notify-me/SKILL.md @@ -0,0 +1,60 @@ +--- +name: notify-me +description: Notify me / ping me — desktop (XDG) notification via `notify-send` at the end of any long turn (many steps, builds, test runs, deploys, waiting on background work), asked or not; and when the operator says "notify me", "XDG notify me", "ping me when you're done", "let me know about progress", or "make it stick / indefinite duration" because they're stepping away. Covers done vs. progress notices, sticky vs. transient, and updating one notice in place. Not for Discord replies (use the reply tool) or for quick back-and-forth turns. +--- + +# Notify me + +```sh +notify-send -a capsite "done: diigo-cache" "3 commits on main, not pushed" +``` + +## Context + +The operator hands a session a batch of work, then turns to another session or goes for a walk. + +## Problem + +**Without going to look, the operator can't tell which session is done or stuck.** + +## Forces + +- opencode-web notifies on every reply; notices without news teach the operator to ignore them all. +- Silence is worse: a finished turn sits unseen. +- The operator won't always think to ask. +- Notices expire before the operator is back from a walk. +- Several sessions share one desktop. +- Progress notices pile up. + +## Therefore + +**At the end of any turn long enough that the operator has probably looked away, send one notice: which session, what state, what the operator should do next. Not during quick back-and-forth.** + +Long means more than a handful of tool calls, or waiting on a build, tests, deploy, or background job. "Notify me when you're done" forces one even for a short turn. + +- `-a` names the session (repo or task). +- The summary leads with the status: `done`, `blocked` (including a question that stops the work), `failed`, `progress`. +- The body says what's next: "needs a decision on the DO migration". + +**Sticky** ("indefinite duration", "going for a walk"): `-t 0` (never expire). `-u critical` only if asked. + +**Progress** ("notify me about progress"): one per milestone (tests pass, deployed), replacing the last rather than stacking: + +```sh +id=$(notify-send -p -a capsite "progress: diigo-cache" "tests pass; deploying") +notify-send -r "$id" -a capsite "done: diigo-cache" "deployed; not pushed" +``` + +Keep `$id` in a file (e.g. `.tmp/notify-id`) if the shell doesn't persist. + +## Resulting context + +The operator can leave a session alone and trust it to call. A notice means news, so it gets read. + +`notify-send` needs the session bus; under a confined unit or ssh it may fail. Say so in the reply ([silent-failures-are-evil](../silent-failures-are-evil/SKILL.md)). + +The agent must still remember this pattern at the end of a long turn, just when that slips. + +## TODO + +- A Claude Code `Stop` hook could time the turn and notify past ~2 min; opencode would need its own plugin hook.