Calendar intelligence: are we spending time on the right things? #294
chrizbo
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
The problem
Calendars are one of the most honest signals a team produces. Every week, thousands of words of strategic intent get documented in strategy docs and decision records, and then the week fills up with meetings that have no visible connection to any of it. Nobody planned for that gap. It just happens.
The research on this is specific: meeting dispersion (how spread across the day your meetings are) predicts productivity loss more reliably than total meeting time (Kreamer & Rogelberg 2024). A contributor with three 30-minute meetings clustered in the morning has a fundamentally different day than one with the same meetings scattered across 8 hours, even though the total time is identical. And only 26% of employees report knowing how their daily work connects to company goals (Microsoft 2024). That gap is almost never visible anywhere in the tools a team uses.
Two specific problems motivated this:
Nobody is watching time allocation against strategy. If a stated priority shows zero calendar coverage for three weeks running, that is a signal worth surfacing. Not to blame anyone, but to prompt a conversation about whether the strategy is drifting or the work is just happening async.
Meeting prep does not reach people where they need it. Standup discussions, decision records, open PRs — all of this is relevant context before a meeting, and none of it reliably appears in the place people look 90 seconds before joining a call: the calendar event itself.
What we built
Three workflows.
Calendar Load Report
Runs Friday alongside the weekly status workflow. Reads team calendar data, computes per-contributor fragmentation scores and deep work block availability, and posts a GitHub Discussion summarizing the week.
The fragmentation score is:
(last_meeting_end_hour - first_meeting_start_hour) / total_meeting_hours. A score above 3.0 means meetings are scattered across the day rather than clustered, which is the pattern that actually damages focus regardless of how many meetings there are or how long they run. A deep work block is any uninterrupted gap of 90 minutes or more during working hours.The report flags contributors with zero 90-minute blocks on any day that week, names specific days where fragmentation was high, and always includes the healthiest schedule so the report models what is possible rather than just cataloging problems.
Example output — week of 2026-06-09
Calendar Strategy Audit
Runs Wednesday alongside the strategy alignment workflow. Reads the same calendar data and classifies each meeting against the strategic tradeoffs in
docs/strategy.md, the "X, even over Y" statements that define where the team says it is putting its energy.For each stated priority, the audit answers: did any calendar time go here this week? If not, did async GitHub activity (PRs, issues, decision records) advance this priority instead? A priority with zero meeting time and no async signal is a conversation starter. A priority with zero meetings but active GitHub work is just healthy async, and the audit distinguishes those explicitly.
The output is a coverage heatmap table with green/yellow/red signals and 2-3 specific, non-judgmental conversation starters based on what the data shows.
Example output — week of 2026-06-09
Meeting Brief Enrichment in Standup Prep
The standup prep workflow already posts a daily discussion with blockers, decisions, and facilitation prompts. We added a step that reads today's calendar events and generates a brief for each meeting with team members as attendees.
The briefs use one of two modes depending on what signal is available:
Mode A — when the event has a title, description, and agenda: summarizes the stated goal, surfaces relevant decision records, links open GitHub issues assigned to attendees.
Mode B — when the event is sparse (title only, or title plus attendees): the workflow infers purpose. It classifies the meeting type from the title pattern (1:1, standup, planning, review, retro, demo), maps attendees to GitHub handles using the team member map, finds issues and PRs they have been active on in the past 7 days, and checks for prior decision records from recurring meetings with the same participants. The brief is framed explicitly as an inference: "Based on what is active for these attendees this week, this meeting may be about: [topic]."
Even a wrong inference is useful. It prompts the attendee to state the actual goal before joining, which is the prep behavior we wanted in the first place.
The briefs are written back to Google Calendar event descriptions via a marker-safe append pattern, so they appear natively in the Google Meet sidebar during the call. Organizer-written content above the
<!-- meeting-brief-start -->marker is never touched.The calendar safe output
Calendar writes follow the same pattern as the Slack integration: a custom safe output job that sits between the agent and the Google Calendar API.
The agent proposes a
calendar_update_event_briefoperation with the event ID, brief content, and a required GitHub source URL for the audit trail. The safe output job validates all inputs, enforces aCALENDAR_WRITE_ENABLEDgate that defaults to false, exchanges the OAuth refresh token for a short-lived access token, and PATCHes the event description only after all validation passes. If credentials are missing when writes are enabled, it opens a configuration issue automatically rather than failing silently.The agent never touches the Google Calendar API directly. It proposes and the validated job executes.
We built and tested all three workflows against synthetic calendar fixtures before connecting any real credentials, so the classification logic, fragmentation scores, and brief generation could all be verified without exposing personal calendar data.
What this reveals about calendar data as a signal
The most interesting finding while building this: calendar data is already structured enough to classify against strategy, and almost nobody does it.
Most teams have a strategy doc. Most teams have a calendar. The connection between them is invisible and lives in people's heads if it lives anywhere. The strategy audit makes that connection legible every week, without requiring anyone to fill in a spreadsheet or attend a review meeting to discuss meeting patterns.
The fragmentation score is a similar insight. The research exists. The formula is simple. But no calendar tool surfaces it. They show total meeting time, which is the less predictive variable. Computing fragmentation per contributor per day takes about 20 lines of jq and a bash loop.
The gap between what calendar data could tell you and what anyone actually extracts from it is large. These workflows are a first pass at closing it.
What is next
The natural next steps:
Trigger
calendar-load-report.lock.ymlorcalendar-strategy-audit.lock.ymlviaworkflow_dispatchto try it now. No credentials needed to see a full report.All reactions