task icon Task

Generate Work Year Unwrapped

Requirements
Year to analyze (defaults to current year)
Instructions
You MUST use a todo list to complete these steps in order. Never move on to one step if you haven't completed the previous step. If you have multiple read steps in a row, read them all at once (in parallel).
1

Check for Google Calendar connection. If not connected, guide the user through setup first. Confirm they're connecting their WORK calendar - this is a work year in review.

2

Determine the year to analyze. Default to current year unless user specifies. Say 'Let me look at your [year]...'

5

Quick sanity check: Does this look like a WORK calendar?
Signs of work calendar: - Multiple recurring meetings with colleagues - Domain email addresses (company.com) - Meeting titles like syncs, standups, 1:1s, reviews
Signs of personal calendar: - Mostly solo events (Gym, Doctor, Dinner) - Few or no other attendees - No company domain pattern
If this looks personal, stop and tell the user: 'This looks like a personal calendar. For your Work Year Unwrapped, please connect your work calendar instead.'
If it's clearly work, proceed.

6

Run these analysis tasks in parallel as subagents: - taskAnalyze Collaborators (who you spent time with) - taskAnalyze Phases (the story of your year) - taskAnalyze Team Rhythm (rituals and rhythms) - taskAnalyze Topics (what you worked on) Each subagent will write their analysis to a session file and return the path.

7

Read all the session files returned by the subagents.

9

AGGREGATION: Combine the subagent analyses into a coherent picture.
CRITICAL FILTERS - ONLY ANALYZE MEETINGS THE USER ACTUALLY ATTENDED: - userAccepted=true - ONLY these meetings count. User explicitly accepted. - userAccepted=false - EXCLUDE. User either declined OR never responded. They weren't there. - isAllDay=true - Status markers, NOT countable work. Don't build narratives around them.
DO NOT: - Celebrate low decline rates ('You said yes 97%...') - Count meetings the user never responded to - Include time before the user's first accepted meeting (they may not have joined yet)
This is about TIME, not meetings: - Meetings = collaboration time - Blocks = focus time, project work - Patterns = the rhythm of their life
Cross-reference insights: - Link people to topics: 'You and [person] focused on the product launch' - Link phases to work: 'Engineering dominated your autumn'

10

Create the final Unwrapped. Follow sliceYear in Review Insights closely.
Think SHAREABLE. Think SPOTIFY WRAPPED. Each section should be screenshot-worthy.

Your [Year] Unwrapped

Opening Hook - Lead with the most surprising/impressive number
The Big Picture - Time in relatable units ('35 full days of scheduled time')
Your People - Top relationships, when they started, how much time together
Your Year's Journey - The chapters and phases (not quarters!)
Your Rhythm - The recurring rituals that anchored your weeks
What You Worked On - Topics and projects from event content
Wow Moments - 2-3 GENUINELY surprising specifics (streaks, extremes, milestones)
Calendar Personality - Optional, only if clear archetype
TONE: Celebratory, personal, playful, surprising. This is a highlight reel they'll want to share!

11

After delivering the Unwrapped, offer two follow-up options:
'Want more? I can either: 🔥 Roast Me - A savage (but loving) roast of your calendar habits 📈 Optimize - Specific suggestions to level up your time management
Just say which one you want, or we're done here!'
Wait for user response. Do NOT read either follow-up slice unless they ask.

12

If user asks for ROAST: Read sliceCalendar Roast Guide, then deliver a savage roast based on their calendar data. Be specific to their actual numbers. Make it sting but end affectionately.

13

If user asks for OPTIMIZE: Read sliceCalendar Optimizer Guide, then analyze their patterns and give specific, actionable suggestions. Focus on their biggest lever and 2-3 quick wins.

14

Clean up: delete the session file uiYear Review Events

                    To run this task you must have the following required information:

> Year to analyze (defaults to current year)

If you don't have all of this information, exit here and respond asking for any extra information you require, and instructions to run this task again with ALL required information.

---

You MUST use a todo list to complete these steps in order. Never move on to one step if you haven't completed the previous step. If you have multiple read steps in a row, read them all at once (in parallel).

Add all steps to your todo list now and begin executing.

## Steps

1. Check for Google Calendar connection. If not connected, guide the user through setup first. Confirm they're connecting their WORK calendar - this is a work year in review.

2. Determine the year to analyze. Default to current year unless user specifies. Say 'Let me look at your [year]...'

3. [Gather Arguments: Fetch Year Calendar Data] The next step has the following requirements for arguments, do not proceed until you have all the required information:
- `year`: Year to analyze (e.g., 2025)
- `outputPath` (default: "session/year-review.json"): ./documents/tmp/year-review.json

4. [Run Code: Fetch Year Calendar Data]: Call `run_script` with:

```json
{
  "file": {
    "path": https://sk.ills.app/code/review.calendar.year/preview,
    "args": [
      "year",
      "outputPath"
    ]
  },
  "packages": null
}
```

5. [Read Year Review Events]: Read the file at `./documents/tmp/year-review.json` and analyze its contents

6. Quick sanity check: Does this look like a WORK calendar?
Signs of work calendar: - Multiple recurring meetings with colleagues - Domain email addresses (company.com) - Meeting titles like syncs, standups, 1:1s, reviews
Signs of personal calendar: - Mostly solo events (Gym, Doctor, Dinner) - Few or no other attendees - No company domain pattern
If this looks personal, stop and tell the user: 'This looks like a personal calendar. For your Work Year Unwrapped, please connect your work calendar instead.'
If it's clearly work, proceed.

7. Run these analysis tasks in parallel as subagents: - `./skills/sauna/[skill_id]/references/recipes/review.calendar.collaborators.md` (who you spent time with) - `./skills/sauna/[skill_id]/references/recipes/review.calendar.phases.md` (the story of your year) - `./skills/sauna/[skill_id]/references/recipes/review.calendar.teams.md` (rituals and rhythms) - `./skills/sauna/[skill_id]/references/recipes/review.calendar.topics.md` (what you worked on) Each subagent will write their analysis to a session file and return the path.

8. Read all the session files returned by the subagents.

9. [Read Year in Review Insights]: Read the documentation in: `./skills/sauna/[skill_id]/references/review.calendar.insights.md` (Wrapped-style patterns)

10. AGGREGATION: Combine the subagent analyses into a coherent picture.
CRITICAL FILTERS - ONLY ANALYZE MEETINGS THE USER ACTUALLY ATTENDED: - userAccepted=true - ONLY these meetings count. User explicitly accepted. - userAccepted=false - EXCLUDE. User either declined OR never responded. They weren't there. - isAllDay=true - Status markers, NOT countable work. Don't build narratives around them.
DO NOT: - Celebrate low decline rates ('You said yes 97%...') - Count meetings the user never responded to - Include time before the user's first accepted meeting (they may not have joined yet)
This is about TIME, not meetings: - Meetings = collaboration time - Blocks = focus time, project work - Patterns = the rhythm of their life
Cross-reference insights: - Link people to topics: 'You and [person] focused on the product launch' - Link phases to work: 'Engineering dominated your autumn'

11. Create the final Unwrapped. Follow `./skills/sauna/[skill_id]/references/review.calendar.insights.md` closely.
Think SHAREABLE. Think SPOTIFY WRAPPED. Each section should be screenshot-worthy.
# Your [Year] Unwrapped
**Opening Hook** - Lead with the most surprising/impressive number
**The Big Picture** - Time in relatable units ('35 full days of scheduled time')
**Your People** - Top relationships, when they started, how much time together
**Your Year's Journey** - The chapters and phases (not quarters!)
**Your Rhythm** - The recurring rituals that anchored your weeks
**What You Worked On** - Topics and projects from event content
**Wow Moments** - 2-3 GENUINELY surprising specifics (streaks, extremes, milestones)
**Calendar Personality** - Optional, only if clear archetype
TONE: Celebratory, personal, playful, surprising. This is a highlight reel they'll want to share!

12. After delivering the Unwrapped, offer two follow-up options:
'Want more? I can either: 🔥 **Roast Me** - A savage (but loving) roast of your calendar habits 📈 **Optimize** - Specific suggestions to level up your time management
Just say which one you want, or we're done here!'
Wait for user response. Do NOT read either follow-up slice unless they ask.

13. If user asks for ROAST: Read `./skills/sauna/[skill_id]/references/review.calendar.roast.md`, then deliver a savage roast based on their calendar data. Be specific to their actual numbers. Make it sting but end affectionately.

14. If user asks for OPTIMIZE: Read `./skills/sauna/[skill_id]/references/review.calendar.optimizer.md`, then analyze their patterns and give specific, actionable suggestions. Focus on their biggest lever and 2-3 quick wins.

15. Clean up: delete the session file `./documents/tmp/year-review.json`