# Week Plan

> Set the week's priorities against goals, calendar shape and task effort. Use when the user says 'plan my week', 'what should I focus on this week', or on their first working day. Also use proactively at the first session of a new week. Not for reviewing the week just past; use `week-review`.

- Skill: `davekilleen/week-plan-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add davekilleen/week-plan-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/davekilleen/week-plan-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: davekilleen (https://skillmd.com/u/davekilleen)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/davekilleen/week-plan-2

---


## Execution mode

Run inline in the current conversation by default, so this work can see what the
user has already discussed, decided, or settled this session. Do not fork merely
because this skill was selected. Only run in the background when the user
explicitly asks for a background run or the host has already obtained a specific
background-work approval for this run.

## Purpose

Set priorities and plan the week ahead. Now with **intelligent priority suggestions** based on quarterly goals, calendar capacity, and task effort classification.

## Usage

- `/week-plan` — Plan current week (or next week if run on the last working day or a non-working day)
- `/week-plan next` — Explicitly plan next week
- `/week-plan current` — Force planning current week

---

## When to Use

**Best times:**
- **First working day, before work** - Before diving into daily work
- **Last working day, after work** - Set up next week while context is fresh
- **Evening before the first working day** - Plan before the week begins

Read `working_week.days` in `System/user-profile.yaml` before deciding which days are first, last, or outside the working week.

---

## Step 1: Determine Target Week

Calculate target week (current or next) based on day of week and user parameter.

---

## Step 2: Context Gathering (ENHANCED)

Gather comprehensive context to inform **intelligent priority suggestions**.

### 2.1 Last Week's Review

Check for `00-Inbox/Weekly_Synthesis_[last-monday].md`:
- "Next Week" section → Suggested priorities
- "Carried Over" section → Unfinished tasks
- "Blocked Items" → Things that need resolution
- "Learnings" → Insights to apply

### 2.2 Quarterly Goals Status

```
Use: get_quarterly_goals()
Use: get_goal_status(goal_id) for each goal that has a goal_id
```

Skip `get_goal_status` for any goal whose `goal_id` is null — it has no ID to
look up, and the call will tell you so rather than return a status.

For each goal, get:
- Current progress (concrete: "2 of 5 milestones complete")
- Linked priorities count
- Weeks since last activity
- Stall warnings

**Check `activity_known` before judging any goal.** When it is `false` — the
goal was typed by hand with no ID, or recovered from a freeform list —
`linked_priorities` and `linked_priorities_count` are `null`, meaning *not
known*, never *none*. Never call such a goal orphaned or stalled on that basis.

**Identify goals needing attention** (only among goals where `activity_known`
is `true`):
- Goals with no linked priorities (orphaned)
- Goals with no activity in 2+ weeks (stalled)
- Goals behind expected pace

If the response flags goals as `provisional` (recovered from a freeform list), offer once — "Want me to structure these into trackable goals?" — and move on without nagging if declined.

### 2.3 Open Tasks and Projects

```
Use: list_tasks(include_done=False)
```

Get all open tasks and:
- Classify by effort (deep_work / medium / quick)
- Group by pillar alignment
- Identify P0/P1 items

**Goal-advancing tasks — read the groomed backlog, don't guess:**

```
Use: get_weekly_planning_context()
```

Each goal in the response's `goal_health` carries `open_task_count` and `next_up_tasks` — the top items the user already marked "take these first" during grooming.

**First, check `activity_known`.** When it is `false`, that goal has no usable ID — it was typed by hand, or recovered from a freeform list — so Dex cannot tell what links to it. `linked_priority_count`, `has_activity`, `open_task_count` and `next_up_tasks` are all `null` for that goal, meaning *not known*, never *none*. Do not read a `null` as zero, do not call it stalled or neglected, and do not call `get_goal_backlog` for it (a null ID falls back to every goal's backlog). Plan around it normally and pass on the `recommendations` line that says how to give it an ID.

For every goal where `activity_known` is `true`, use the fields directly:

- **Goal has `next_up_tasks`:** suggest those items by name — "Goal X's next-up items are A and B — they fit Wednesday's block."
- **Stalled goal with open tasks but no groomed order:** call `get_goal_backlog(goal_id)` and pick candidates from the top of its ordering (priority, then oldest).
- **Goal with a large `open_task_count` (10+) and no `next_up_tasks`:** mention `/goal-backlog` once — "Goal X has 14 open tasks and no groomed order — worth a `/goal-backlog` pass after planning?" Say it once for the whole plan, not per goal, and drop it if declined.

### 2.4 Calendar Shape Analysis (NEW)

Read `calendar.provider` from `System/user-profile.yaml` before any calendar call.

**If `provider` is `google`:** use Google Workspace MCP, not calendar-mcp event tools.

Read `calendar.work_calendar` from the same profile. Call `list_calendars(detailed=true)` first. Match `work_calendar` against a returned calendar summary, id, or primary flag, then pass that calendar's id. If `work_calendar` is missing or `primary`, use `primary`. Do not pass a display name as calendar_id. Set max_results high enough that a stacked week is not truncated.

```
Use: list_calendars(detailed=true)
Use: get_events(time_min="[week start]", time_max="[day after week end]", calendar_id="<resolved id or primary>", max_results=2500, detailed=true)
Use: analyze_calendar_capacity(days_ahead=7, events=[...mapped from get_events...])
```

Map returned events into the shape `analyze_calendar_capacity` expects (`title`, `date` as `YYYY-MM-DD`, `duration_minutes`, `attendees`, `all_day`). Apply CLAUDE.md's **Calendar response confidence contract** to the outcome: a missing or failing Google Workspace calendar tool is not an empty week, and do not call `analyze_calendar_capacity` with missing results. If the tools are unavailable or not connected, point to `/google-workspace-setup` using that skill's existing copy. Do not invent new privacy or consent language.

**If `provider` is `none`:** skip calendar gathering. Do not call calendar-mcp event tools. Do not treat the week as open.

**If `provider` is `apple`, missing, or any other value:** use calendar-mcp:

```
Use: calendar_get_events_with_attendees(start_date="[week start]", end_date="[day after week end]")
Use: analyze_calendar_capacity(days_ahead=7, events=[...from calendar MCP...])
```

Apply CLAUDE.md's **Calendar response confidence contract** before consuming
events or passing them to `analyze_calendar_capacity`.

Understand the **shape of the week**:

| Day | Type | Largest Block | Best For |
|-----|------|---------------|----------|
| Mon | Stacked (7 meetings) | 45 min | Quick tasks only |
| Tue | Moderate (4 meetings) | 90 min | Medium tasks |
| Wed | **Open** (2 meetings) | **3 hours** | **Deep work day** ✨ |
| Thu | Stacked (6 meetings) | 30 min | Quick tasks only |
| Fri | Moderate (3 meetings) | 2 hours | Medium tasks, wrap-up |

**Week capacity summary:**
- Deep work opportunities: {{count}} days with 2+ hour blocks
- Total deep work hours available: ~{{X}} hours
- Stacked days to avoid scheduling deep work: {{list}}

### 2.5 Task-to-Time Matching (NEW)

```
Use: classify_task_effort(title) for key tasks
Use: suggest_task_scheduling(include_all_tasks=True, calendar_events=[...])
```

Get intelligent matching:
- Which tasks need deep work time?
- Which can fit in gaps?
- Are there enough slots for all deep work?

**Capacity check:**

> "You have 5 deep work tasks totaling ~12 hours.
> You have 2 open days with ~6 hours of deep work capacity.
> 
> ⚠️ **Capacity gap:** Consider deferring 2 deep work items or protecting more time."

### 2.6 Semantic Goal Intelligence (if QMD available)

**Check if semantic search is available** by looking for `qmd` in PATH.

If available, enhance priority suggestions with meaning-based analysis:

1. **Find stale goals with hidden activity:** For each stalled quarterly goal, search:
   ```
   qmd query "goal description/success criteria" --limit 5
   ```
   against recent tasks and meeting notes. Sometimes goals appear stalled because related work wasn't explicitly linked.
   - Example: Goal "Build partner ecosystem" shows no linked tasks, but QMD finds 3 meetings about "integration partnerships" and a task about "API documentation for vendors."

2. **Suggest priorities that move stalled goals:** For goals with no recent activity:
   ```
   qmd query "goal title concepts" --limit 3
   ```
   against open tasks. Surface tasks that could advance the goal semantically.
   - "You have an open task 'Review vendor onboarding flow' — this could advance your stalled goal 'Build partner ecosystem'"

3. **Detect priority conflicts:** Search for semantic overlap between candidate priorities:
   ```
   qmd query "priority A description" --limit 3
   ```
   If two priorities are semantically very similar, suggest merging them.

**Integration:** Fold findings into the "Intelligent Priority Suggestions" in Step 3. Label semantic discoveries: "🔍 *Detected via semantic search*"

**If QMD unavailable:** Skip silently. Priority suggestions still work from explicit goal links.

### 2.7 Commitments and Follow-ups

```
Use: get_commitments_due(date_range="this_week")
```

Surface things you've committed to that are due this week.

---

## Step 3: Intelligent Priority Suggestions (NEW)

**Don't just ask "What are your Top 3?" — Suggest priorities based on analysis.**

### 3.1 Generate Suggestions

Based on the gathered context, generate 4-5 suggested priorities:

**Goal-driven suggestions:**
- Prefer groomed next-up items when a goal has them: "Goal X's next-up items are A and B — they fit Wednesday's block."
- "Goal X has no activity in 3 weeks. Suggested priority: {{specific work that advances it}}" — drawn from its backlog, not invented
- "Goal Y is at 2 of 5 milestones with 6 weeks left. Suggested priority: Complete milestone 3"

**Commitment-driven suggestions:**
- "You committed to {{X}} with {{person}} — due this week"

**Carried-over suggestions:**
- "{{Priority}} carried over from last week — still important?"

**Calendar-aware suggestions:**
- "You have a deep work day Wednesday — good time for {{specific deep work task}}"
- "Friday is light — good for {{wrap-up task}}"

### 3.2 Present Suggestions

> "Based on your goals, tasks, and calendar shape, here's what I suggest for this week:
> 
> **Suggested priorities:**
> 
> 1. **Complete pricing proposal** — Goal 1 (Launch v2.0) needs this to hit milestone 3. You have deep work time Wednesday.
> 
> 2. **Customer interview batch** — Goal 2 (Improve NPS) has no activity in 3 weeks. You could do 2-3 calls on Tue/Thu between meetings.
> 
> 3. **Follow up on Acme contract** — Committed to Sarah by Friday. Meeting Thursday, prep needed.
> 
> 4. **Review team roadmap** — Carried over from last week. Still a priority?
> 
> **Calendar fit:**
> - Priority 1 → Wednesday (3-hour block)
> - Priority 2 → Tue/Thu (between meetings)
> - Priority 3 → Friday (follow-up after Thursday meeting)
> 
> **Does this feel right?** Adjust as needed."

### 3.3 Interactive Refinement

Wait for user to confirm, adjust, or provide different priorities. For each priority confirmed:

```
Use: create_weekly_priority(
  title="...",
  pillar="...",
  quarterly_goal_id="..." or "operational",
  success_criteria="...",
  week_date="YYYY-MM-DD"
)
```

---

## Step 4: Skills Gap Check (if Career system enabled)

If `05-Areas/Career/` exists, check for stale skills that could be developed this week.

---

## Step 5: PKM Improvement Check (Optional)

Check `System/Dex_Backlog.md` for high-priority improvement ideas worth tackling this week.

---

## Step 6: Generate Week Priorities File

Archive old file to `07-Archives/Plans/YYYY-Wxx.md`.

Use the exact `goal_id` returned by the planning tools in each linked
`Quarterly goal` bullet. For work that advances no quarterly goal, write
`Operational` instead of inventing or paraphrasing an ID.

Create updated `02-Week_Priorities/Week_Priorities.md`:

```markdown
# Week Priorities

