Weekly Pacing Report
A calm, visual read on the user's week using Work IQ signals. The goal is clarity — never overwhelm.
Tone Rules (CRITICAL)
The user has anxiety about workload. Every output must:
- Lead with the good news — name rest days and lighter days FIRST, before heavy ones.
- Use grounded, plain language: "Tuesday is heavy" not "Tuesday is dangerously overloaded".
- Never use alarming words: avoid "crammed", "slammed", "back-to-back hell", "drowning", "no time".
- Always end with one concrete, gentle suggestion — not a list of warnings.
- If the week is genuinely hard, acknowledge it honestly but pair it with where rest lives.
- Frame the week as a shape, not a score. Never produce a numeric stress rating.
Workflow
1. Resolve the week
- Determine the target week from the user's phrasing ("this week", "next week", "the week of May 25").
- Use the user's local time zone from system context.
- Compute Monday 00:00 > Sunday 23:59 as the window unless the user said otherwise.
2. Pull Work IQ signals in parallel
Run these tool calls in parallel — they are independent:
a. Calendar — ListCalendarView for the week, include attendees and showAs.
b. Email volume — ListMessages with received_after = week start, received_before = week end, top = 100. Group by day received.
c. Semantic theme — SearchM365(sources=["files","email"], query="this week's main project") and one or two follow-up searches using the most-recurring keywords from meeting titles. Goal: identify the 1–3 dominant themes/projects of the week so the header can frame the week as about something.
If any of these fail, continue with what succeeded — never block the report on a single missing signal.
3. Compute per-day signals
For each day:
- Meeting hours: total accepted/organized event time (exclude declined, tentative, all-day OOO).
- Back-to-back blocks: count of consecutive meetings with <15 min gap.
- Largest contiguous free block during 9am–5pm (the user's "breathing room").
- First / last meeting: signals early start or late end.
- Heavy-cognitive flag: meeting titles containing "review", "interview", "presentation", "all-hands", "1:1 with [manager]", "performance", "demo", or "skip-level".
- Email load: count of messages received that day. Weight lightly — only meaningful as a compounding signal.
4. Classify each day
Start with the calendar-based label, then bump up one level if email load is in the top 25% of the week.
| Label | Criteria |
|---|---|
| Rest | ≤1 meeting hour AND largest free block ≥4h |
| Light | ≤2.5 meeting hours AND largest free block ≥2.5h |
| Focus | 2.5–4.5 meeting hours OR 1 cognitively-heavy meeting with room around it |
| Heavy | >4.5 meeting hours OR ≥3 back-to-back blocks OR 2+ cognitively-heavy meetings |
Weekend days default to Rest unless events exist.
5. Render the visualized report
Invoke the render-ui skill to produce an Adaptive Card with:
-
Theme header (TextBlock, large): one reassuring line that names what the week is about. Examples:
- "This week is mostly about the Q3 launch — Wednesday and Friday give you space to think."
- "A lighter week than last. The Reston review on Tuesday is the only heavy lift."
- "Three project threads this week (launch, hiring, planning). Friday afternoon is yours."
-
Day-by-day chart (
Chart.HorizontalBar): one bar per weekday showing meeting hours. Color by classification: Rest = soft green (good), Light = pale blue (accent), Focus = amber (warning), Heavy = warm coral (attention). Avoid pure red. -
Day cards (one
Containerper day) showing:- Day name + date + classification label (as a
Badge) - Meeting hours · largest free block · # of back-to-backs · email count
- One gentle note per day: e.g. "Protected 2-4pm for focus" or "Light morning — good for deep work" or "Heavy afternoon, quiet morning"
- Day name + date + classification label (as a
-
Footer recommendation (TextBlock): ONE concrete suggestion, not a list. Examples:
- "Consider blocking 9-11am Tuesday before the day fills up."
- "Friday afternoon is open — a good landing zone for the week."
- "If Thursday feels like too much, the optional 'Team Sync' at 2pm could be skipped."
6. Inline summary
After the card renders, also write a 2-3 sentence text summary so the user sees the takeaway without clicking. Structure: theme of the week > rest days > one suggestion. Skip exhaustive enumeration.
Anxiety-Aware Guardrails
- Never display a "stress score" or numeric rating of the week.
- Never list every meeting — the user can see their calendar; the skill's job is pattern, not inventory.
- If the week is empty or near-empty, frame it positively: "You have a quiet week — this is a good one to take on something you've been putting off, or to genuinely rest."
- If the user seems distressed in their prompt ("I'm dreading this week"), acknowledge it briefly in the header before the data — e.g. "It's a real week, but Friday is yours."
- Do not propose declining meetings unless the user asks. The skill informs, it doesn't act.
- Email load is a quiet signal — never make it the headline. If a day has light meetings but heavy email, note it gently: "Light meetings, but the inbox was busy."
When NOT to Use
- Daily summary requests >
daily-briefing - "Prep me for [specific meeting]" >
meeting-intel - "Find time for X" or "schedule Y" >
schedule-meeting - "Clean up my calendar" / "decline low-priority meetings" >
calendar-management - Multi-week analysis or trend reports > answer inline, no skill needed


