From 339f9b103406b92c349e22616c847a20df437f90 Mon Sep 17 00:00:00 2001 From: "aj.siegel" Date: Mon, 14 Sep 2026 23:29:43 -0400 Subject: [PATCH] some incremental changes and using runna for workouts to factor into planning --- .claude/commands/evening-prep.md | 18 ++++++++++++++++++ .claude/commands/weekly-template.md | 6 ++++++ CLAUDE.md | 11 ++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/.claude/commands/evening-prep.md b/.claude/commands/evening-prep.md index 4537b6c..24140b4 100644 --- a/.claude/commands/evening-prep.md +++ b/.claude/commands/evening-prep.md @@ -13,6 +13,12 @@ Use the Microsoft 365 connector's `outlook_calendar_search` tool to fetch tomorr 🚨 TIMEZONE: The connector returns times in **UTC** (ISO strings ending in `Z`). Convert each to Eastern Time before displaying β€” EDT = UTCβˆ’4 (mid-Mar to early-Nov), EST = UTCβˆ’5 otherwise. Flag any `isAllDay` events (PTO/OOO) as out-of-office rather than meetings. +## Step 1b: Check tomorrow's Runna workout +Fetch the Runna ical feed (see CLAUDE.md "Data Sources") with `curl -sL ` and find the `VEVENT` whose `DTSTART` is tomorrow's date. +* If one exists: the workout block is 9:00 AM + `X-WORKOUT-ESTIMATED-DURATION` (fall back to the high end of the duration range in `SUMMARY`/`DESCRIPTION` if that field is missing) + a 20-minute shower buffer after. +* Check that block against tomorrow's calendar events from Step 1. If clear, note AJ is free for the workout and what time he's clear by. If a meeting falls inside the block, flag it by name and time so AJ can decide whether to move, shorten, or skip the workout. +* If no workout is scheduled tomorrow, skip this silently β€” do not add a Workout section. + ## Step 2: Under the **Agenda** heading Format my calendar events in a simple Markdown table with columns: Time (ET), Event Name, Owner, and Duration * Time should be the FIRST column @@ -21,6 +27,7 @@ Format my calendar events in a simple Markdown table with columns: Time (ET), Ev * Do not include personal appointments that don't affect my work day * My work day goes from 9 AM ET to 5:30 PM ET. Use this to determine my availability. Let me know how much unscheduled time I have. +* Directly beneath the Agenda table, if Step 1b found a workout scheduled tomorrow, add a one-line **Workout** note stating whether the 9 AM block is clear or naming the conflicting meeting. ## Step 3: Get task data This Notion MCP has no filter/query tool and `view://` URLs aren't fetchable, so use the search β†’ fetch β†’ filter pattern (see CLAUDE.md "HOW TO QUERY THESE DATABASES"). Do NOT try to fetch views and do NOT print any "falling back" message. @@ -35,6 +42,17 @@ Format the note with the following sections: 2. Under **Key Projects** list this week's focus projects with their weekly goal. - If a search legitimately returns no qualifying open tasks, say so plainly β€” never invent tasks to fill the list. +## Step 4: Mark Top Tasks in Notion +The Tasks Tracker has a `Top Task` checkbox property and a `Top Tasks` view (filtered to `Top Task = true` AND `Status != Done`) for surfacing the current day's Big 3 at a glance. At most 3 tasks may be checked at any time. + +1. Present the Suggested Tasks from Step 3 to AJ and let him confirm or swap any of them before finalizing. +2. `notion-search` the Tasks collection (`collection://2c0abd6c-450a-8085-80a0-000ba136a154`) filtered/queried for `Top Task` = true (or check the pages already known from recent notes) to find any tasks still marked from a prior day. +3. Any currently-marked task whose `Status` = "Done" gets `Top Task` set to false immediately β€” regardless of whether it's in today's agreed set (it can't be, since Step 3.4 already drops Done tasks). Don't wait for a replacement to unmark a completed task. +4. For each other currently-marked task that is NOT in today's agreed set, `notion-update-page` to set `Top Task` = false. +5. For each of the (up to 3) agreed tasks, `notion-update-page` to set `Top Task` = true. +6. Never have more than 3 tasks checked at once β€” unmark old ones before marking new ones. + +Note: this only unchecks stale Done tasks when an evening-prep run touches them. It isn't real-time β€” if AJ marks a task Done in Notion outside of this flow, the checkbox stays checked until the next evening-prep pass (though the `Top Tasks` view already filters out `Status = Done`, so it won't show there regardless). True real-time un-checking would need a native Notion automation (Settings β†’ Automations β†’ when Status is set to Done β†’ uncheck Top Task), which isn't something these tools can create. ## Formatting Rules * Always provide a tl;dr summary at the top of the note diff --git a/.claude/commands/weekly-template.md b/.claude/commands/weekly-template.md index 2f9c7d6..fed2396 100644 --- a/.claude/commands/weekly-template.md +++ b/.claude/commands/weekly-template.md @@ -26,6 +26,7 @@ Then add the following to the note Format the note with the following sections: 1. **Priorities for this week** - List the three projects I selected with their weekly goal. 2. **Key tasks** - List all tasks that are due this week. Order by due date and blocker status. Show the task name, related project, type, and effort level. Provide a link to the task in Notion. +3. **Workouts this week** - The table from Step 3b (omit this section entirely if no workouts are scheduled). ## Step 3: Review the week's calendar Use the Microsoft 365 connector's `outlook_calendar_search` tool to fetch the upcoming week's events: @@ -36,6 +37,11 @@ Use the Microsoft 365 connector's `outlook_calendar_search` tool to fetch the up Use AJ's work day (9 AM–5:30 PM ET) and these events to estimate how much unscheduled time exists across the week β€” this feeds the reading suggestions below. +## Step 3b: Check the week's Runna workouts +Fetch the Runna ical feed (see CLAUDE.md "Data Sources") with `curl -sL `. For each `VEVENT` whose `DTSTART` falls Monday–Friday of this week, compute the 9 AM block: workout duration (`X-WORKOUT-ESTIMATED-DURATION`, falling back to the high end of the range in `SUMMARY`/`DESCRIPTION`) + a 20-minute shower buffer after, starting at 9:00 AM. Check each block against that day's calendar events from Step 3. + +Add a **Workouts this week** section: a table with columns Date, Workout, Block (e.g. 9:00–9:50 AM), and Status (Clear, or "Conflict: