I Let AI Prepare Me for Every Meeting With My Manager.
Measuring whether AI can autonomously prepare accurate, manager-ready summaries for recurring 1:1 meetings using a week's worth of work activity.
The Question
Can AI become a reliable record of my professional impact?
Microsoft recently made WorkIQ generally available, giving employees access to an AI system that can retrieve information across their work data. It’s marketed as a way to surface relevant information, understand context, and reflect how you work. I wanted to know whether it could solve a problem I’ve had throughout my career.
Why This Matters
Engaging in 1:1s has never been my strong suit. I’ve tried countless approaches to documenting my work week in hopes that I’d reconcile all activities into a comprehensive summarization of the progress made for the prior work week. For one reason or another, I’ve failed to stay the course for the entirety of a quarter and resulted to ad-hoc preparation.
While this may have been sufficient in prior roles, my current role would benefit most from a more concrete solution. For starters, my current manager has more than 10 direct reports. Of those direct reports, 3 of them also have teams that they manage. That means that my manager has more than 20 individuals that they’re responsible for retaining performance information about. My manager is also very active in their role which requires a healthy amount of meetings plus travel. Rather than leave the fate of my performance reviews to the mercy of ad-hoc 1:1s, I felt it necessary to take control of my career and implement a solution that would make my progress over the semester memorable…or at least retrievable.
Methodology
Workflow
Experiment
The experiment spans four weeks.
To test whether AI could reliably prepare me for recurring 1:1s, I built two custom GitHub Copilot skills using Claude Haiku 4.5 as the underlying model.
The first, daily-debrief, uses WorkIQ alongside the GitHub MCP Server to retrieve and synthesize my work activity into a daily report. The second, weekly-brief, aggregates those daily reports over a specified time period and generates a manager-ready briefing for my weekly 1:1.
At the end of each workday, I execute the daily-debrief skill and evaluate its output across four dimensions: recall, accuracy, relevance, and efficiency. The results are logged after each execution to establish a day-by-day record of the agent’s performance.
On the following Monday, I execute the weekly-brief skill to generate a summary of the previous week’s activity. The weekly briefing is evaluated using the same methodology to determine whether the workflow can accurately prepare me for an upcoming 1:1 with my manager.
Iteration
This experiment evaluates an AI workflow rather than a single prompt.
Whenever the output exposes shortcomings in retrieval, summarization, or overall quality, I revise the underlying GitHub Copilot skills before the next evaluation cycle. Every revision is documented alongside the corresponding results so that improvements in performance can be attributed to specific changes in the workflow rather than chance.
Timeline
Experiment opened. Hypothesis: With iterative refinement, an AI agent can reliably prepare manager-ready 1:1 summaries that accurately capture the majority of my work.
First daily brief run. Recall 100%, accuracy 93%, relevance 100%, cost $0.10.
Default timezone used is UTC which caused an issue with retrieving information for PDT.
Direct fetch paths for WorkIQ had access restrictions. workiq-ask is a better alternative as the agent insists it's the more flexible approach for retrieving calendar and OneNote data.
Update daily-brief skill to set work boundary times, time zone, and using workiq-ask.
WorkIQ is unable to fetch page content in Meeting Notes within OneNote.
First weekly brief run. Recall 100%, accuracy 100%, relevance 100%, cost $0.13.
Update daily-brief skill to provide a fallback if there's no required meetings on the calendar.
Switched to GPT 5.6 Terra due to lack of instruction adherence with Claude Haiku 4.5.
Agent relies on WorkIQ's attendee-based 'work meeting' filter rather than user-defined Outlook categories. Agent instructions need to explicitly state to use the latter if using custom categories in Outlook.
Update daily-brief skill to use category-only result for Outlook calendar.
Update daily-brief skill to prevent accepting WorkIQ's broad keyword-match response for OneNote content retrieval.
Conclusion
For four weeks, I ended every workday by asking GitHub Copilot a deceptively simple question: What did I actually accomplish today?
I wanted to know whether an AI agent could reliably reconstruct my work across meetings, notes, GitHub activity, and other sources well enough to become a running record of my professional impact. By the end of the experiment, it could. But getting there was far less automatic than I expected.
Hypothesis
With iterative refinement, an AI agent can reliably prepare manager-ready 1:1 summaries that accurately capture the majority of my work.
Verdict: Supported, with an important qualification
By Week 4, the workflow reached 100% recall, 100% accuracy, and 100% relevance. Across the full four-week experiment, the daily briefs averaged 97% recall, 91% accuracy, and 93% relevance. The weekly brief averaged 100% across all three quality metrics. So yes, I was eventually able to get AI to reliably prepare me for my 1:1.
However, would I build the production version of this workflow the same way? Probably not.
What I built
I created two custom GitHub Copilot skills.
The first, daily-debrief, used WorkIQ alongside the GitHub MCP Server to retrieve my work activity and synthesize it into a daily report.
View the complete daily-debrief instructions
---
name: daily-brief
description: Generate a comprehensive daily brief summarizing meetings, completed work, work in progress, events, and community insights. Use this skill when the user asks to generate or create their daily brief.
license: MIT
---
# Daily Brief Skill
## Purpose
When the user requests their daily brief, generate a comprehensive summary of the workday following the specified format.
## ⚠️ MANDATORY FIRST STEP
**BEFORE STARTING ANY BRIEF GENERATION:** Always follow the workflow exactly as specified. Do not use generic WorkIQ queries or alternative data sources.
## Trigger
- "Generate my daily brief"
- "Create daily brief for [date]"
- "What's my daily brief?"
- "Daily brief"
- "Generate my daily brief for [date]"
- And similar variations
## Date Handling
- Default to today's date (current_datetime) unless user explicitly specifies a different date
- Parse relative dates like "yesterday", "last Friday", etc.
- Confirm date with user if unclear
- **TIMEZONE**: All daily brief boundaries use **PDT (UTC-7, California timezone)**
- **WORKDAY BOUNDARY**: Your workday ends at **10PM PDT**. Include any meetings or completed work that occur up to 10PM PDT on that calendar day (e.g., an issue closed at 8PM on July 1 PDT is included in the July 1 brief, even though it's technically July 2 UTC)
## Data Collection Process
### 1. Meetings
**Tool**: WorkIQ `workiq-ask` - Calendar
- Use `workiq-ask` to query calendar for the specified date
- **Ask**: "For [DATE], list ONLY calendar events whose category is exactly `Required Meeting`. For every returned event, provide its exact categories, title, start/end time, organizer, attendees, and available notes. Do not infer the category from attendees, title, organizer, or whether it appears to be a work meeting. Exclude every event whose categories are missing or do not contain the exact `Required Meeting` label."
- Pass `timeZone: "America/Los_Angeles"` to get PDT-converted times automatically
- **Filter by: Category = "Required Meeting" ONLY** - include an event only when the WorkIQ response explicitly reports that its categories contain the exact `Required Meeting` label. Do not include an event based on attendees, organizer, title, transcript availability, or an inferred work-meeting classification.
- **Category verification gate**: Before writing the Meetings section, verify the exact categories returned for every candidate event. If WorkIQ does not return categories, run the category-only query above again. If the category still cannot be explicitly verified, exclude the event. Never substitute a general calendar-meeting or attendee-based result for this category filter.
- **WORKDAY BOUNDARY**: Only include meetings that start before 10:00 PM PDT on the specified date. Exclude meetings that start at or after 10:00 PM PDT.
- For each Required Meeting with other attendees:
- Extract: Time (already in PDT), Meeting Name, Organizer details
- If meeting notes are available in the response, include a brief 2-3 sentence summary; otherwise use "No notes recorded"
- Format:
- If Required Meetings exist: Table with columns [Time (PDT) | Meeting | Summary]
- If NO Required Meetings found: Show text "No required meetings scheduled" (not a table)
- **IMPORTANT**: Do NOT include personal time blocks, focus blocks, lunch blocks, or self-created calendar holds—only actual meetings with other attendees
### 2. Completed Work
**Tool**: GitHub CLI graphql queries - devrel repo (https://github.com/github/devrel/issues)
- Query: Issues closed by user "aprilgittens" on the specified date
- **Important**: GitHub stores times in UTC. To capture your PDT workday (through 10PM PDT), convert the date range:
- Start: `YYYY-MM-DD` at 12:00 AM PDT = `YYYY-MM-DD 07:00 UTC`
- End: `YYYY-MM-DD` at 10:00 PM PDT = `(YYYY-MM-DD+1) 05:00 UTC`
- Example for July 8: Query `closed:2026-07-08T07:00Z..2026-07-09T05:00Z`
- Use PowerShell with GitHub CLI (set $env:GITHUB_TOKEN=$null to use keyring auth):
```powershell
gh api graphql -f query='query { search(query:"repo:github/devrel author:aprilgittens state:closed closed:YYYY-MM-DDTHH:MMZ..YYYY-MM-DDTHH:MMZ", type:ISSUE, first:10) { edges { node { ... on Issue { title url createdAt closedAt } } } } }'
```
- Extract for each issue:
- Title, Link (url), Created date (createdAt - convert to PDT format YYYY-MM-DD), Updated/Closed date (closedAt - convert to PDT format YYYY-MM-DD)
- Format: Table with columns [Title | Link | Created | Updated]
- Date format in table: YYYY-MM-DD (converted to PDT from UTC timestamps)
- If no completed issues, show "No issues closed today"
### 3. Work in Progress
**Tool**: GitHub CLI graphql queries - devrel repo (https://github.com/github/devrel/issues)
- Query: Open issues in devrel repo where aprilgittens is assignee
- Use PowerShell with GitHub CLI:
```powershell
gh api graphql -f query='query { search(query:"repo:github/devrel assignee:aprilgittens state:open", type:ISSUE, first:10) { edges { node { ... on Issue { title url createdAt } } } } }'
```
- Extract for each issue:
- Title, Link (url), Created date (createdAt)
- Format: Table with columns [Title | Link | Created]
- Date format: YYYY-MM-DD
- Note: No date filtering - include all open issues regardless of creation date
- If no open issues assigned, show "No issues in progress"
### 4. Events
**Tool**: GitHub CLI graphql queries - IRL repo (https://github.com/github/IRL/issues)
- Query: Open issues in IRL repo where aprilgittens is assignee
- Use PowerShell with GitHub CLI:
```powershell
gh api graphql -f query='query { search(query:"repo:github/IRL assignee:aprilgittens state:open", type:ISSUE, first:10) { edges { node { ... on Issue { title url } } } } }'
```
- Extract for each issue:
- Issue name (title), Link (url)
- Format: Bullet list with format: **[Issue Name](link)**
- If no open issues assigned, show "No events assigned"
### 5. Community Insights
**Tool**: WorkIQ `workiq-ask` - OneNote
- Use `workiq-ask` to query OneNote for the week containing the specified date
- **Ask**: "Search ONLY my OneNote notebooks and pages for Community Insights recorded during the week containing [DATE]. Do not use Viva Engage, Teams, email, files, calendar, or organization-wide search results. Return each matching OneNote page title, its notebook/section, the recorded topic, observation, and source. If no non-template entries exist, say exactly: No Community Insights recorded for this week."
- Pass `timeZone: "America/Los_Angeles"` for consistency
- **OneNote verification gate**: Include an insight only when the WorkIQ response explicitly identifies its OneNote page title and notebook or section. Reject entries from Viva Engage, Teams, email, SharePoint files, calendar, or any other source, even if their text mentions "Community Insights." If every result is rejected or no non-template entry is returned, write "No Community Insights recorded for this week."
- For each entry returned, extract:
- Topic (entry title/topic)
- Observation (summary of the insight/observation)
- Source (where the insight came from - link, person, document, etc.)
- Format: Bullet list with format:
```
- **Topic**
- Observation: [summary]
- Source: [source reference]
```
- If no Community Insights recorded for that week or if only template placeholders exist, show "No Community Insights recorded for this week"
### 6. Overview
**Tool**: Auto-generated based on Completed Work and Work in Progress sections
- Synthesize the data from Completed Work and Work in Progress
- Create a 2-3 sentence narrative summary that:
- Highlights key accomplishments from Completed Work
- Describes current focus areas from Work in Progress
- Reads naturally and flows as a cohesive summary
- Place at top of brief under the Date/Day headers
- Example style: "Today was focused on improving model selection workflows and automation. Closed issues on research workflow and LOE automation, while continuing work on prompt caching blog post and workshop updates. Current efforts are centered on content creation and internal tool improvements."
## Output Format
### File Location
- Create directory structure: `Briefs/Daily/{year}/{month}/`
- Example: `Briefs/Daily/2026/06/`
- Filename: `daily-brief-{month}-{day}.md`
- Example: `daily-brief-06-26.md`
### Template Structure
Follow the format exactly:
1. **Header**: Title with date (YYYY-MM-DD) and Day (e.g., "# Daily Brief — Friday, June 26, 2026")
2. **Overview**: Auto-generated 2-3 sentence summary
3. **Meetings**: Table or empty message
4. **Completed Work**: Table or empty message
5. **Work in Progress**: Table or empty message
6. **Events**: Bullet list or empty message
7. **Community Insights**: Bullet list or empty message
8. **Footer**: Generated timestamp in format `- Generated: YYYY-MM-DD HH:mm PDT`
### Timestamp Handling
- Convert all times to PDT (UTC-7)
- Use format: `YYYY-MM-DD HH:mm PDT` for generation timestamp
- Meeting times should display with PDT indicator (e.g., "4:00 PM – 4:30 PM PDT")
- Apply timezone conversion to all meeting times and event timestamps
## Error Handling
- **Missing Data**: If a section has no data, show "No items" or leave section empty (use template as guide)
- **Invalid Date**: If user provides invalid date, ask for clarification
- **API Failures**: If a data source is unavailable, note it in the section (e.g., "Unable to retrieve calendar data")
- **Missing OneNote/Calendar**: Handle gracefully with clear message about missing data
- **GitHub API Errors**: Provide user-friendly error message
## Credentials/Usernames
- GitHub user for filtering: **aprilgittens**
- WorkIQ will use stored Microsoft To Do credentials (SessionID: redacted, UserID: redacted)
- Timezone preference: **PDT (UTC-7)**
## Execution Checklist
Before generating the brief, verify:
- [ ] **READ THESE INSTRUCTIONS** - This entire file has been read and understood
- [ ] Date is confirmed/parsed correctly (or ask user for clarification)
- [ ] GitHub auth verified: Run `gh auth status` - should show aprilgittens authenticated via keyring
- [ ] All five data sources are queried:
- [ ] Meetings (WorkIQ calendar + OneNote)
- [ ] Completed Work (GitHub devrel repo closed issues)
- [ ] Work in Progress (GitHub devrel repo open issues)
- [ ] Events (GitHub IRL repo open issues)
- [ ] Community Insights (OneNote weekly page)
- [ ] Timezone conversions verified: All times displayed in PDT with indicator
- [ ] Every listed meeting has an explicitly returned category containing the exact `Required Meeting` label; events with missing or unverified categories are excluded
- [ ] Every listed Community Insight explicitly identifies a OneNote page title and notebook/section; broad WorkIQ matches and non-OneNote sources are excluded
- [ ] Data is formatted according to template specifications
- [ ] Overview summary is generated (2-3 sentences synthesizing Completed + In Progress work)
- [ ] Output directory structure exists: `Briefs/Daily/{year}/{month}/`
- [ ] File is saved with correct naming: `daily-brief-{month}-{day}.md`
- [ ] Timestamp is in PDT: `YYYY-MM-DD HH:mm PDT`
- [ ] Confirmation message shows file path and summary of sections populated
## Example Response Flow
1. User: "Generate my daily brief"
2. **READ these instructions completely**
3. Confirm date with user if unspecified (or parse relative dates like "yesterday")
4. Verify GitHub authentication with `gh auth status`
5. Query all five data sources in parallel (when possible):
- WorkIQ (via `workiq-ask`): Calendar meetings with timeZone="America/Los_Angeles", requiring explicit `Required Meeting` category verification, and OneNote community insights
- GitHub CLI: devrel closed issues, devrel open issues, IRL open issues
6. Generate Overview based on completed and in-progress work (2-3 sentences)
7. Verify all times are displayed in PDT (workiq-ask handles this with timeZone parameter)
8. Compile all sections into markdown following template exactly
9. Create Briefs directory structure if needed
10. Save file to Briefs/Daily/{year}/{month}/daily-brief-{month}-{day}.md
11. Confirm to user: "✅ Daily brief generated and saved to Briefs/Daily/{year}/{month}/daily-brief-MM-DD.md" with section summary
## Troubleshooting
- **GitHub auth fails**: Run `$env:GITHUB_TOKEN = $null` before queries to use keyring authentication
- **WorkIQ direct fetch fails**: Use `workiq-ask` instead of direct `workiq-fetch` or `workiq-call_function` paths - direct WorkIQ fetch paths may have access restrictions. Always use `workiq-ask` for natural language queries to calendar and OneNote.
- **Timezone confusion**:
- Always pass `timeZone: "America/Los_Angeles"` to `workiq-ask` - it automatically converts times to PDT
- For GitHub queries, remember to convert PDT date boundaries to UTC (PDT + 7 hours = UTC). Workday ends at 10PM PDT = 5AM UTC next day
- All displayed times should be in PDT with indicator (e.g., "8:00 PM PDT")
- **Required Meeting category missing**: Do not infer that an event is required from its attendees or title. Re-run the category-only calendar query requesting exact categories; if the label cannot be explicitly confirmed, exclude the event and use "No required meetings scheduled" when no verified events remain.
- **Missing data sections**: Show "No [section] found" rather than empty tables for clarity The second, weekly-brief, took those daily reports over a specified period and turned them into a manager-ready briefing for my weekly 1:1.
View the complete weekly-brief instructions
---
name: weekly-brief
description: Generate a comprehensive weekly summary synthesizing daily briefs into one cohesive overview
---
# Weekly Brief Skill
## Purpose
Aggregate daily briefs from a specified date range into a comprehensive weekly summary that synthesizes the week's work with an LLM overview and consolidated sections.
## Trigger
- "Weekly brief"
- "Generate weekly brief"
- "Create weekly summary"
- "Weekly debrief"
- And similar variations
## Execution Workflow
### 1. Prompt for Date Range
- Ask user: "What date range would you like to summarize? (format: MM-DD - MM-DD)"
- Example: "06-29 - 07-02"
- Parse the input to extract start date and end date
- Determine year: Use current year for both dates
- Handle cross-month ranges automatically (e.g., 06-29 - 07-02 spans June and July)
### 2. Date Range Parsing Logic
- Input format: MM-DD - MM-DD
- Extract: start_month, start_day, end_month, end_day
- Year = current year (from current_datetime)
- Validate dates exist in the identified months
- Create list of all dates between start and end (inclusive)
- Determine unique month/year combinations needed to search daily briefs
### 3. Daily Brief File Discovery
**Tool**: File system search
- For each month/year combination identified in the date range:
- Search: `Briefs/Daily/{year}/{month}/daily-brief-{MM-DD}.md`
- Example: For date range 06-29 - 07-02:
- Search `Briefs/Daily/2026/06/` for daily-brief-06-29.md and daily-brief-06-30.md
- Search `Briefs/Daily/2026/07/` for daily-brief-07-01.md and daily-brief-07-02.md
- Collect all matching files in chronological order
- If no files found, notify user and stop
### 4. Parse Daily Brief Files
For each daily brief file found (in chronological order):
- Extract the following sections:
- **Overview**: Full text of overview paragraph
- **Meetings**: Parse table, extract all rows (Time, Meeting, Summary)
- **Completed Work**: Parse table, extract all rows (Title, Link, Created, Updated)
- **Work in Progress**: Parse table, extract all rows (Title, Link, Created)
- **Events**: Parse bullet list, extract all items
- **Community Insights**: Parse bullet list, extract all items (Topic, Observation, Source)
### 5. Aggregate & Deduplicate Sections
#### Meetings (Chronological, No Dedup)
- Combine all meetings from all daily briefs
- Sort by time in chronological order (earliest first)
- Preserve all meetings even if repeated across days
- Format: Table with columns [Time (PDT) | Meeting | Summary]
#### Completed Work (Deduplicate by Title+Link)
- Combine all completed work items from all daily briefs
- Deduplicate: If same title AND link appear multiple times, keep only one
- Preserve order: Keep first occurrence
- Format: Table with columns [Title | Link | Created | Updated]
#### Work in Progress (Deduplicate by Title+Link)
- Combine all WIP items from all daily briefs
- Deduplicate: If same title AND link appear multiple times, keep only one
- Preserve order: Keep first occurrence
- Format: Table with columns [Title | Link | Created]
#### Events (Deduplicate)
- Combine all events from all daily briefs
- Deduplicate: Remove duplicate entries (match by title or description)
- Preserve order: Keep first occurrence
- Format: Bullet list
#### Community Insights (Deduplicate by Topic)
- Combine all community insights from all daily briefs
- Deduplicate: If same topic appears multiple times, keep all unique observations grouped under topic
- Format: Bullet list with format:
```
- **Topic**
- Observation: [summary]
- Source: [source reference]
```
### 6. Generate Overview via LLM
**Tool**: Anthropic Claude API (via Copilot context)
- Input: All daily overview paragraphs from the date range
- Prompt: "Synthesize these daily work overviews into a single 2-3 sentence weekly summary that captures key themes, accomplishments, and current focus areas for the week of {start_date} to {end_date}. Be concise and highlight strategic activities."
- Output: 2-3 sentence weekly overview
- Fallback: If LLM call fails, concatenate daily overviews with " | " separator
### 7. Build Weekly Brief Output
Structure (in order):
1. **Header**: "# Weekly Brief — Week of {Start Date} to {End Date}"
- Format: "# Weekly Brief — Week of Monday, June 29 to Wednesday, July 2, 2026"
2. **Needs from Manager** (NEW)
- Content: Placeholder table
- Format:
```
| Request | Due Date |
|---------|----------|
| | |
```
3. **Overview**
- Content: LLM-generated 2-3 sentence summary
4. **Meetings**
- Content: All meetings in chronological order
- Format: Table [Time (PDT) | Meeting | Summary]
- If no meetings: "No meetings recorded"
5. **Completed Work**
- Content: Deduplicated completed work items
- Format: Table [Title | Link | Created | Updated]
- If no items: "No issues closed during this period"
6. **Work in Progress**
- Content: Deduplicated WIP items
- Format: Table [Title | Link | Created]
- If no items: "No issues in progress"
7. **Events**
- Content: Deduplicated events
- Format: Bullet list
- If no items: "No events scheduled"
8. **Community Insights**
- Content: Deduplicated insights
- Format: Bullet list (Topic, Observation, Source)
- If no items: "No Community Insights recorded"
9. **Interesting Reads** (NEW - Placeholder)
- Content: Placeholder table
- Format:
```
| Article | Insight |
|---------|---------|
| | |
```
10. **Footer**
- Content: Generated timestamp
- Format: `- Generated: YYYY-MM-DD HH:mm PDT`
### 8. Write Output File
**File Location**:
- Directory: `briefs/weekly/{current-year}/{end-month}/`
- Example: `briefs/weekly/2026/07/` (current year is 2026, end date month is 07)
- Filename: `weekly-brief-{start-date}-to-{end-date}.md`
- Example: `weekly-brief-06-29-to-07-02.md`
**Actions**:
- Create markdown file with the weekly brief content
- Open file in editor for user review/editing
- Confirm: "✅ Weekly brief generated: briefs/weekly/{year}/{month}/weekly-brief-{start}-to-{end}.md"
## Output Format Example
```markdown
# Weekly Brief — Week of Sunday, June 29 to Wednesday, July 2, 2026
## Needs from Manager
| Request | Due Date |
|---------|----------|
| | |
## Overview
This week focused on developer relations and strategic initiatives around GitHub Copilot and FinOps. Key activities included conference attendance, thought leadership on AI cost management, and advocacy team alignment. Work in progress spans speaking engagements, content development on budget management and out-of-budget experiences, and ongoing contributions to the UBB/TBB content epic.
## Meetings
| Time (PDT) | Meeting | Summary |
|-----------|---------|---------|
| 12:00 PM – 1:00 PM | [Research report] FinOps X 2026: the state of FinOps & AI | Discussed FinOps X conference recap and industry trends around AI cost management. Covered competitive analysis and recommendations for Azure. |
| 3:00 PM – 3:45 PM | Advocacy Team Meeting | Strategic alignment on key initiatives and messaging. |
## Completed Work
No issues closed during this period.
## Work in Progress
| Title | Link | Created |
|-------|------|---------|
| Speaking: GitHub Copilot Day - Introduction to GitHub Copilot CLI | [#5467](https://github.com/github/devrel/issues/5467) | 2026-06-10 |
| Content: What happens when budgets are exhausted? | [#5282](https://github.com/github/devrel/issues/5282) | 2026-05-06 |
## Events
- **[Aug 12-13, 2026 : RenderATL 2026](https://github.com/github/IRL/issues/1926)**
## Community Insights
- **Companies cap AI usage**
- Observation: Tesla has capped their employee AI spend at $200/week. This comes after the company's adoption push.
- Source: The Information
## Interesting Reads
| Article | Insight |
|---------|---------|
| | |
---
- Generated: 2026-07-02 10:49 PDT
```
## Error Handling
- **Invalid Date Format**: If user provides date in wrong format, ask for clarification with example
- **No Files Found**: If no daily briefs exist for the specified date range, notify user and suggest checking file locations
- **Incomplete Date Range**: If some dates have no corresponding daily brief files, note which dates are missing and proceed with available data
- **LLM Synthesis Failure**: If Claude API fails, fall back to concatenating daily overviews
- **File Write Error**: If output file cannot be written, display error and ask for alternative location
## Timezone Handling
- All times from daily briefs are already in PDT (from daily brief generation)
- Preserve all times as-is when aggregating
- Use current PDT time for generation timestamp
- Timezone indicator (PDT) should be displayed in all time fields
## Execution Checklist
Before generating the weekly brief, verify:
- [ ] Date range is parsed correctly (MM-DD - MM-DD format)
- [ ] Start and end dates are identified
- [ ] Current year is correctly determined
- [ ] All daily brief files for the date range are discovered
- [ ] All sections are extracted and parsed correctly
- [ ] Deduplication logic is applied to all sections
- [ ] LLM overview synthesis is successful (or fallback used)
- [ ] Output file path is correct: `briefs/weekly/{current-year}/{end-month}/weekly-brief-{start}-to-{end}.md`
- [ ] All sections are formatted according to template
- [ ] Timestamp is in PDT format
- [ ] File is created and opened for user
## Notes on Implementation
- This is a data aggregation + light synthesis skill
- LLM is used ONLY for Overview synthesis; all other sections are aggregated as-is
- Deduplication ensures the weekly brief is concise and avoids redundancy
- The "Needs from Manager" table is a new section specific to weekly briefs
- "Interesting Reads" becomes a placeholder table instead of content aggregation
- Maintain chronological order for meetings (important for context)
- All other aggregated sections should be deduplicated to improve clarity
The initial model used for the experiment was Claude Haiku 4.5, however, an accidental change to GPT 5.6 Terra on Medium reasoning on July 15 resulted in an immediate improvement in recall (e.g. 100% recall). To validate that this change wasn’t a fluke, I invoked the daily-brief skill in a new conversation, using the same date and agent instructions, and the Claude Haiku 4.5 model didn’t adhere to the agent skill instruction of only pulling in required meetings. It pulled all meetings and insisted that July 15 was a full meeting day.
How I tested it
At the end of each workday, in the GitHub Copilot CLI, I ran the skill /daily-debrief [date] (e.g. /daily-debrief 08-25) and manually evaluated the resulting report across four dimensions:
Recall: Did the agent retrieve all of the information I expected it to find? This measures completeness by comparing the number of expected items against the number successfully retrieved.
Accuracy: Was the retrieved information, and the agent’s synthesis of that information, factually correct? This includes whether details were represented correctly without introducing errors, distortions, or unsupported claims.
Relevance: Was the information included actually useful and appropriate for the brief? This measures whether the agent surfaced the right information while excluding unrelated or unnecessary content.
Efficiency: GitHub AI Credits, tokens consumed, and estimated cost.
On the following Monday, I ran weekly-brief over the prior week’s daily reports and evaluated the resulting 1:1 briefing using the same methodology.
The experiment ran from July 6, 2026 to August 10, 2026, covering 20 daily briefs and 4 weekly briefs.
Note: I was away from work July 20 - July 24.
The results
| Metric | Daily Brief Average | Weekly Brief Average |
|---|---|---|
| Recall | 97% | 100% |
| Accuracy | 91% | 100% |
| Relevance | 93% | 100% |
| GitHub AI Credits | 22.665 | 18 |
| Tokens | ~325.3K* | ~227.2K* |
| Cost | $0.227 | $0.180 |
The final week matters just as much as the averages. By Week 4, recall, accuracy, and relevance had all reached 100%. That supports the original hypothesis: iterative refinement made the workflow substantially more reliable. However, it also hides a lot of messiness in those averages.
Most of my early problems weren’t actually summarization problems
This was probably my biggest takeaway. When the daily brief was wrong, the problem was frequently upstream of the model’s final response. The agent had retrieved the wrong information. In the beginning, the agent used the wrong work and date boundaries. It searched too broadly. It failed to distinguish a specific OneNote source from an organization-wide keyword match. It didn’t know what to do when a query returned nothing. In one case, WorkIQ could identify that a OneNote page existed without being able to retrieve the contents of the page. Once bad information entered the context, asking the model to summarize it better wasn’t going to fix the problem.
Provided below are summaries of key findings/moments throughout the experiment:
1. Time zones are not an implementation detail
On July 8, a July 7 meeting appeared in my July 8 brief. Part of the issue was that my GitHub query used UTC date boundaries rather than accounting for my PDT workday.
That led to one of the first important changes to the skill: time boundaries had to be explicitly defined rather than left for the agent to infer. For a workflow whose entire job is to tell me what I did today, being off by one day is a pretty significant problem.
2. Empty results need instructions too
I have a custom Required Meeting label that I use in Outlook for meetings in which my presence is required. This label indicates that I actually attended the meeting and was therefore also an active participant. On July 13, there were no meetings in the Required Meeting category that I wanted the agent to retrieve. Instead of treating “none” as a perfectly valid answer, the agent pulled in all of my meetings. It also identified the day as Sunday when it was Monday. I updated the skill with explicit fallback behavior for days when no required meetings were found.
This sounds like a tiny prompt change, but it exposed a larger agent design problem: “No result” needs to be an expected state.
Without instructions for what to do when information isn’t available, an agent may try to be helpful by substituting something else. For this workflow, I’d much rather receive “No verified result found” than a polished section filled with the wrong information.
3. Broad search is dangerous when the source matters
A similar issue appeared on July 29. The agent returned eight “Community Insights” items when there should have been none. When I challenged the result, Copilot explained that those items came from a broad WorkIQ search that surfaced organization-wide Viva Engage and event content. It had accepted keyword matches for “community insights” as though they came from my personal OneNote Community Insights page. However, they didn’t. I updated the skill again, this time instructing it to verify the required source before including the information.
This became another rule for the workflow: A relevant keyword match is not the same thing as a verified source.
That distinction is especially important when you’re asking AI to create a professional record. Plausible information isn’t enough. I need to know it came from the place I told the agent to look.
4. Categories have to be verified, not inferred
On July 16, the brief included meetings that were not part of my required meeting category. The explanation was revealing: the calendar query had used attendees to infer which meetings looked like work meetings instead of confirming the actual category I had specified. Again, the output looked reasonable. However, it was also wrong. Once I forced the workflow to verify the category rather than infer it from surrounding signals, the incorrect meetings disappeared.
This experiment gave me several variations of the same lesson: When precision matters, don’t let the agent infer something that can be explicitly checked.
5. Tool access created its own reliability problems
There were also problems that had very little to do with prompting.
On July 8, WorkIQ initially returned an access-denied error. Running the request again using workiq-ask worked.
On July 9, WorkIQ found a matching OneNote meeting page but couldn’t retrieve its contents. It knew the page existed, but the search index only returned a match indicator rather than the notes themselves.
Those are difficult failures to solve entirely through better agent instructions because the information isn’t necessarily available to the model in the first place. And that’s important when considering automation. A workflow that works after I manually notice a failure, ask why it failed, and retry the query isn’t the same thing as a workflow I’m comfortable scheduling every afternoon and never looking at.
At least, not yet!
6. The model appeared to matter, but I didn’t test that scientifically
There were also two accidental model changes during the experiment.
On July 15, I unintentionally ran the workflow using GPT-5.6 Terra with Medium reasoning. The retrieval worked without issue. When I switched back to Claude Haiku 4.5, the model failed to follow the skill’s meeting-selection instructions and had difficulty retrieving the Community Insights content.
On August 3, GitHub Copilot CLI had switched to it’s default model, GPT-5.6 Sol, and the workflow also ran successfully. Those observations are interesting. However, they’re not enough to conclude that GPT 5.6 Terra or GPT 5.6 Sol is better than Claude Haiku 4.5 for this workflow. More specifically, it doesn’t conclude that small language models are better for such workflows. However, one could infer that’s the case.
The model changes weren’t controlled experiments. I didn’t run the same inputs repeatedly across each model while holding every other variable constant. What I can say is that the workflow displayed some model sensitivity. The exact same skill instructions didn’t always produce the same retrieval behavior when the underlying model changed.
That’s a future experiment, not a conclusion from this one.
The strongest part of the workflow was synthesis
Here’s where the results became particularly interesting. The daily brief had to go out into multiple systems, find information, determine whether it belonged in the report, and then synthesize it. The weekly brief had a much simpler job. It was given the daily reports that had already been collected and needed to turn them into a coherent manager briefing. The difference showed up in both quality and efficiency.
| Metric | Daily Brief Average | Weekly Brief Average |
|---|---|---|
| Recall | 97% | 100% |
| Accuracy | 91% | 100% |
| Relevance | 93% | 100% |
| Tokens | ~325.3K | ~227.2K |
| Cost | $0.227 | $0.180 |
The daily brief workflow consumed roughly 43% more tokens and cost roughly 26% more per execution than the weekly brief workflow.
Now, I can’t claim that retrieval alone caused that entire difference. The two skills perform different tasks. But paired with the failure logs, the pattern is difficult to ignore.
Retrieval Starts With Information Hygiene
One factor that became increasingly obvious during the experiment was that retrieval quality depended on how well I maintained the underlying information. The agent could only work with the structure and status signals I gave it. If I forgot to mark a meeting as required, it could be omitted. If I accidentally marked an irrelevant meeting as required, the agent could retrieve and process information I never wanted in the brief.
The same applied to GitHub Issues. Because the workflow used issue status as a signal for completed work, failing to close an Issue after finishing it could cause the agent to miss that accomplishment entirely. Likewise, incorrectly closing or leaving stale Issues in the wrong state could distort what the agent interpreted as current or completed work.
Over time, poor information hygiene does more than hurt recall, accuracy, and relevance. It can also increase token consumption by forcing the agent to retrieve, inspect, and synthesize unnecessary or outdated context. Reliable retrieval, then, is not just an AI problem. It also depends on the human maintaining clean metadata, accurate statuses, and consistent source organization.
What I’d build instead
If I were turning this experiment into something I intended to run indefinitely, I would separate retrieval from synthesis much more aggressively. Where possible, I’d use the Microsoft Graph API to programmatically retrieve the exact Microsoft 365 data I need, with explicit dates, filters, categories, and source identifiers defined in code. I’d do the same with appropriate APIs or deterministic queries for non-Microsoft sources such as GitHub. That gives me control over what gets retrieved before an LLM ever sees it.
Then I’d hand that structured information to AI and say:
Now tell me what matters.
Something closer to:
Microsoft Graph / GitHub APIs → structured work log → AI synthesis → daily debrief → weekly 1:1 brief
rather than:
AI agent → search everywhere → decide what counts → retrieve it → validate it → summarize it
The experiment made me more confident in using AI for that last mile of synthesis. However, it made me less interested in using an LLM as the only thing standing between my source systems and my professional record.
Does that mean WorkIQ isn’t useful here?
No. In fact, I think WorkIQ makes this workflow much more accessible. The API-first version I’m describing assumes you’re willing and able to write code, authenticate against APIs, work with response schemas, maintain queries, and troubleshoot the resulting pipeline.
That’s a lot of overhead if your actual goal is simply: Help me remember what I did this week before I talk to my manager.
For someone who doesn’t have those programming skills, the WorkIQ + Copilot approach is a reasonable alternative. But I’d go into it expecting iteration.
My Week 4 results looked dramatically different from my Week 1 results because the skill became increasingly specific about time zones, source boundaries, meeting categories, empty states, fallback behavior, and what counted as verified information. The prompt wasn’t just a request anymore. It had gradually become something closer to a retrieval specification. And eventually, it worked!
So, can AI become a reliable record of my professional impact?
Sort of. After four weeks of refinement, my system could produce a manager-ready account of my work with 100% recall, accuracy, and relevance in the final week. That’s enough for me to say the hypothesis was supported.
But I wouldn’t call the AI itself my system of record. That’s the distinction I didn’t fully appreciate when I started the experiment. The records should come from the systems where the work actually happened: Outlook. OneNote. GitHub. AI is much better positioned one layer above them. Retrieve the facts deterministically when possible, then let AI make sense of them.
For my own workflow, that’s the architecture I’d trust enough to automate.