Integrations
SkillMediaThis 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.
No other account needed.
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
- User clicks "Connect" →
connect-calendarreturnsauthUrl+state - Redirect to provider → consent → provider redirects to our callback
- Server exchanges code → writes
scheduling_credentialsrow + coreoauth_tokensentry - We fetch calendar list, let user pick "checked" + "destination"
- Token expires → refresh flow runs silently; on failure, set
invalid: trueand show re-connect banner
Busy-time aggregation
aggregateBusy({userEmail, rangeStart, rangeEnd}) merges:
- Confirmed bookings hosted by the user
- External busy from each
selected_calendarsentry 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
| User | Action |
|---|---|
| "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