$npx -y skills add kv0906/pm-kit --skill todayGuided daily workflow orchestrator. Multi-phase process (standup, team sync, review, focus, wrap-up). Use when user says "today", "start my day", or "daily workflow".
| 1 | # /today — Daily Workflow Orchestrator |
| 2 | |
| 3 | Guides PMs through a structured daily routine: standup → team sync → review → focus → wrap-up. Reuses existing skill logic (`/daily`, `/meet`, `/progress`) — does NOT duplicate it. |
| 4 | |
| 5 | ## Context |
| 6 | |
| 7 | Today's date: `!date +%Y-%m-%d` |
| 8 | Existing daily: `!ls daily/*.md 2>/dev/null | tail -5` |
| 9 | |
| 10 | Config: @_core/config.yaml |
| 11 | Processing logic: @_core/PROCESSING.md |
| 12 | Daily template: @_templates/daily.md |
| 13 | |
| 14 | Reference skills (for reuse patterns): |
| 15 | - @.claude/skills/daily/SKILL.md — keyword detection, blocker/decision logic |
| 16 | - @.claude/skills/meet/SKILL.md — meeting note parsing |
| 17 | - @.claude/skills/progress/SKILL.md — dashboard aggregation |
| 18 | |
| 19 | ## Input |
| 20 | |
| 21 | User input: $ARGUMENTS |
| 22 | |
| 23 | ### Argument Handling |
| 24 | |
| 25 | - **No args**: Start from Phase 1, or resume current phase (detect via TaskList) |
| 26 | - **`status`**: Show which phase is currently active |
| 27 | - **`skip`**: Skip current phase, advance to next |
| 28 | - **`wrap`**: Jump directly to Phase 5 (wrap-up) |
| 29 | |
| 30 | ## Session Task Progress |
| 31 | |
| 32 | Create all phase tasks upfront with dependencies: |
| 33 | |
| 34 | ``` |
| 35 | TaskCreate: "Phase 1: Daily Standup" |
| 36 | description: "Capture updates for all active projects" |
| 37 | activeForm: "Running daily standup..." |
| 38 | |
| 39 | TaskCreate: "Phase 2: Team Sync" |
| 40 | description: "Process external context (Slack, meetings, Linear)" |
| 41 | activeForm: "Processing team sync..." |
| 42 | |
| 43 | TaskCreate: "Phase 3: Review" |
| 44 | description: "Display cross-project health dashboard" |
| 45 | activeForm: "Generating review dashboard..." |
| 46 | |
| 47 | TaskCreate: "Phase 4: Focus" |
| 48 | description: "Display priorities and pause for deep work" |
| 49 | activeForm: "Setting focus priorities..." |
| 50 | |
| 51 | TaskCreate: "Phase 5: Wrap-Up" |
| 52 | description: "Summarize the day" |
| 53 | activeForm: "Wrapping up the day..." |
| 54 | ``` |
| 55 | |
| 56 | Set dependencies: |
| 57 | ``` |
| 58 | TaskUpdate: Phase 2, addBlockedBy: [phase-1-id] |
| 59 | TaskUpdate: Phase 3, addBlockedBy: [phase-2-id] |
| 60 | TaskUpdate: Phase 4, addBlockedBy: [phase-3-id] |
| 61 | TaskUpdate: Phase 5, addBlockedBy: [phase-4-id] |
| 62 | ``` |
| 63 | |
| 64 | ## Resume Logic (Same Session Only) |
| 65 | |
| 66 | Before creating tasks, check `TaskList` for existing `/today` phase tasks: |
| 67 | |
| 68 | - If tasks exist with `in_progress` status → resume from that phase |
| 69 | - If Phase 4 was completed → start Phase 5 (wrap-up) |
| 70 | - If all phases completed or no tasks exist → start fresh from Phase 1 |
| 71 | |
| 72 | **No persistent state files.** The file system is the state — daily notes exist or they don't. |
| 73 | |
| 74 | --- |
| 75 | |
| 76 | ## Phase 1: DAILY STANDUP (Interactive) |
| 77 | |
| 78 | **Purpose**: Capture updates for all active projects. |
| 79 | |
| 80 | ### Steps |
| 81 | |
| 82 | 1. Read `_core/config.yaml` → get active projects list |
| 83 | 2. For each active project, prompt the user: |
| 84 | |
| 85 | ``` |
| 86 | {project_name}: What's your update? (shipped/wip/blocked) |
| 87 | ``` |
| 88 | |
| 89 | 3. Parse each response using keyword detection (from `/daily` skill): |
| 90 | - **Shipped**: shipped, done, completed, finished, merged, deployed, released |
| 91 | - **WIP**: wip, working on, in progress, continuing, started, ongoing |
| 92 | - **Blocked**: blocked, stuck, waiting on, waiting for, need from, dependency |
| 93 | - **Decided**: decided, going with, chose, selected, agreed |
| 94 | |
| 95 | 4. Create or update `daily/{date}.md`: |
| 96 | - If file exists: update each project's `## {Project Name}` section |
| 97 | - If new: create from template with all project sections |
| 98 | |
| 99 | 5. **Auto-detect blockers** (per `/daily` logic): |
| 100 | - For each blocked item: search `blockers/{project}/*.md` for similar open blockers |
| 101 | - If similar exists: link to it |
| 102 | - If NEW: prompt user — `"Blocker detected: '{text}'. Create blocker note? (y/n/details)"` |
| 103 | - **y**: Create with severity=medium at `blockers/{project}/{date}-{slug}.md` |
| 104 | - **details**: Prompt for severity, owner, due date |
| 105 | - **n**: Skip |
| 106 | |
| 107 | 6. **Auto-detect decisions**: |
| 108 | - For each decision keyword: suggest creating a decision note |
| 109 | - Link to daily if user confirms |
| 110 | |
| 111 | ### Output |
| 112 | |
| 113 | ``` |
| 114 | ✓ Updated daily/{date}.md ({count} projects) |
| 115 | - Shipped: {count} items |
| 116 | - WIP: {count} items |
| 117 | - Blockers: {count} (linked/created) |
| 118 | - Decisions: {count} (detected) |
| 119 | ``` |
| 120 | |
| 121 | --- |
| 122 | |
| 123 | ## Phase 2: TEAM SYNC (Interactive) |
| 124 | |
| 125 | **Purpose**: Process external context (Slack threads, Linear updates, meeting notes). |
| 126 | |
| 127 | ### Steps |
| 128 | |
| 129 | 1. Prompt the user: |
| 130 | |
| 131 | ``` |
| 132 | Any team updates, Slack threads, or meeting notes to process? (paste or 'skip') |
| 133 | ``` |
| 134 | |
| 135 | 2. If **skip** → mark phase complete, advance to Phase 3 |
| 136 | |
| 137 | 3. If content provided: |
| 138 | - Classify content type using keyword detection: |
| 139 | - Meeting signals → route as meeting note (use `/meet` patterns) |
| 140 | - Blocker signals → route as blocker |
| 141 | - Decision signals → route as decision |
| 142 | - General → route to inbox |
| 143 | - Create appropriate notes with links |
| 144 | - After processing, ask: `"More to process? (paste or 'done')"` |
| 145 | - Loop until user says 'done' or 'skip' |
| 146 | |
| 147 | ### Output |
| 148 | |
| 149 | ``` |
| 150 | ✓ Team sync complete |
| 151 | - Meeting notes: {count} |
| 152 | - Blocke |