Claude Code plugin · alerts, morning brief, reply-to-act
Watchers that page you.
One morning brief.
Reply to act.
sentinel watches your calendars, inboxes, GitHub and Slack in the background and only interrupts you when something actually needs you. Every morning you get one message with the day laid out. And because it lands on your phone, you can text back — a headless Claude with your tools does the work and answers in the same thread.
What's in the box
Four watchers, one hub, and a scaffolder for the rest.
| Watcher | Sources | Pages you when | In the brief |
|---|---|---|---|
calwatch | Google (any number of accounts), Microsoft 365, any ICS feed | a new or changed event conflicts with another — across all accounts. Mirrored invites, all-day items, multi-day trips and reminder calendars don't count. | today's agenda plus Claude prep notes: unanswered invites, in-person locations, back-to-back, deadlines hiding in descriptions |
mailwatch | Gmail (multi-account), Microsoft Graph | Claude triages new mail as urgent — a person waiting, a deadline, money, security. Cheap rules drop promo, social and newsletter noise first. | what needs a reply from the last 24 h, threads collapsed |
ghwatch | GitHub notifications via gh | mention · assigned · review requested · comment on your thread · new issue or PR in repos you care about. CI noise ignored. | open issues assigned to you (freshest first, with age), reviews waiting, mentions |
slackwatch | any number of Slack workspaces (user token, read-only) | DMs, group DMs, @you, keywords you choose | DMs and mentions per workspace |
sentinel | — (the hub) | — | merges everything into one message at your brief time, retries alerts from an outbox when your phone is unreachable, runs the reply-to-act agent |
sentinel new … | anything | you decide, in ~30 lines of Python | auto-added |
Reply to act
Text it back. Claude does the work.
Anything you send to the alert channel — a push topic or a text to your own number — is handed to a headless claude -p session running on your machine with your MCP servers (calendar, mail, chat, code hosting, the phone itself) and the watcher CLIs. One conversation per day, so "yes", "no" and "send" refer to whatever it last proposed. It answers in the same thread, short enough to read on a phone.
Reads and self-only actions: just done
"What's on Tuesday, anything conflicting?" · "Decline the 11:30." · "Label everything from that recruiter." · "Why do I have two flights to Austin?" — it reads your real data and answers with what it found, not what it guessed.
Anything that reaches another person: drafted first
Email, chat, invites, review comments — it shows the exact text and recipient and waits for your "yes". Say "just do it" in the original message and it skips the confirmation. That rule is the safeguard for running with permissions bypassed, which is what acting on your behalf needs.
Your own watcher
"Set up a sentinel for my fantasy league."
Say that in Claude Code and the /sentinel:new skill scaffolds a package where you edit exactly one file. Baseline, dedupe, batching, quiet hours, outbox retry, CLI, and registration into the brief and the agent are already handled by the engine.
# draftwatch/source.py — the only file you write def fetch(cfg): # the current window of items, each with a stable "key" ... def alert(item, cfg): # one-line reason to page NOW, or None return "you're on the clock" if item["mine"] and item["on_the_clock"] else None def brief(items, cfg): # a few plain-text lines for the morning message ...
sentinel new draftwatch --title "Draft" --emoji "🏈"Delivery
Wherever you actually look.
The default is ntfy: free push notifications with no account — install the app, subscribe to a topic, done. Post to a second topic from the same app and that's your reply channel. If your phone is already on the session mesh, alerts can be real SMS and your self-texts are commands.
Install
Two commands in Claude Code.
The setup skill asks who you are and how to reach you, sends a test, walks through only the sources you want, and registers the daemons so everything survives a reboot — Linux, macOS, and Windows.
/softwaresoftware:install sentinel/sentinel:setupclaude plugin marketplace add softwaresoftware-dev/softwaresoftware-pluginsNeeds Python 3.11+ with uv and the claude CLI; gh for GitHub. Sources are optional and independent — GitHub is zero-config, ICS calendar feeds need a URL, Google, Microsoft and Slack need a one-time OAuth. Details in docs/accounts.md. Everything runs locally; your tokens never leave your machine.