diff --git a/.claude/skills/daily-plan/SKILL.md b/.claude/skills/daily-plan/SKILL.md index 956c9ea38..a2c2ef1e2 100644 --- a/.claude/skills/daily-plan/SKILL.md +++ b/.claude/skills/daily-plan/SKILL.md @@ -263,6 +263,8 @@ Check if any tasks were completed on phone since the last plan: Use: reminders_list_completed(list_name="Dex Today") ``` +**If the tool is unavailable or errors** (Apple Reminders sync is optional and may not be set up on this machine): skip this step silently — do not surface an error for a feature the user never enabled. Note: Reminders access never works when Claude Code runs inside the VS Code extension (macOS never shows the permission dialog to that process) — see the known limitation in `06-Resources/Dex_System/Calendar_Setup.md`. Do not advise reinstalling or reconfiguring; skip silently. + For each completed item: - Match to a Dex task by title - Update task status via Work MCP: `update_task_status(task_title="...", status="d")` @@ -432,6 +434,28 @@ Generate 3 recommended focus items based on: > 2. **Reply to Mike** — Commitment due today > 3. **Task X from Priority 1** — Keeps momentum on your shipped priority" +**Task IDs are mandatory on focus items (completion sync depends on them):** + +Completion sync (Work MCP `update_task_status`, which updates every file the task +appears in) only finds a line if that single line contains BOTH a `- [ ]` / `- [x]` +checkbox AND the task's `^task-YYYYMMDD-XXX` anchor. A focus item written without the ID — or with the ID on +a different line — is invisible to sync: ticking the task done in Tasks.md never +updates the plan, and marking the plan item done never updates Tasks.md. + +So, for each recommended focus item: +1. **If it maps to an existing Tasks.md task** (search by title/keywords), you MUST + write it in the plan as a `- [ ]` checkbox line with that task's `^task-YYYYMMDD-XXX` + anchor at the end of the same line. Never omit the ID, never put it on its own line. +2. **If it's real work with no Tasks.md entry yet**, create the task first via Work MCP + `create_task`, then embed the returned task ID the same way. +3. **Only if it isn't a task at all** (e.g. "protect the 2-4pm free block") may the line + omit an ID — and then it gets no checkbox either, so it can't masquerade as a + syncable task. + +Format notes that matter: use `- [ ]` (dash checkbox), not `1. [ ]` — numbered +checkboxes do not contain the literal `- [ ]` string the sync matcher looks for, so +they never sync even with an ID present. + ### Meeting Prep (Enhanced) For each meeting, show: @@ -455,6 +479,11 @@ Flag potential issues: **ALWAYS generate and save a new plan file.** Never skip generation because a plan from a previous day exists in the conversation or vault. Even if context from a prior plan is visible, today is a new day and requires its own plan. If a plan for today's date already exists, overwrite it (the user is requesting a refresh). +**Filling in `{{^task-id}}` in Today's Focus:** replace it with the item's real +`^task-YYYYMMDD-XXX` anchor per the Task IDs rule in Step 6 (mandatory whenever the +item maps to a Tasks.md task — create the task first if needed). If the item is not a +task at all, drop both the placeholder and the `- [ ]` checkbox for that line. + Create `07-Archives/Plans/YYYY-MM-DD.md`: ```markdown @@ -509,9 +538,9 @@ integrations_used: [calendar, tasks, people, work-intelligence] **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}} +- [ ] {{Focus item 1}} — {{Pillar}} *(supports Week Priority #X)* {{^task-id}} +- [ ] {{Focus item 2}} — {{Pillar}} *(supports Week Priority #Y)* {{^task-id}} +- [ ] {{Focus item 3}} — {{Pillar}} {{^task-id}} --- @@ -588,7 +617,7 @@ After generating the plan, push today's P0 and P1 focus tasks to Apple Reminders 3. **Confirm silently:** > "📱 Pushed 3 focus tasks to iPhone Reminders (Dex Today)" -**If Reminders MCP unavailable:** Skip silently. +**If the tool is unavailable or errors:** Skip silently — do not surface an error for a feature the user never enabled. (This includes Claude Code running inside the VS Code extension, where macOS never grants Reminders access — see `06-Resources/Dex_System/Calendar_Setup.md`.) --- diff --git a/.claude/skills/daily-review/SKILL.md b/.claude/skills/daily-review/SKILL.md index 7a95003e4..ce3dd7095 100644 --- a/.claude/skills/daily-review/SKILL.md +++ b/.claude/skills/daily-review/SKILL.md @@ -110,7 +110,7 @@ Check for tasks added from phone during the day that weren't triaged in the morn Use: reminders_list_items(list_name="Dex Inbox") ``` -**If the tool is unavailable or errors** (Apple Reminders phone-capture is optional and may not be set up on this machine): skip this step silently — do not surface an error for a feature the user never enabled. +**If the tool is unavailable or errors** (Apple Reminders phone-capture is optional and may not be set up on this machine): skip this step silently — do not surface an error for a feature the user never enabled. Note: Reminders access never works when Claude Code runs inside the VS Code extension (macOS never shows the permission dialog to that process) — see the known limitation in `06-Resources/Dex_System/Calendar_Setup.md`. Do not advise reinstalling or reconfiguring; skip silently. If items found: - Surface them: "📱 **Phone captures not yet triaged** (X items in Dex Inbox)" @@ -131,6 +131,8 @@ Check if tasks were completed on phone since the morning plan: Use: reminders_list_completed(list_name="Dex Today") ``` +**If the tool is unavailable or errors** (Apple Reminders sync is optional and may not be set up on this machine): skip this step silently — do not surface an error for a feature the user never enabled. Note: Reminders access never works when Claude Code runs inside the VS Code extension (macOS never shows the permission dialog to that process) — see the known limitation in `06-Resources/Dex_System/Calendar_Setup.md`. Do not advise reinstalling or reconfiguring; skip silently. + For each completed item: - Match to a Dex task by title - Update task status via Work MCP: `update_task_status(task_title="...", status="d")` @@ -349,7 +351,25 @@ This only fires if the user has opted into analytics. No action needed if it ret ## Step 11: Evening Journal (If Enabled) -If `journaling.evening: true`, prompt for evening reflection. +Check `System/user-profile.yaml` → `journaling.evening`. + +**If `journaling.evening: true`, run the actual `/journal evening` flow** from +`.claude/skills/journal/SKILL.md` — do not just mention reflection and move on, and do +not substitute a single ad-hoc question. The real flow: + +1. Check if today's evening journal exists in `00-Inbox/Journals/` + - If yes: acknowledge it ("You already journaled this evening") and skip to Step 12 + - If no: create it from the template +2. Pull in this morning's journal intention (if one exists) for reflection +3. Guide the user through the evening prompts conversationally — one question at a + time, per the journal skill's Prompting Style +4. Save the entry, then continue the review + +Offer it plainly: "You have evening journaling enabled — want to do a quick reflection +before we close the day?" If the user declines, skip without pushing back and continue +to Step 12. + +**If `journaling.evening` is false or missing:** Skip this step silently. --- diff --git a/.claude/skills/week-review/SKILL.md b/.claude/skills/week-review/SKILL.md index 4fccba924..828ef1042 100644 --- a/.claude/skills/week-review/SKILL.md +++ b/.claude/skills/week-review/SKILL.md @@ -464,7 +464,17 @@ Add a section to the review: After synthesis: 1. Update Tasks.md with new priorities -2. Archive completed items +2. Clear completed tasks out of `03-Tasks/Tasks.md` — **remove whole task blocks, never + individual lines.** Tasks.md entries can span multiple lines: the `- [x]` checkbox + line plus its indented sub-lines (priority, due date, notes) and any continuation + paragraphs. A task's block runs from its checkbox line down to (but not including) + the next non-indented line — the next task's checkbox, a heading, or a blank line + followed by unindented content. When removing a completed task, remove that entire + block together so no orphaned sub-lines are left behind. Never do a per-line sweep + of `[x]` lines: that strands sub-lines, and it also removes completed sub-checkboxes + out from under tasks that are still open (only remove a block whose own top-level + checkbox is `[x]`). Before deleting anything, tell the user how many completed tasks + you're clearing and confirm. 3. Update project pages with status changes 4. Offer to run `/week-plan` for next week diff --git a/06-Resources/Dex_System/Calendar_Setup.md b/06-Resources/Dex_System/Calendar_Setup.md index c9ccbb178..ac332e696 100644 --- a/06-Resources/Dex_System/Calendar_Setup.md +++ b/06-Resources/Dex_System/Calendar_Setup.md @@ -51,6 +51,19 @@ The first time Cursor tries to read your calendar, macOS may show a popup: **"Cu --- +## Known limitation: the VS Code extension can't use Apple Reminders + +macOS grants calendar and reminders access **per app** — it looks at which app is asking. When Dex runs through the **Claude Code extension inside VS Code** (rather than from a normal terminal window), macOS never shows the permission popup to that process at all, and access granted to Terminal does **not** carry over. The result: Apple Reminders features (phone capture via a "Dex Inbox" list, "Dex Today" sync) are simply unavailable in that setup — not misconfigured, unavailable. Reinstalling or redoing the setup steps will not change this. + +What to do instead: + +- **Run Dex from a standalone terminal window** (Terminal.app, or another terminal app launched on its own). The permission popup appears there, and access works after you click Allow. +- **Or keep using the VS Code extension without Reminders features.** Dex skips them silently when access is unavailable — daily planning and reviews work normally without them. + +This was verified directly (August 2026): the same check succeeds from Terminal.app, and fails from both VS Code's built-in terminal and the extension's own process — even after access was granted in Terminal.app first. + +--- + ## Optional: Tell Dex which calendar is "work" If you have several calendars and want Dex to focus on one (e.g. your work calendar) for faster answers, you can set it in **System/user-profile.yaml** under a `calendar` section with `work_calendar: "your.email@example.com"` (use the exact name as it appears in the Calendar app). You can skip this—Dex will still show your events without it. diff --git a/docs/Dex_System/Calendar_Setup.md b/docs/Dex_System/Calendar_Setup.md index c9ccbb178..ac332e696 100644 --- a/docs/Dex_System/Calendar_Setup.md +++ b/docs/Dex_System/Calendar_Setup.md @@ -51,6 +51,19 @@ The first time Cursor tries to read your calendar, macOS may show a popup: **"Cu --- +## Known limitation: the VS Code extension can't use Apple Reminders + +macOS grants calendar and reminders access **per app** — it looks at which app is asking. When Dex runs through the **Claude Code extension inside VS Code** (rather than from a normal terminal window), macOS never shows the permission popup to that process at all, and access granted to Terminal does **not** carry over. The result: Apple Reminders features (phone capture via a "Dex Inbox" list, "Dex Today" sync) are simply unavailable in that setup — not misconfigured, unavailable. Reinstalling or redoing the setup steps will not change this. + +What to do instead: + +- **Run Dex from a standalone terminal window** (Terminal.app, or another terminal app launched on its own). The permission popup appears there, and access works after you click Allow. +- **Or keep using the VS Code extension without Reminders features.** Dex skips them silently when access is unavailable — daily planning and reviews work normally without them. + +This was verified directly (August 2026): the same check succeeds from Terminal.app, and fails from both VS Code's built-in terminal and the extension's own process — even after access was granted in Terminal.app first. + +--- + ## Optional: Tell Dex which calendar is "work" If you have several calendars and want Dex to focus on one (e.g. your work calendar) for faster answers, you can set it in **System/user-profile.yaml** under a `calendar` section with `work_calendar: "your.email@example.com"` (use the exact name as it appears in the Calendar app). You can skip this—Dex will still show your events without it.