**Week of:** [first working day YYYY-MM-DD]

---

## 📊 Week Shape

| Day | Type | Deep Work? | Notes |
|-----|------|------------|-------|
| Mon | Stacked | ❌ | 7 meetings |
| Tue | Moderate | ⚠️ | 90 min block PM |
| Wed | **Open** | ✅ | **Deep work day** (3h morning) |
| Thu | Stacked | ❌ | 6 meetings |
| Fri | Moderate | ⚠️ | 2h block |

**Deep work capacity:** ~5 hours this week
**Best day for focus:** Wednesday

---

## 🎯 Quarterly Goals Context

| Goal | Progress | Status |
|------|----------|--------|
| Launch Product v2.0 | 3 of 5 milestones | On track |
| Improve Customer NPS | 1 of 4 milestones | ⚠️ Stalled (3 weeks) |
| Build Team Capacity | 2 of 3 milestones | On track |

**This week advances:** Goals #1 and #2

---

## 🎯 Top 3 This Week

1. **[Priority 1]** — **[Pillar]** ^week-YYYY-WXX-p1
   - Success criteria: [What done looks like]
   - Quarterly goal: [Qx-YYYY-goal-N]
   - **Scheduled:** [Day/time block]
   - Effort: [deep_work / medium / quick]
   
