#+TITLE: Triage Intake — Personal Calendar Source #+AUTHOR: Craig Jennings & Claude #+DATE: 2026-05-26 # Source plugin for the triage-intake engine. See triage-intake.org for the # contract and the Phase A-D orchestration. This file declares ONE source. * Source: personal-calendar :PROPERTIES: :ORDER: 30 :ENABLED: mcp google-calendar present :ANCHOR: iso8601 :SUBAGENT_OVER: 40 :END: ** Scan Calendar isn't an unread queue — it's two signals: what's *coming up soon* and what *changed since last check*. Pull the near-horizon window for the personal account, then let Classify split it by the anchor. #+begin_src text mcp__google-calendar__list-events account="personal" timeMin="" timeMax="" singleEvents=true orderBy="startTime" #+end_src The event objects carry =created=, =updated=, and the attendee =responseStatus=. The engine supplies == so Classify can flag events whose =updated= is after the anchor as "new/changed since last check." (=list-events= filters by start-time window, not by updated-since, so the change detection happens in Classify, not the query.) ** Classify Calendar leans *FYI* — most upcoming events are just awareness. The Action cases are narrow: - *Action:* - A new invite with =responseStatus=needsAction= (Craig hasn't replied). - A reschedule or cancellation of an event Craig had — =updated= after the anchor and the time/status changed. - An event starting within ~2h that Craig might have lost track of. - *FYI:* upcoming events today/tomorrow, unchanged since last check. - *Noise-keep / trash:* declined events, all-day informational banners, automated holiday entries — tally only, no action. Surface "changed since last check" prominently — a reschedule that slips by is the expensive miss. ** Render #+begin_example **Calendar (personal) — N upcoming, M changed since last check.** - Action: - Upcoming: #+end_example Omit the block if nothing upcoming and nothing changed. ** Actions - respond :: =mcp__google-calendar__respond-to-event= account="personal" eventId= responseStatus= Read-only otherwise — triage surfaces calendar state; it doesn't create or move events (that's the add/edit-calendar-event workflows).