Use case

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

calendar-agent.ts
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 });

Apps this agent connects to

Back to all use cases