Skip to content

Instantly share code, notes, and snippets.

@scottfwalter
Created February 28, 2026 14:58
Show Gist options
  • Select an option

  • Save scottfwalter/f0a65aeb0b0ad5bf6f7d29868b376c05 to your computer and use it in GitHub Desktop.

Select an option

Save scottfwalter/f0a65aeb0b0ad5bf6f7d29868b376c05 to your computer and use it in GitHub Desktop.
Claude Command Obsidian To Start The Day
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

Open Day Briefing

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.


⚙️ Configuration

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
# ────────────────────────────────────────────────────────────

Step 1: Resolve Today's File Paths

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"

Step 2: Read This Week's Intentions

Read the weekly note if it exists:

cat "$WEEKLY_NOTE" 2>/dev/null

Extract 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.


Step 3: Read Today's Daily Note

cat "$DAILY_NOTE" 2>/dev/null

If 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 in YYYY-MM-DD format

Step 4: Find Carry-Overs from Recent Days

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 -4

From 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

Step 5: Pull Today's Todoist Tasks

# 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.datetime or due.date — when it's due
  • priority — 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

Step 6: Pull Today's Calendar Events

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
APPLESCRIPT

Skip: 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)

Step 7: Pull Open TaskNotes

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 | sort

Step 8: Synthesize the Day Plan

With all inputs gathered, build the prioritized plan using this logic:

Priority Scoring (highest wins Big Three):

  1. Carry-over Tomorrow's Seed from yesterday — high weight (was already identified as #1)
  2. Todoist priority 4 (urgent) due today
  3. Weekly Plan focus — tasks that align with 🌱 Plan key focus
  4. Calendar-blocked work that requires prep
  5. Todoist priority 3 (high) due today
  6. Overdue tasks — need to be scheduled or explicitly deferred
  7. TaskNotes high-priority items
  8. 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


Step 9: Write the Plan into the Daily Note

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).


Output Format

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

Edge Cases

  • 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 $ARGUMENTS provided: 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_ROOT or $TODOIST_TOKEN are not set, halt with a clear message pointing to the Configuration section above.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment