Integrations

SkillMedia

This skill gives your AI access to calendar and video services so it can handle scheduling and meetings. Once added, it can work with Google Calendar, Office 365, Zoom, Google Meet, Teams, or built-in video.

Available today. Use it from your connected AI after setup.

After adding the skill, connect the calendar and video services you use, such as Google Calendar or Zoom. Then ask your AI to schedule or manage meetings.

Then ask your AI: use the Integrations skill

What your AI can do with it

  • Schedule meetings using Google Calendar or Office 365
  • Set up video meetings with Zoom, Google Meet, Teams, or built-in video
  • Manage scheduling and meeting tasks across your connected services
  • Add new calendar or video providers with the included guidance

What this skill tells your AI

The instructions your AI receives, as published by builderio/agent-native in packages/scheduling/docs/skills/integrations/SKILL.md and read by ahel’s review.

Calendar providers

  • google_calendar — OAuth; read freeBusy + write events; optionally create Google Meet conference via includeConference=true.
  • office365_calendar — Microsoft Graph; read freeBusy + write events.
  • caldav (planned) — generic CalDAV for Apple iCloud, Fastmail, etc.

Video providers

  • builtin_video — Daily.co-backed; zero OAuth; server-to-server API key.
  • zoom_video — OAuth; create meetings via Zoom REST API.
  • google_meet — piggy-backs on Google Calendar credential.
  • teams_video — delegated Microsoft OAuth for work or school accounts; creates and cancels standalone meetings through Microsoft Graph.

Credential lifecycle

  1. User clicks "Connect" → connect-calendar returns authUrl + state
  2. Redirect to provider → consent → provider redirects to our callback
  3. Server exchanges code → writes scheduling_credentials row + core oauth_tokens entry
  4. We fetch calendar list, let user pick "checked" + "destination"
  5. Token expires → refresh flow runs silently; on failure, set invalid: true and show re-connect banner

Busy-time aggregation

aggregateBusy({userEmail, rangeStart, rangeEnd}) merges:

  • Confirmed bookings hosted by the user
  • External busy from each selected_calendars entry via the provider

Cached in calendar_cache (short TTL, default 5 min). Busted on any booking write for that host.

Writing a new provider

See docs/providers.md for the full interface.

Common tasks

UserAction
"Connect Google Calendar"connect-calendar --kind google_calendar --redirectUri ... → redirect to returned authUrl
"Stop checking my vacation calendar"toggle-selected-calendar --include false for that externalId
"Default to Zoom for new bookings"set-default-conferencing-app --credentialId <zoom-cred>
"Connect Microsoft Teams"connect-video --kind teams_video --redirectUri ... → complete the callback with completeVideoOAuth()
"Default to Teams for new bookings"set-default-conferencing-app --credentialId <teams-cred>
"Refresh calendar cache"refresh-busy-times

Microsoft Teams setup

Register createTeamsProvider() as a video provider with the deployment's Microsoft client id and secret plus consumer-owned getAccessToken, updateTokens, and markInvalid callbacks. The provider defaults to the organizations tenant because Graph's delegated online-meeting API supports work or school accounts, not personal Microsoft accounts. It requests only offline_access, OnlineMeetings.ReadWrite, and User.Read.

Use connect-video to start OAuth and completeVideoOAuth() in the callback; inserting a teams_video row with install-conferencing-app alone does not grant Microsoft access. Token refresh remains the consumer's responsibility in getAccessToken. The booking service stores the returned meeting id and join URL in booking_references and calls the provider again on cancellation.

Signals

GitHub stars
5k
Forks
440
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
integrations-builderio
Source
github.com/builderio/agent-native