daily-plan
Purpose
Generate your daily plan with full context awareness. Automatically gathers information from your calendar, tasks, meetings, relationships, and weekly progress to create a focused plan with genuine situational awareness.
Usage
/daily-plan— Create today's daily plan/daily-plan tomorrow— Plan for tomorrow (evening planning)/daily-plan --setup— Re-run integration setup
Tone Calibration
Before executing this command, read System/user-profile.yaml → communication section and adapt tone accordingly (see CLAUDE.md → "Communication Adaptation").
Step 0: Demo Mode Check
Before anything else, check if demo mode is active:
- Read
System/user-profile.yaml - Check
demo_modevalue - If
demo_mode: true:- Display banner: "Demo Mode Active — Using sample data from System/Demo/"
- Use demo paths and skip live integrations
- If
demo_mode: false: Proceed normally
Step 1: Background Checks (Silent)
Run these silently without user-facing output:
- Update check:
check_for_updates(force=False)- store notification if available - Self-learning checks: Run changelog and learning review scripts if due
- Search index refresh: Run
qmd update && qmd embedto refresh vault search index with any overnight changes (meetings processed, files edited, etc.). Ifqmdis not installed, skip silently. - People index refresh: Call
build_people_indexfrom Work MCP. This keeps the People Directory current so person lookups throughout the day are fast. Takes <2 seconds. - Innovation synthesis (silent): Call
synthesize_changelog()andsynthesize_learnings()from Improvements MCP. These run in background and populate the backlog — results are surfaced in Step 1.5 below. - Granola check (silent): Granola meeting sync uses the desktop app's stored credentials automatically. No migration check needed.
Step 1.5: Innovation Spotlight (Concierge)
After background checks complete, check for noteworthy backlog activity:
- Call
list_ideas(status="active", min_score=70)from Improvements MCP - Check
System/.synthesis-state.jsonfor recent synthesis activity (last 7 days) - If there are AI-authored or recently enriched ideas, pick the most impactful one
Surface as a brief spotlight in the plan output (1-2 lines max):
Innovation Spotlight: Claude Code shipped native memory (v2.1.32) — this could simplify idea-006 (Session Memory MCP). Run
/dex-improve idea-006to explore.
Rules:
- Show at most 1 spotlight per daily plan (don't overwhelm)
- Rotate through ideas — don't show the same one twice in a row
- Only show if there's genuine "Why Now?" urgency (new evidence in last 7 days)
- If no recent synthesis activity, skip this section entirely
- Never block the plan for this — it's a helpful aside, not a gate
Step 2: Morning Journal Check (If Enabled)
If journaling.morning: true in user-profile.yaml, check for today's morning journal and prompt if missing.
Step 3: Monday Weekly Planning Gate
If today is Monday and week isn't planned, offer to run /week-plan first.
Step 4: Yesterday's Review Check (Soft Gate)
Check for yesterday's review and extract context (open loops, tomorrow's focus, blocked items).
Step 5: Context Gathering (ENHANCED)
Gather context from all available sources. This is where the magic happens.
5.1 Midweek Progress Check (NEW)
Use: get_week_progress()
This is critical for genuine situational awareness. Extract:
- Day of week and days remaining
- Weekly priority status (complete / in_progress / not_started)
- Warnings for priorities with no activity
Surface this prominently:
"It's Wednesday. Here's where you are on this week's priorities:
- ✅ Ship pricing page — Complete (finished Monday)
- 🔄 Review proposal — In progress (2 of 5 tasks done)
- ⚠️ Customer interviews — Not started (no activity yet)
You have 2 days left this week. Priority 3 needs attention."
5.2 Calendar Capacity Analysis (NEW)
Use: analyze_calendar_capacity(days_ahead=1, events=[...from calendar MCP...])
Understand the shape of today:
- Day type: stacked / moderate / open
- Meeting count and hours
- Free blocks available
- Recommendation: What kind of work fits today
Surface this:
"📅 Today's shape: Moderate (4 meetings, 3 hours total)
Free blocks:
- 8:00-9:30 AM (90 min) — Morning focus time
- 2:00-4:00 PM (120 min) — Afternoon block
Recommendation: Good for medium tasks and meeting prep. Deep work fits the 2-4pm block."
5.3 Meeting Intelligence (NEW)
For each meeting today:
Use: get_meeting_context(meeting_title="...", attendees=[...])
Get genuine context, not just attendee names:
- Related project: What project is this connected to?
- Project status: What's outstanding? What's blocked?
- Outstanding tasks with attendees: What do you owe them? What do they owe you?
- Prep suggestions: What should you review before this meeting?
Surface this with surprise and delight:
"📍 Meeting: Acme Quarterly Review (2pm with Sarah Chen, Mike Ross)
Related project: Acme Implementation (Phase 2)
- Status: On track, but pricing section still in draft
- Outstanding: You owe Sarah the pricing proposal
Prep suggestion: Review proposal draft, prepare pricing options. Block 30 min before this meeting?"
5.4 Commitment Tracking (NEW)
Use: get_commitments_due(date_range="today")
Surface things you said you'd do:
"⚡ Commitments due today:
- You told Mike you'd get back to him by Wednesday (from Monday 1:1)
- Follow up on competitive analysis (from Acme meeting)"
5.5 Task Scheduling Suggestions (NEW)
Use: suggest_task_scheduling(include_all_tasks=False, calendar_events=[...])
Match tasks to available time based on effort classification:
"📋 Scheduling suggestions:
Task Effort Suggested Time Write Q1 strategy doc Deep work (2-3h) Tomorrow (you have a 3h morning block) Review Sarah's proposal Medium (1h) Today 2-3pm (before Acme meeting) Reply to Mike Quick (15min) Between meetings ⚠️ Heads up: You have 2 deep work tasks but today's too fragmented. Consider protecting tomorrow morning."
5.6 Semantic Context Enrichment (if QMD available)
This step runs automatically when QMD is installed via /enable-semantic-search. It adds a semantic search layer on top of the standard context gathering to surface connections that keyword search misses.
Check if QMD MCP tools are available by calling qmd_status. If available:
-
For each meeting today, run:
qmd_search(query="[meeting topic] [attendee names]", limit=3)Surface: past discussions, related decisions, relevant commitments that share meaning but not keywords with this meeting. Example: a meeting about "customer onboarding" finds notes about "activation rates" and "time to value".
-
For each weekly priority that's lagging, run:
qmd_search(query="[priority description]", limit=3)Surface: vault content that advances or relates to this priority but wouldn't appear in a keyword search. Especially useful for finding forgotten context about stalled work.
-
Cross-topic connection scan:
qmd_search(query="[today's key themes combined]", limit=5)Surface: unexpected connections between today's meetings, tasks, and priorities. This is where semantic search shines — finding that a 2pm customer call relates to a PRD you wrote last month using completely different terminology.
-
Merge with existing context — only add genuinely new insights. Don't duplicate what Steps 5.1-5.5 already found. Mark semantic results with their source so the plan output can distinguish them.
What this enables in the plan output:
- Meeting context sections include "Also relevant:" with thematically related past discussions
- Priority recommendations cite relevant vault content discovered by meaning
- "Heads Up" section catches connections between seemingly unrelated items
- Focus recommendations are informed by deeper vault knowledge
If QMD is not available: Skip silently. Steps 5.1-5.5 and 5.7 provide full context via standard methods.
5.7 Reminders Completion Sync (Dex Today → Dex)
Check if any tasks were completed on phone since the last plan:
Use: reminders_list_completed(list_name="Dex Today")
For each completed item:
- Match to a Dex task by title
- Update task status via Work MCP:
update_task_status(task_title="...", status="d") - Surface what was synced:
"📱 Synced from phone:
- ✅ "Follow up with Hero Coders" — marked done in Dex"
If nothing to sync: Skip silently.
5.8 Email Intelligence (if Gmail connected)
Check System/integrations/config.yaml for google-workspace.enabled: true.
If enabled and MCP healthy:
- Get unread count and priority emails from monitored labels
- Flag emails needing reply (> 48h since received, from key contacts in
05-Areas/People/) - Surface email threads with today's meeting attendees
Include in plan:
"Email: [X] unread, [Y] need replies. [Z] threads with today's meeting attendees."
If unhealthy: skip silently (graceful degradation -- no error to user).
5.9 Teams Intelligence (if Teams connected)
Check System/integrations/config.yaml for teams.enabled: true.
If enabled and MCP healthy:
- Get unread messages from priority channels
- Surface DMs needing response
- Check for mentions
Include in plan:
"Teams: [X] unread chats, [Y] mentions. [Z] threads with today's meeting attendees."
If BOTH Slack and Teams enabled:
- Show both digests, clearly labeled: "Slack: ..." and "Teams: ..."
- Deduplicate if the same person appears in both (merge context, label the source)
- Present side by side in the plan output under a combined "Chat Intelligence" heading
If unhealthy: skip silently (graceful degradation -- no error to user).
5.10a Mobile Capture Check (Dex Inbox)
Use: reminders_list_items(list_name="Dex Inbox")
If items found, surface:
📱 Captured on phone (3 items in Dex Inbox):
- "Follow up with Peter about roadmap" — captured yesterday 4:32pm
- "Look into Rovo for in-app guides" — captured today 2:15pm
- "Send Anastasia the productized offering doc" — captured today 11:45am
Triage these now? I'll help assign pillars and priorities.
Triage flow:
- Present each item
- Infer pillar (using existing smart pillar inference)
- Confirm with user
- Create task via Work MCP
process_inbox_with_dedup - Mark Reminder as complete via
reminders_complete_item
If Dex Inbox is empty: Skip silently (no "0 items captured" noise).
5.10b Standard Context Gathering
Also gather:
- Calendar: Today's meetings with times and attendees
- Tasks: P0, P1, started-but-not-completed, overdue
- Week Priorities: This week's Top 3
- Work Summary: Quarterly goals context (if enabled)
- People: Context for meeting attendees
- Self-Learning Alerts: Changelog updates, pending learnings
Step 6: Synthesis
Combine all gathered context into actionable recommendations:
Focus Recommendation
Generate 3 recommended focus items based on:
- P0 tasks (highest weight)
- Weekly priority alignment (especially lagging priorities!)
- Meeting prep needs
- Commitments due
The system should actively recommend, not just list:
"Based on your week progress and today's shape, I recommend focusing on:
- Prep for Acme meeting — Priority 2 is lagging and this meeting is critical
- Reply to Mike — Commitment due today
- Task X from Priority 1 — Keeps momentum on your shipped priority"
Meeting Prep (Enhanced)
For each meeting, show:
- Who's attending + People/ context
- Related project status
- Outstanding tasks with attendees
- Suggested prep time and what to prepare
Heads Up (Enhanced)
Flag potential issues:
- Weekly priorities with no activity (midweek warning)
- Commitments due today
- Back-to-back meetings
- P0 items with no time blocked
- Deep work tasks with no suitable slot this week
Step 7: Generate Daily Plan
Create 07-Archives/Plans/YYYY-MM-DD.md:
---
date: YYYY-MM-DD
type: daily-plan
integrations_used: [calendar, tasks, people, work-intelligence]
---
# Daily Plan — {{Day}}, {{Month}} {{DD}}
## TL;DR
- {{1-2 sentence summary including week progress}}
- {{X}} meetings today, day is {{stacked/moderate/open}}
- {{Key focus area based on week priorities}}
---
## 📊 Week Progress (Midweek Check)
**Day {{X}} of 5** — {{days_remaining}} days left this week
| Priority | Status | Notes |
|----------|--------|-------|
| {{Priority 1}} | ✅ Complete | Finished {{day}} |
| {{Priority 2}} | 🔄 In progress | {{X}} of {{Y}} tasks done |
| {{Priority 3}} | ⚠️ Not started | Needs attention |
**This week's focus:** {{Recommendation based on lagging priorities}}
---
## 📅 Today's Shape
**Day type:** {{stacked/moderate/open}} ({{X}} meetings, {{Y}} hours)
**Free blocks:**
- {{Time range}}: {{Size}} — {{Recommended use}}
**Best for:** {{Quick tasks only / Medium tasks / Deep work opportunity}}
---
## ⚡ Commitments Due Today
- [ ] {{Commitment}} — from {{source}}
- [ ] {{Commitment}} — from {{source}}
---
## 🎯 Today's Focus
**If I only do three things today:**
1. [ ] {{Focus item 1}} — {{Pillar}} *(supports Week Priority #X)*
2. [ ] {{Focus item 2}} — {{Pillar}} *(supports Week Priority #Y)*
3. [ ] {{Focus item 3}} — {{Pillar}}
---
## 📍 Meetings (with Context)
### {{Time}} — {{Meeting Title}}
**Attendees:** {{Names}}
**Related project:** {{Project name}} ({{status}})
**Outstanding with them:**
- {{Task/commitment}}
**Prep needed:** {{What to review/prepare}}
**Suggested prep time:** {{Block X min before}}
---
### {{Time}} — {{Meeting Title}}
[Repeat for each meeting]
---
## 📋 Task Scheduling
| Task | Effort | Suggested Slot | Reason |
|------|--------|----------------|--------|
| {{Task}} | Deep work | {{Day/time}} | {{Reason}} |
| {{Task}} | Medium | {{Day/time}} | {{Reason}} |
| {{Task}} | Quick | Between meetings | Batch these |
{{If deep work capacity warning}}
> ⚠️ You have {{X}} deep work tasks but only {{Y}} suitable slots this week. Consider protecting time or deferring.
---
## ⚠️ Heads Up
- {{Warning about lagging weekly priority}}
- {{Commitment due today}}
- {{Back-to-back meetings}}
- {{Other flags}}
---
*Generated: {{timestamp}}*
*Week progress: {{X}}/{{Y}} priorities on track*
Step 7.5: Push Focus Tasks to Reminders (Dex → iPhone)
After generating the plan, push today's P0 and P1 focus tasks to Apple Reminders for native iOS notifications:
-
Clear yesterday's items:
Use: reminders_clear_completed(list_name="Dex Today") -
Push today's focus items: For each P0/P1 task in today's focus:
Use: reminders_create_item( list_name="Dex Today", title="Task title", notes="From Dex daily plan", due_date="YYYY-MM-DD" ) -
Confirm silently:
"📱 Pushed 3 focus tasks to iPhone Reminders (Dex Today)"
If Reminders MCP unavailable: Skip silently.
Step 8: Track Usage (Silent)
Update System/usage_log.md to mark daily planning as used.
Analytics (Silent):
Call track_event with event_name daily_plan_completed and properties:
meetings_count: number of meetings todaytasks_surfaced: number of tasks shownpriorities_count: number of priorities
This only fires if the user has opted into analytics. No action needed if it returns "analytics_disabled".
Graceful Degradation
The plan works at multiple levels:
Full Context (All MCPs available)
- Complete week progress, meeting intelligence, scheduling suggestions
- Maximum "surprise and delight"
Partial Context (Work MCP only)
- Week progress and task scheduling
- No meeting context (prompt user to add manually)
Minimal Context (No MCPs)
- Interactive flow asking about priorities
- Basic daily note
MCP Dependencies (Updated)
| Integration | MCP Server | Tools Used |
|---|---|---|
| Calendar | dex-calendar-mcp | calendar_get_today, calendar_get_events_with_attendees |
| Reminders | dex-calendar-mcp | reminders_list_items, reminders_complete_item, reminders_create_item, reminders_ensure_lists, reminders_list_completed, reminders_find_and_complete, reminders_clear_completed |
| Granola | dex-granola-mcp | get_recent_meetings |
| Work | dex-work-mcp | list_tasks, get_week_progress, get_meeting_context, get_commitments_due, analyze_calendar_capacity, suggest_task_scheduling |
| Improvements | dex-improvements-mcp | synthesize_changelog, synthesize_learnings, list_ideas |
| Google Workspace | google-workspace-mcp | Gmail query, email search (if enabled) |
| Teams | teams-mcp | teams_list_chats, teams_search_messages, teams_health_check (if enabled) |