Skip to content
Productivity
Skill

/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

From plugin
davekilleen-dex
47698 skills28 agents24 commands1 MCP
Install
$ npx -y skills add davekilleen/Dex --skill week-plan --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/week-plan

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

week-plan.SKILL.md
name: week-plan
description: "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`."

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_

Read more
Ships withdavekilleen-dex

A personal operating system for your work. Strategic work management, meeting intelligence, relationship tracking, daily planning — all configured for your specific role.

Get the whole plugin

Other skills on davekilleen-dex.