| description | allowed-tools | argument-hint |
|---|---|---|
Read daily note, calendar, and tasks — generate a prioritized plan based on this week's intentions |
Bash, Read, Edit, Write |
(optional) focus area or project to emphasize |
Pull together everything needed to start the day with intention: weekly focus, carry-overs, calendar, and tasks — then generate a prioritized Big Three and write it into the daily note.
Before running, set these in your shell profile (e.g., ~/.zshrc or ~/.bashrc).
Never hardcode credentials or personal paths directly in this file.
# ── Required ────────────────────────────────────────────────
# Your Obsidian vault root — adjust to match your setup
# export VAULT_ROOT="$HOME/Obsidian/My Second Brain"
# Your Todoist API token — get it from todoist.com/app/settings/integrations
# export TODOIST_TOKEN="your_token_here" # never hardcode or commit this value
# ────────────────────────────────────────────────────────────TODAY=$(date +"%m-%d-%Y")
MONTH=$(date +"%B")
YEAR=$(date +"%Y")
WEEK=$(printf '%02d' $(date +%V))
DAYOFWEEK=$(date +"%A")
# Requires VAULT_ROOT to be set in your environment (see Configuration above)
DAILY_NOTE="${VAULT_ROOT}/01 Journal/Daily/${YEAR}/${MONTH}/${TODAY}.md"
WEEKLY_NOTE="${VAULT_ROOT}/01 Journal/Weekly/${YEAR}/${YEAR}-W${WEEK}.md"Read the weekly note if it exists:
cat "$WEEKLY_NOTE" 2>/dev/nullExtract these sections specifically:
## 🌱 Plan— the week's key focus and stated intentions## 🔍 Reflect— last week's wins/lessons (context for this week)## 🧼 Cleanup Checklist— any checked/unchecked items
If the weekly note doesn't exist or has no 🌱 Plan content, note that and continue — the task sources will carry the prioritization.
cat "$DAILY_NOTE" 2>/dev/nullIf it exists, check for any pre-filled content in:
- Big Three — were intentions already set?
- Logistics — any appointments already noted?
- Daily Focus — any vibe word set?
If it doesn't exist, create it from the daily note template:
TEMPLATE="${VAULT_ROOT}/99 Meta/Note Templates/Daily Note Template.md"
DAILY_DIR="${VAULT_ROOT}/01 Journal/Daily/${YEAR}/${MONTH}"
mkdir -p "$DAILY_DIR"Then use the Write tool to create the daily note from the template content, substituting:
- The date heading:
## {Weekday}, {Month} {Day}, {Year} - The frontmatter
created:field with today's date inYYYY-MM-DDformat
Look at the last 3 daily notes (before today) in this month and the previous month:
find "${VAULT_ROOT}/01 Journal/Daily" \
-name "*.md" \
-not -name "${TODAY}.md" \
| sort | tail -4From each recent note, extract:
- Tomorrow's Seed — the carry-over task the previous day set for today
grep -A1 "Tomorrow's Seed" "$note" | tail -1
- Unfinished Big Three — items in the Big Three that don't appear to have been logged as done
- Open inline tasks — lines matching
- [ ]in the log section
# Requires TODOIST_TOKEN to be exported in your shell environment (see Configuration above)
# Never hardcode your token here
curl -s "https://api.todoist.com/api/v1/tasks?filter=today%20%7C%20overdue" \
-H "Authorization: Bearer $TODOIST_TOKEN"Parse the JSON response. For each task extract:
content— task name (strip markdown links to just the text)due.datetimeordue.date— when it's duepriority— Todoist priority (4=urgent, 3=high, 2=medium, 1=normal)description— any notes
Group tasks:
- Time-sensitive: tasks with a
due.datetime(specific time today) — these anchor the schedule - Due today: tasks with
due.date= today - Overdue: past due date — need explicit prioritization decision
Note: The AppleScript block below requires macOS Calendar access. Grant permission under
System Settings → Privacy & Security → Automation if prompted.
osascript << 'APPLESCRIPT'
tell application "Calendar"
set todayStart to (current date) - (time of (current date))
set todayEnd to todayStart + 86399
set output to {}
repeat with c in calendars
if name of c is not "Birthdays" and name of c is not "US Holidays" and name of c is not "Siri Suggestions" then
try
set evts to (every event of c whose start date >= todayStart and start date <= todayEnd)
repeat with e in evts
set end of output to ((summary of e) & " | " & (name of c) & " | " & ((start date of e) as string))
end repeat
end try
end if
end repeat
return output
end tell
APPLESCRIPTSkip: Birthdays, US Holidays, Siri Suggestions (noise calendars).
For each event, note:
- Event name and calendar
- Start time — these become hard blocks in the day plan
- Duration (if available)
Find open TaskNotes tasks scheduled for today or earlier:
grep -rl "status: open" "${VAULT_ROOT}/TaskNotes" --include="*.md" 2>/dev/null \
| while read f; do
SCHED=$(grep "^scheduled:" "$f" | sed 's/scheduled: *//')
TITLE=$(grep "^title:" "$f" | sed 's/title: *//' | tr -d '"')
PROJECT=$(grep -A2 "^projects:" "$f" | grep "^\s*-" | head -1 | sed 's/.*\[\[//' | sed 's/\]\].*//')
PRI=$(grep "^priority:" "$f" | sed 's/priority: *//')
[ -n "$TITLE" ] && echo "${SCHED}|${PRI}|[${PROJECT}] ${TITLE}"
done | sortWith all inputs gathered, build the prioritized plan using this logic:
Priority Scoring (highest wins Big Three):
- Carry-over Tomorrow's Seed from yesterday — high weight (was already identified as #1)
- Todoist priority 4 (urgent) due today
- Weekly Plan focus — tasks that align with
🌱 Plankey focus - Calendar-blocked work that requires prep
- Todoist priority 3 (high) due today
- Overdue tasks — need to be scheduled or explicitly deferred
- TaskNotes high-priority items
- Open inline tasks from recent notes
Big Three selection rules:
- No more than 3 items
- Each should be completable in a single focused session (not "all day")
- At least one should align with the weekly focus
- If there's a morning appointment/standup, the first item should be achievable before it
Logistics = calendar events with specific times today
Use the Edit tool to write into the daily note. Only populate sections that still have placeholder text — never overwrite existing content.
Populate #### The Big Three / Today's Intention:
Replace placeholder text after What are the 3 non-negotiable tasks for today? — the section looks like:
What are the 3 non-negotiable tasks for today?
1.
2.
3.
Write the three chosen tasks.
Populate #### Logistics:
Replace Any critical appointments or deadlines? with a bulleted list of today's calendar events and Todoist time-specific tasks.
Populate #### Daily Focus:
If empty, suggest a single focus word that reflects the day's theme (e.g., "Momentum" if catching up on overdue items, "Deep Work" if the week plan emphasizes focus, "Connection" if heavy on meetings).
Print the full briefing to the terminal before writing:
╔══════════════════════════════════════════════════════════════╗
║ Good morning — {Weekday}, {Month} {Day} ║
╚══════════════════════════════════════════════════════════════╝
📅 CALENDAR TODAY
{time} — {event name} ({calendar})
{time} — {event name} ({calendar})
(none scheduled) ← if empty
🗓️ THIS WEEK'S FOCUS [Week {N}]
"{key focus from weekly 🌱 Plan section}"
(No weekly note found — plan inferred from tasks) ← if missing
⏭️ CARRY-OVERS
Yesterday's Seed: "{Tomorrow's Seed text}"
Also unfinished:
• {item from Big Three not logged as done}
📋 TASK LANDSCAPE
Overdue ({N}):
• [{priority}] {task} — {days overdue} days late
Due today ({N}):
• [{priority}] {task}
TaskNotes scheduled today:
• [{project}] {task} ({priority})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⭐ TODAY'S PLAN
Daily Focus: {suggested word}
Big Three:
1. {task} ← {reason: aligns with weekly focus / carry-over / urgent}
2. {task} ← {reason}
3. {task} ← {reason}
Schedule:
{time} — {calendar event}
{time} — {time-blocked task}
After hours: {any evening or flexible items}
On the radar (do if time allows):
• {next-priority item}
• {next-priority item}
Defer/decide later:
• {overdue item not in Big Three} — consider rescheduling or dropping
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Written to daily note ✓]
[Daily note created from template ✓] ← if new
[Daily note already had Big Three — not overwritten] ← if pre-filled
- No weekly note: Infer week focus from Todoist project structure and recent daily note patterns. Note the gap and suggest running a weekly review.
- Big Three already filled: Read them, affirm or gently flag if they conflict with today's highest-priority items. Never overwrite.
- Calendar unavailable: Skip gracefully with a note. Todoist timed tasks (those with
due.datetime) serve as the schedule proxy. - If
$ARGUMENTSprovided: Elevate any tasks, notes, or calendar events related to that topic/project in the priority scoring. - Packed calendar (3+ meetings): Flag this explicitly — suggest the Big Three be between-meeting work items, not heroic deep-work goals.
- Missing environment variables: If
$VAULT_ROOTor$TODOIST_TOKENare not set, halt with a clear message pointing to the Configuration section above.