Skip to content

Commit 4e6ff0d

Browse files
jacksoncantrellJackson Cantrell
authored andcommitted
Add proactive-reminders skill to productivity plugin
Time-based reminders that deliver via chat when they come due. Supports natural language scheduling, recurrence, cross-team reminders, and CRM/project-tracker linking. Complements task-management: tasks track what needs doing, reminders ensure it gets done on time. Includes production-tested implementation patterns from a team running their entire CRM on Claude Cowork + MCP tools.
1 parent 0a09d9e commit 4e6ff0d

File tree

1 file changed

+231
-0
lines changed
  • productivity/skills/proactive-reminders

1 file changed

+231
-0
lines changed
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
---
2+
name: proactive-reminders
3+
description: Set time-based reminders that deliver via chat when they come due. Supports natural language times ("next Tuesday at 9am"), recurrence (daily/weekly/weekdays/monthly), and cross-team reminders ("remind Sarah to send the proposal"). Use when someone says "remind me to...", "follow up on...", "ping me about...", or "set a reminder for [person]".
4+
---
5+
6+
# Proactive Reminders
7+
8+
Go beyond static task lists — set reminders that **deliver themselves** at the right time via ~~chat. Supports natural language scheduling, recurrence, teammate reminders, and optional links to ~~CRM deals or ~~project tracker items.
9+
10+
## Connectors
11+
12+
| Connector | What It Adds |
13+
|-----------|-------------|
14+
| **~~chat** (required) | Delivers reminders as DMs when they come due |
15+
| **~~CRM** | Links reminders to deals for pipeline follow-up context |
16+
| **~~project tracker** | Links reminders to tasks/issues |
17+
| **~~calendar** | Cross-references with scheduled meetings |
18+
19+
> **Minimum requirement:** A ~~chat connector is needed to deliver reminders. Without it, this skill can still help _draft_ reminders but cannot deliver them proactively.
20+
21+
---
22+
23+
## How It Works
24+
25+
```
26+
┌─────────────────────────────────────────────────────────────┐
27+
│ PROACTIVE REMINDERS │
28+
├─────────────────────────────────────────────────────────────┤
29+
│ │
30+
│ 1. PARSE Natural language → structured reminder │
31+
│ "remind me to call Acme next Tuesday at 2pm" │
32+
│ → who: me, what: call Acme, when: Tue 2:00 PM │
33+
│ │
34+
│ 2. VALIDATE Ensure the date is in the future │
35+
│ ⚠️ If year looks wrong, auto-correct to current year │
36+
│ ⚠️ If time is ambiguous, default to 9:00 AM │
37+
│ │
38+
│ 3. STORE Save to persistent storage │
39+
│ → reminder table / file with: who, what, when, │
40+
│ created_by, recurrence, deal/task link │
41+
│ │
42+
│ 4. DELIVER When time arrives, send via ~~chat │
43+
│ → DM to the assigned person │
44+
│ → Include context (deal name, task link) │
45+
│ → Handle recurrence (create next occurrence) │
46+
│ │
47+
│ 5. MANAGE List, dismiss, reschedule │
48+
│ → "show my reminders" → list upcoming │
49+
│ → "cancel the Acme reminder" → dismiss │
50+
│ → "push that to Friday" → reschedule │
51+
│ │
52+
└─────────────────────────────────────────────────────────────┘
53+
```
54+
55+
---
56+
57+
## Usage
58+
59+
### Setting Reminders
60+
61+
When the user says "remind me to...", "follow up on...", "ping me about...", or "set a reminder for...":
62+
63+
**1. Parse the request into structured fields:**
64+
65+
| Field | Source | Default |
66+
|-------|--------|---------|
67+
| `message` | What to be reminded about | Required |
68+
| `remind_at` | When to deliver (ISO 8601 timestamp) | Required — parse from natural language |
69+
| `assigned_to` | Who gets the reminder | Current user |
70+
| `recurrence` | Repeat pattern | None |
71+
| `deal_id` / `task_id` | Linked item | None |
72+
73+
**2. Parse natural language times:**
74+
75+
| User says | Interpret as |
76+
|-----------|-------------|
77+
| "tomorrow at 2pm" | Next day, 2:00 PM in user's timezone |
78+
| "next Tuesday" | The upcoming Tuesday, 9:00 AM |
79+
| "Friday at 8am" | The upcoming Friday, 8:00 AM |
80+
| "in 2 hours" | Current time + 2 hours |
81+
| "end of day" | Today 5:00 PM |
82+
| "next week" | Next Monday, 9:00 AM |
83+
| "every weekday at 9am" | Recurrence: weekdays, starting tomorrow 9:00 AM |
84+
85+
**3. Validate the timestamp:**
86+
87+
⚠️ **Critical: Date validation.** AI models may generate timestamps with incorrect years (e.g., 2025 instead of 2026). Always validate:
88+
89+
```
90+
IF remind_at is in the past:
91+
TRY replacing year with current year
92+
IF now in the future → use corrected date
93+
TRY replacing year with current year + 1
94+
IF now in the future → use corrected date (Dec→Jan edge case)
95+
ELSE → ask user to clarify
96+
```
97+
98+
This server-side validation prevents reminders from firing immediately due to year errors.
99+
100+
**4. Confirm with the user:**
101+
102+
> ✅ Reminder set for **Tuesday, Mar 25 at 2:00 PM**: "Call Acme about the proposal"
103+
104+
Always confirm with a human-readable date (not ISO format) so the user can verify at a glance.
105+
106+
### Cross-Team Reminders
107+
108+
When someone says "remind Sarah to..." or "ping Nick about...":
109+
110+
- Set `assigned_to` to the named person
111+
- The reminder delivers to **both** the sender and recipient (group DM if possible via ~~chat)
112+
- Include attribution: "💬 Reminder from **Jackson**: Call Acme about the proposal"
113+
114+
This turns reminders into a lightweight delegation tool.
115+
116+
### Recurrence
117+
118+
| Pattern | Behavior |
119+
|---------|----------|
120+
| `daily` | Repeats every day at the same time |
121+
| `weekly` | Repeats every 7 days |
122+
| `weekdays` | Mon-Fri only; skips Sat/Sun (Friday → Monday) |
123+
| `monthly` | Same day each month |
124+
125+
When a recurring reminder is delivered:
126+
1. Mark the current occurrence as triggered
127+
2. Create the next occurrence with the appropriate offset
128+
3. For `weekdays`: if the next day is Saturday, skip to Monday
129+
130+
### Listing Reminders
131+
132+
When the user asks "what are my reminders?" or "show upcoming reminders":
133+
134+
- Show upcoming (non-triggered, non-dismissed) reminders sorted by time
135+
- Group by: Today, Tomorrow, This Week, Later
136+
- Include: message, time (relative + absolute), recurrence badge, linked deal/task
137+
- Support filtering: "show team reminders" for all, "show Nick's reminders" for specific person
138+
139+
### Dismissing / Rescheduling
140+
141+
When the user says "cancel the Acme reminder" or "push that to Friday":
142+
143+
- **Dismiss:** Mark as dismissed, confirm to user
144+
- **Reschedule:** Update `remind_at`, confirm new time
145+
- **Ownership check:** Only the assigned person or creator should be able to dismiss
146+
147+
---
148+
149+
## Delivery Mechanism
150+
151+
Reminders need a **background process** to check for due reminders and deliver them. Implementation options:
152+
153+
### Option A: Cron / Scheduled Function (Recommended)
154+
Run a check every 5-15 minutes:
155+
```
156+
1. Query: SELECT * FROM reminders WHERE remind_at <= NOW() AND triggered = false AND dismissed = false
157+
2. For each due reminder:
158+
a. Send DM via ~~chat to assigned_to
159+
b. Mark as triggered
160+
c. If recurring, create next occurrence
161+
3. Log delivery for analytics
162+
```
163+
164+
### Option B: Calendar Integration
165+
Create a ~~calendar event for each reminder. The calendar handles delivery natively. Trade-off: no recurrence control, clutters calendar.
166+
167+
### Option C: Chat Scheduled Messages
168+
Use ~~chat's scheduled message API (e.g., Slack's `chat.scheduleMessage`). Trade-off: limited to single delivery, no recurrence, harder to manage.
169+
170+
**Option A is recommended** because it supports recurrence, cross-team delivery, and integrates naturally with CRM/project-tracker links.
171+
172+
---
173+
174+
## Storage Schema
175+
176+
Reminders need persistent storage. Recommended schema:
177+
178+
```sql
179+
CREATE TABLE reminders (
180+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
181+
created_by text NOT NULL, -- who set the reminder
182+
assigned_to text NOT NULL, -- who gets reminded
183+
remind_at timestamptz NOT NULL, -- when to deliver
184+
message text NOT NULL, -- what to remind about
185+
deal_id uuid, -- optional ~~CRM link
186+
task_id text, -- optional ~~project tracker link
187+
recurrence text CHECK (recurrence IN ('daily', 'weekly', 'weekdays', 'monthly')),
188+
dismissed boolean NOT NULL DEFAULT false,
189+
triggered boolean NOT NULL DEFAULT false,
190+
created_at timestamptz NOT NULL DEFAULT now()
191+
);
192+
193+
CREATE INDEX idx_reminders_pending
194+
ON reminders (remind_at)
195+
WHERE triggered = false AND dismissed = false;
196+
```
197+
198+
Alternative: For teams without a database, use a `REMINDERS.md` file (similar to how `task-management` uses `TASKS.md`), but note this cannot support background delivery.
199+
200+
---
201+
202+
## Integration with task-management
203+
204+
This skill complements `task-management`:
205+
206+
| | task-management | proactive-reminders |
207+
|---|---|---|
208+
| **Purpose** | Track what needs doing | Ensure it gets done on time |
209+
| **Storage** | TASKS.md file | Database or file |
210+
| **Delivery** | User checks manually | Push notification at set time |
211+
| **Recurrence** | No | Yes |
212+
| **Cross-team** | No (single user) | Yes (remind teammates) |
213+
| **Time-based** | No | Yes |
214+
215+
They work best together: use `task-management` for your backlog, use `proactive-reminders` for time-sensitive follow-ups.
216+
217+
---
218+
219+
## Example Implementation
220+
221+
See [Dyrt's standup bot](https://github.com/dyrt-labs/standup-bot) for a production implementation that includes:
222+
- Natural language parsing via Claude → ISO timestamp
223+
- Server-side year auto-correction (handles AI model date errors)
224+
- 15-minute cron delivery via Cloudflare Workers
225+
- Slack DM delivery with group DM for cross-team reminders
226+
- Supabase PostgreSQL storage with the schema above
227+
- Recurrence handling (daily/weekly/weekdays/monthly)
228+
- CRM deal linking for sales follow-up context
229+
- Dashboard UI for viewing and managing reminders
230+
231+
Built by an 11-person waste management team running their entire CRM and operations stack on Claude Cowork + MCP tools.

0 commit comments

Comments
 (0)