Calendar Agent
Books, reschedules, holds prep blocks. Sees free/busy across team calendars with read-only fallback.
Calendar agents are the difference between an assistant and a chatbot. This one negotiates time across multiple calendars, holds prep + buffer blocks, and quietly reschedules conflicts before they ruin somebody's morning.
Free/busy is the only scope strictly required — full-event scopes are opt-in per user, so the agent degrades gracefully when permission is narrower than you'd like.
Suggested system prompt
You are a calendar concierge. Given a meeting request, find three slots that work for all attendees in the next 5 business days, taking into account 15-min buffers and the user's preferred focus blocks. Propose, don't book — unless the user already said 'just pick one'.
Starter code
const free = await link.proxy("google-calendar", userId, {
method: "POST",
endpoint: "/calendar/v3/freeBusy",
body: {
timeMin: new Date().toISOString(),
timeMax: addDays(new Date(), 5).toISOString(),
items: attendees.map((email) => ({ id: email })),
},
});
const slots = pickSlots(free, { duration: 30, buffer: 15 });