2. **[Priority 2]** — **[Pillar]** ^week-YYYY-WXX-p2
   - Success criteria: [What done looks like]
   - Quarterly goal: [Qx-YYYY-goal-N]
   - **Scheduled:** [Day/time block]
   - Effort: [deep_work / medium / quick]
   
3. **[Priority 3]** — **[Pillar]** ^week-YYYY-WXX-p3
   - Success criteria: [What done looks like]
   - Quarterly goal: [Qx-YYYY-goal-N] or Operational
   - **Scheduled:** [Day/time block]
   - Effort: [deep_work / medium / quick]

---

## ⚡ Commitments Due This Week

- [ ] [Commitment] — to [person] — due [day]
- [ ] [Commitment] — from [meeting] — due [day]

---

## 📋 Tasks by Priority

### Must Complete (P0)
- [ ] [Task] — Supports: Priority #X — **[Day]**

### Should Complete (P1)
- [ ] [Task] — Supports: Priority #X — **[Day]**

### If Time Permits (P2)
- [ ] [Task]

---

## 📅 Key Meetings

| Day | Time | Meeting | Prep Needed | Related Priority |
|-----|------|---------|-------------|------------------|
| Mon | [Time] | [Meeting] | [Prep] | Priority #X |
| Tue | [Time] | [Meeting] | [Prep] | — |

