🔒 Protected via Cloudflare Access

calendar.api.ready — Seed Plan

Concept

Root capability gate: "Can this agent access a calendar?" Provider-agnostic where possible, but must encode real expert knowledge about the three major calendar ecosystems.

The Three Ecosystems

1. Google Calendar API (REST)

2. Microsoft Graph (REST)

3. CalDAV (Protocol)

Minimal Verification Strategy

The seed should instruct: list calendars, not events.

Listing calendars is:

This differs from "list next event" — which requires knowing which calendar to query and involves time-range logic. Too much for a capability gate.

How It Differs From gmail.api.ready

Dimension gmail.api.ready calendar.api.ready
Providers Google-only Google, Microsoft, CalDAV (provider-agnostic)
Auth patterns OAuth2 with Gmail scopes OAuth2 (Google/MSFT) or HTTP Basic (CalDAV)
Verification users.getProfile List calendars (provider-appropriate)
Identity signal Email address Calendar list + default calendar
Scope taxonomy Simple (readonly → modify → compose) Granular (events.readonly vs calendar.readonly vs full)
Discovery None (single endpoint) Required for CalDAV (well-known URI, SRV records)
Failure modes Token/scope/API-not-enabled All of gmail's + CalDAV discovery + missing Exchange mailbox

Key structural difference: gmail.api.ready is single-provider. calendar.api.ready must be multi-provider OR we split into three seeds.

Design Decision Needed

Option A: Single provider-agnostic root

Option B: Three provider-specific roots

Option C: One root + three children

Recommendation: Option A — single root. The prompt can be structured as: identify your provider → follow the appropriate verification path → report results in a standard format. This mirrors how gmail.api.ready works (single, complete, self-contained) and keeps the graph clean. The 2048 char limit accommodates it.

Contract (Draft)

"a calendar api connectivity report exists listing accessible calendars with their identifiers and access levels, or a specific failure diagnosis identifying the provider and auth mechanism"

Suggested Slug

calendar.api.ready — mirrors gmail.api.ready, three independent axes (calendar = domain, api = interface, ready = state)

Open Questions

  1. Should the seed instruct caching calendar IDs for downstream use (like gmail caches the email)?
  2. Should it explicitly name CLI tools (gcalcli, caldav-cli) or stay tool-agnostic?
  3. Does the prompt need to handle the case where the agent has access to multiple calendar providers simultaneously?