1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#+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="<now-iso8601>" timeMax="<now+36h-iso8601>" singleEvents=true orderBy="startTime"
#+end_src
The event objects carry =created=, =updated=, and the attendee =responseStatus=. The engine supplies =<anchor-iso8601>= 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: <invites needing a response, reschedules, imminent events>
- Upcoming: <today/tomorrow events, terse>
#+end_example
Omit the block if nothing upcoming and nothing changed.
** Actions
- respond :: =mcp__google-calendar__respond-to-event= account="personal" eventId=<event-id> responseStatus=<accepted|declined|tentative>
Read-only otherwise — triage surfaces calendar state; it doesn't create or move events (that's the add/edit-calendar-event workflows).
|