---

## 📊 Pillar Balance

| Pillar | This Week | Balance |
|--------|-----------|---------|
| [Pillar 1] | [Brief description] | 🟩 Good |
| [Pillar 2] | [Brief description] | 🟨 Light |
| [Pillar 3] | [Brief description] | 🟥 Neglected |

---

## 🔄 Carried Over

- [ ] [Task from last week] — [Why it carried over]

---

## 🏁 End of Week Review

*Fill in on the last working day*

### Completed
- 

### Didn't Finish
- 

### Learnings
- 

### Next Week Focus
- 

---

*Generated: [Timestamp]*
*Command: /week-plan*
```

---

## Step 7: Track Usage (Silent)

Update `System/usage_log.md`.

**Analytics (Silent):**

Call `track_event` with event_name `week_plan_completed` and properties:
- `priorities_count`: number of priorities set
- `goals_count`: number of quarterly goals referenced

This only fires if the user has opted into analytics. No action needed if it returns "analytics_disabled".

---

## Step 8: Summary

After generating the file, provide a summary:

> "Week planned! Saved to `02-Week_Priorities/Week_Priorities.md`
> 
> **Your Top 3 this week:**
> 1. [Priority 1] — Scheduled for [Day]
> 2. [Priority 2] — Scheduled for [Day]
> 3. [Priority 3] — Scheduled for [Day]
> 
> **Week shape:** 2 stacked days, 1 deep work day (Wednesday)
> 
> **Goals advancing:** #1 and #2
> 
> **Heads up:** 
> - [Capacity warning if applicable]
> - [Stalled goal reminder]
> 
> Ready to run `/daily-plan` for your first working day?"

---

## MCP Dependencies (Updated)

| Integration | MCP Server | Tools Used |
|-------------|------------|------------|
| Calendar | calendar-mcp, or google-workspace-mcp when `calendar.provider` is `google` | Apple: `calendar_get_events_with_attendees`. Google: `list_calendars`, `get_events` |
| Work | work-mcp | `list_tasks`, `get_quarterly_goals`, `get_goal_status`, `get_weekly_planning_context`, `get_goal_backlog`, `create_weekly_priority`, `analyze_calendar_capacity`, `classify_task_effort`, `suggest_task_scheduling`, `get_commitments_due` |
| Granola | granola-mcp | `granola_get_today_meetings` (optional) |

