skills/todo/SKILL.md
Persistent to-do list with proactive reminders. Auto-captures action items from start-of-day, emails, Slack, Linear, and manual input. Surfaces top items at session start and reminds on untouched high-priority items. Use when managing tasks, adding to-dos, checking the list, completing items, or snoozing reminders.
npx skillsauth add abhiroopb/synthetic-mind todoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A persistent to-do system stored at ~/.gemini/todo.json. The user rarely checks a list manually — proactive prompting is the core feature.
Each item in items[]:
{
"id": "uuid-v4",
"title": "Short action description",
"source": "Gmail | Slack | Linear | Notion | Figma | Google Docs | Calendar | manual",
"source_ref": "optional link or ID for context",
"priority": 2,
"status": "open",
"due": "2026-03-11T17:00:00Z",
"snooze_until": null,
"created_at": "2026-03-10T10:00:00Z",
"completed_at": null,
"context": "Short note or link for reference"
}
Fields:
id — UUID v4, generated on creationtitle — concise action statement (start with a verb: "Reply to…", "Review…", "Follow up on…")source — where the item came fromsource_ref — URL, message ID, or issue ID for one-click contextpriority — 1=urgent, 2=high, 3=normal, 4=lowstatus — open, in-progress, done, snoozeddue — optional ISO 8601 datetimesnooze_until — ISO 8601 datetime; item is hidden until this timecreated_at — ISO 8601 datetimecompleted_at — ISO 8601 datetime, set when status → donecontext — short description or link for quick referenceAlways use python3 to read/write ~/.gemini/todo.json:
# Read all items
python3 -c "
import json
with open('$HOME/.gemini/todo.json') as f:
data = json.load(f)
print(json.dumps(data, indent=2))
"
# Add an item
python3 -c "
import json, uuid
from datetime import datetime, timezone
path = '$HOME/.gemini/todo.json'
with open(path) as f:
data = json.load(f)
item = {
'id': str(uuid.uuid4()),
'title': '<TITLE>',
'source': '<SOURCE>',
'source_ref': '<OPTIONAL_LINK>',
'priority': 3,
'status': 'open',
'due': None,
'snooze_until': None,
'created_at': datetime.now(timezone.utc).isoformat(),
'completed_at': None,
'context': '<OPTIONAL_CONTEXT>'
}
data['items'].append(item)
with open(path, 'w') as f:
json.dump(data, f, indent=2)
print(f'✅ Added: {item[\"title\"]} (P{item[\"priority\"]})')
"
# Complete an item by ID
python3 -c "
import json
from datetime import datetime, timezone
path = '$HOME/.gemini/todo.json'
with open(path) as f:
data = json.load(f)
for item in data['items']:
if item['id'] == '<ITEM_ID>':
item['status'] = 'done'
item['completed_at'] = datetime.now(timezone.utc).isoformat()
print(f'✅ Done: {item[\"title\"]}')
break
with open(path, 'w') as f:
json.dump(data, f, indent=2)
"
# Snooze an item
python3 -c "
import json
path = '$HOME/.gemini/todo.json'
with open(path) as f:
data = json.load(f)
for item in data['items']:
if item['id'] == '<ITEM_ID>':
item['status'] = 'snoozed'
item['snooze_until'] = '<ISO_DATETIME>'
print(f'😴 Snoozed: {item[\"title\"]} until <HUMAN_TIME>')
break
with open(path, 'w') as f:
json.dump(data, f, indent=2)
"
# Delete an item by ID
python3 -c "
import json
path = '$HOME/.gemini/todo.json'
with open(path) as f:
data = json.load(f)
data['items'] = [i for i in data['items'] if i['id'] != '<ITEM_ID>']
with open(path, 'w') as f:
json.dump(data, f, indent=2)
print('🗑️ Deleted')
"
At the start of every session (after memory context injection), read the to-do list and present active items. This is the most important behavior — the user does not check the list themselves.
Display format:
## ✅ To-Do List (X open items)
1. 🔴 [P1] **Reply to Sarah's escalation email** — Gmail, 3h ago
2. 🟠 [P2] **Review PR #4521 for tip buttons** — GitHub, 1d ago
3. 🟡 [P3] **Update Q1 OKRs in Google Doc** — Google Docs, 2d ago
4. 🔵 [P4] **Read the new POS release notes** — Notion, 3d ago
5. 🟡 [P3] **Follow up with Andrea on pre-auth tipping** — Slack, 1d ago
> 📋 +4 more items (2 normal, 2 low priority)
**Actions:** Reply with a number to act — `1` = mark done, `2` = snooze, `3` = open context, or "show all"
Rules:
+N more items (X high, Y normal, Z low)snooze_until has passed (set status back to open, clear snooze_until)donesnooze_until in the futurePriority indicators:
When processing any input source, automatically create to-do items for actionable items. Do NOT ask for approval — just create them silently and mention what was added at the end.
Capture triggers:
Auto-capture rules:
source_ref to the URL/ID of the original item for one-click navigation📌 Added 3 items to your to-do listWhen the user completes an action that maps to an existing to-do item:
done✅ Marked done: "Reply to Sarah's escalation email"The user can snooze items with natural language:
Before the session ends (when the user seems done or says goodbye), check for untouched high-priority items:
⚠️ You still have 2 high-priority items open:
1. 🔴 [P1] Reply to Sarah's escalation email (3h ago)
2. 🟠 [P2] Review PR #4521 for tip buttons (1d ago)
Want to act on these before we wrap up?
When the start-of-day skill runs, the to-do list should be surfaced as Section 0 — before Slack, Gmail, Calendar, etc:
## ✅ To-Do List (8 open items)
### 🔴 Urgent / 🟠 High Priority
1. 🔴 [P1] **Reply to Sarah's escalation email** — Gmail, 3h ago
2. 🟠 [P2] **Review PR #4521 for tip buttons** — GitHub, 1d ago
3. 🟠 [P2] **Follow up with Blake on checkout redesign** — Slack, 2d ago
### 🟡 Normal
4. 🟡 [P3] **Update Q1 OKRs in Google Doc** — Google Docs, 2d ago
5. 🟡 [P3] **Follow up with Andrea on pre-auth tipping** — Slack, 1d ago
> 📋 +3 more items (1 normal, 2 low priority) — say "show all" to see them
---
After reviewing to-dos, continuing to Slack unreads...
After the triage surfaces new actionable items that the user skips, auto-capture them as to-do items.
The user interacts with to-do items inline using numbers:
1 or done 1 — mark item #1 as donesnooze 2 — snooze item #2 (default: 2 hours)snooze 2 until tomorrow — snooze with specific timeopen 3 or 3 — show context / open source linkshow all — show all items including low priorityadd: <description> — manually add a to-do item (P3 by default)delete 4 — remove an itemprioritize 3 as P1 — change prioritydone for more than 7 days are removed from the list on next session start.⏰ This item has been open for 5 days — still relevant?testing
Track TV shows and movies with Trakt.tv. Search, get watchlist, history, up-next, recommendations, trending, calendar, ratings, stats, add/remove from watchlist, mark watched, rate, and check in. Use when asked about what to watch, TV shows, movies, watch history, or Trakt.
development
Send and receive SMS messages via Twilio API. Used for text message notifications, forwarding important alerts, and two-way SMS communication.
documentation
Organizes files in the local Downloads folder into proper folders. Use when asked to organize, sort, or file downloaded documents.
tools
Book and manage appointments on Sutter Health MyHealth Online portal. Uses browser automation via Playwright MCP to interact with the patient portal.