From work
Complete daily inbox triage — orchestrates email, Slack, messengers, and Apple Notes into one unified command. Classifies all actionable items, auto-archives noise, creates a single Notion "Daily Review" task for quick actions (<2 min), and surfaces deep-work items as separate tasks. Draft replies included as proposed text — never auto-sent without user confirmation. Trigger on: "daily triage", "triage everything", "process all inboxes", "morning triage", "inbox review", "gtd daily", "do my daily review", "check everything", "what needs my attention today", or any combination of "triage" + multiple platforms.
How this skill is triggered — by the user, by Claude, or both
Slash command
/work:gtd-daily-triageThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run all 4 GTD triage pipelines (email, Slack, messengers, Apple Notes) in a single command. Aggregate results into one Notion Daily Review task, write individual platform reports, and present a combined summary.
Run all 4 GTD triage pipelines (email, Slack, messengers, Apple Notes) in a single command. Aggregate results into one Notion Daily Review task, write individual platform reports, and present a combined summary.
CRITICAL: Never send any message to any real person without explicit user confirmation. Proposed replies go inside Daily Review bullets as draft text. Do NOT call any send/post tool.
TOKEN EFFICIENCY:
- Phase 0: 7 rule file reads + osascript scan run in parallel
- Phase 1: email fetch + Slack fetch run simultaneously (both API, no browser)
- Phase 4: archive + mark-as-read + delete run simultaneously
- Browser (messengers) runs after API phases — never in parallel with browser
Load ALL in parallel during Phase 0:
| Sub-skill | File |
|---|---|
plugins/work/skills/gtd-email-triage/sender-rules.json | |
plugins/work/skills/gtd-email-triage/subject-patterns.json | |
| Slack | plugins/work/skills/gtd-slack-triage/channel-rules.json |
| Slack | plugins/work/skills/gtd-slack-triage/message-patterns.json |
| Messengers | plugins/work/skills/gtd-messengers-triage/platform-rules.json |
| Messengers | plugins/work/skills/gtd-messengers-triage/message-patterns.json |
| Apple Notes | plugins/work/skills/gtd-apple-notes-triage/note-rules.json |
Run in parallel:
Date + paths — determine TODAY (YYYY-MM-DD), ISO week number WEEK_NUM, and Obsidian weekly folder:
100 Periodics/Weekly/Week [WEEK_NUM]/
Load all 7 rule files (parallel reads)
Apple Notes scan — run osascript via Bash to read all non-deleted notes:
tell application "Notes"
repeat with f in folders
if name of f is not "Recently Deleted" then
repeat with n in notes of f
-- output: name, body (first 2000 chars)
end repeat
end if
end repeat
end tell
Use Python wrapper to parse HTML bodies. Returns all notes with name + HTML body.
Check for duplicate Daily Review — search Notion for "Daily Review — [TODAY]" to avoid creating duplicates (skip creation in Phase 6 if found).
Print: [Daily Triage — TODAY starting: Email | Slack | Notes loaded]
Run email and Slack fetches simultaneously. Apply classification in the same step.
manage_accounts(operation: "list")manage_email(operation: "search", email: "<account>", query: "in:inbox is:unread", maxResults: 50)
Paginate if exactly 50 returned (use before:YYYY/MM/DD on oldest email date). Never stop at 50.subject-patterns.json → keep_patterns) → ACTIONABLE_QUICKsubject-patterns.json → skip_patterns) → ARCHIVEsender-rules.json → by_sender)sender-rules.json → by_domain)sender-rules.json → by_name_contains)Fetch all 4 channel types in parallel:
conversations_unreads(channel_types: "dm", include_messages: true, max_channels: 50, max_messages_per_channel: 20)
conversations_unreads(channel_types: "group_dm", include_messages: true, max_channels: 50)
conversations_unreads(channel_types: "partner", include_messages: true, max_channels: 50)
conversations_unreads(channel_types: "internal", include_messages: true, max_channels: 50)
Classify using channel-rules.json + message-patterns.json in same priority order as gtd-slack-triage.
DMs from humans → minimum ACTIONABLE_QUICK. @mentions → minimum ACTIONABLE_QUICK.
Classify each note using note-rules.json:
<a href= tags and stripped text < 100 chars → auto-process (no user needed)<img src="data:image/ and stripped text < 50 chars → extract image for reviewPrint: Email: N unread across M accounts | Slack: N msgs | Notes: N
For each LINK_ONLY note — extract URLs from <a href=...> and apply domain rules:
Instagram / TikTok → append URL(s) to Clippings/Instagram Reels - Unsorted.md (bulk file)
X/Twitter → create Clippings/Thread by @[handle].md
Other → create individual file in Clippings/
Frontmatter format:
---
source: [url]
author: "[name]"
saved: [TODAY]
tags: [clipping, platform]
---
For SCREENSHOT notes: extract base64 images to /tmp/daily-triage-screenshots/[name].png.
Use Read tool to analyze each image visually and determine content + suggested action.
Collect in decision gate list (Phase 5).
Open all 6 platform tabs, then extract sequentially (one at a time):
| Platform | URL | Unread Strategy |
|---|---|---|
| X | https://x.com/messages | Scan for bold/unread styling |
https://linkedin.com/messaging/ | Click "Unread" filter | |
https://facebook.com/messages/ | Click "Unread" tab | |
https://instagram.com/direct/inbox/ | Check Primary + General + Requests | |
https://web.whatsapp.com/ | Click "Unread" filter; report if QR code shown | |
| Telegram | https://web.telegram.org/ | Click "Unread"; skip if render fails |
Use get_page_text for list extraction (~500 tokens/platform).
Classify using platform-rules.json + message-patterns.json.
Read-only — never click reply, send, or interact with message content.
If a platform is inaccessible (QR code, login prompt, render failure): report and skip.
Run simultaneously:
Gmail archive — for each account with ARCHIVE emails, build query:
from:sender1 OR from:sender2 OR subject:pattern → queue_operations batch-archive
Navigate Gmail /u/N/#search/[query] → Select all → Archive
Slack mark-as-read — for channels where 100% of messages are SPAM:
conversations_mark(channel_id, ts: latest_message_ts)
Never mark DMs. Never mark channels with any ACTIONABLE message.
Apple Notes delete — osascript loop to delete all processed LINK_ONLY notes:
repeat with n in notes of folder "Notes"
if body of n contains "instagram.com" and name of n is "New Note" then
delete n
end if
end repeat
(Adapt pattern per note type from scan results.)
Report: Archived N emails | Marked N Slack channels | Deleted N notes
Skip if zero items need decisions.
Present ONE consolidated table for all items requiring user judgment:
| # | Source | Content | Suggested Action |
|---|--------|---------|-----------------|
| 1 | Apple Notes | "Meeting notes: qCloudy..." | Notion task (High) |
| 2 | Apple Notes screenshot | Slack thread: stale infra debt | Notion task (Medium) |
| 3 | Email (ambiguous) | "Checking in on project..." | Need body read |
Wait for user response. Execute confirmed actions. Then continue.
Clean up /tmp/daily-triage-screenshots/ when done.
QUICK (<2 min) → Daily Review bullet:
DEEP (>2 min) → Separate Notion task:
If "Daily Review — [TODAY]" already exists in Notion (from Phase 0 check): append new items to it via notion-update-page. Otherwise create fresh.
Task name: Daily Review — [TODAY]
Priority: High
Status: Backlog
Task type: Low / Operational
data_source_id: 9a01d2e3-d4bc-427a-ba05-29a4c0db5032
Content:
Quick decisions and minor replies from today's triage.
---
- [Email] **Person (Company)** — what to do. Draft: "Proposed reply text here"
- [Slack #channel] **Person** — what to do, context
- [LinkedIn] **Person** — what to do
- [Phone] — check WhatsApp + Telegram for unreads
Rules for bullets:
[Source] prefix: [Email], [Slack #channel-name], [LinkedIn], [Facebook], [Instagram], [Phone], [Productive], [Apple Notes]Draft: "..." with proposed message text in quotesFor each DEEP item, create a task with:
Write individual triage reports to 100 Periodics/Weekly/Week [WEEK_NUM]/:
[TODAY]-email-triage.md — top priorities + per-account actionable/relevant lists + archived count[TODAY]-slack-triage.md — top priorities + DMs + channels + marked-as-read[TODAY]-messengers-triage.md — per-platform results + inaccessible platforms[TODAY]-apple-notes-triage.md — auto-clipped + screenshots + text notesUse the same output format as the individual GTD triage skills. Only write a report file for platforms that had items (skip if 0 unread on a platform).
## Daily Triage — [TODAY]
### Top Priorities (N)
1. **[Person/Platform]** — [why urgent]
2. ...
### Notion
- Daily Review task created with N quick items
- N separate deep-work tasks created
### Stats
Email: N unread → N archived (X% cached) | Slack: N msgs → N channels marked (Y% deterministic)
Messengers: N platforms (M accessible, K inaccessible) | Notes: N → J clipped, K text/pending
Auto-processed: N total | User decisions needed: M
"Backlog" (API rejects "In Progress" on create)After each run, identify items classified by heuristics (not rules):
npx claudepluginhub rachnog/alex-honchar-claude-for-life --plugin workScans unread emails from Gmail or Hey.com, scores by priority (VIP, urgency, deadlines), classifies them, saves relevant ones as vault notes, and generates a triage report.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.