skills/integrations/google/google-calendar/SKILL.md
Read, create, and manage Google Calendar events. Load when user mentions 'google calendar', 'calendar', 'schedule', 'meeting', 'event', 'appointment', 'book time', 'check availability', 'find slots', 'free time', or references scheduling/calendar operations.
npx skillsauth add beam-ai-team/beam-next-skills google-calendarInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Automate Google Calendar operations including listing events, checking availability, creating meetings, and managing attendees. Particularly useful for sales teams scheduling calls, finding available slots to propose to clients, and managing recurring meetings.
Read, create, and manage Google Calendar events via OAuth authentication.
These rules are MANDATORY and must NEVER be bypassed:
These do NOT require confirmation:
uv run python skills/integrations/google/google-master/scripts/google_auth.py --check --service calendar
Exit codes:
python3 skills/integrations/google/google-master/scripts/google_auth.py --loginuv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py list --max 10
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py list --from "today" --to "tomorrow"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py list --from "2025-12-16" --to "2025-12-20"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py get <event_id>
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py calendars
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py search "sales call"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py freebusy --from "2025-12-16T09:00" --to "2025-12-16T17:00"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py find-slots --duration 30 --from "2025-12-16" --to "2025-12-20" --hours "9-17"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py create \
--summary "Sales Call with Acme Corp" \
--start "2025-12-16T14:00" \
--end "2025-12-16T14:30" \
--attendees "[email protected]" \
--reminder-popup 15
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py quick-add "Meeting with John tomorrow at 3pm"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py update <event_id> \
--start "2025-12-17T15:00" \
--end "2025-12-17T15:30"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py delete <event_id>
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py add-attendees <event_id> --attendees "[email protected]"
uv run python skills/integrations/google/google-calendar/scripts/calendar_operations.py remove-attendees <event_id> --attendees "[email protected]"
User: "What's on my calendar today?"
from calendar_operations import list_events
from datetime import datetime, timedelta
today = datetime.now().strftime("%Y-%m-%d")
tomorrow = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
events = list_events(time_min=today, time_max=tomorrow)
for event in events:
print(f"{event['summary']} - {event['start']}")
User: "Find 30-minute slots this week for a client call"
from calendar_operations import find_slots
slots = find_slots(
duration_minutes=30,
time_min="2025-12-16",
time_max="2025-12-20",
working_hours=(9, 17)
)
print("Available slots:")
for slot in slots[:5]:
print(f" {slot['start']} - {slot['end']}")
User: "Schedule a call with [email protected] tomorrow at 2pm"
from calendar_operations import create_event
event = create_event(
summary="Sales Call - Acme Corp",
start="2025-12-17T14:00",
end="2025-12-17T14:30",
attendees=["[email protected]"],
reminders={'popup': 15},
description="Discovery call to discuss needs"
)
print(f"Created: {event['htmlLink']}")
User: "Move the Acme call to Thursday at 3pm"
from calendar_operations import update_event
result = update_event(
event_id="abc123",
start="2025-12-19T15:00",
end="2025-12-19T15:30"
)
# Attendees are automatically notified
User: "Set up weekly calls with the client every Tuesday at 10am"
from calendar_operations import create_event
event = create_event(
summary="Weekly Check-in - Acme Corp",
start="2025-12-17T10:00",
end="2025-12-17T10:30",
attendees=["[email protected]"],
recurrence=["RRULE:FREQ=WEEKLY;BYDAY=TU;COUNT=12"],
reminders={'popup': 15}
)
User: "Am I free Thursday at 2pm?"
from calendar_operations import get_freebusy
result = get_freebusy(
time_min="2025-12-19T14:00",
time_max="2025-12-19T15:00"
)
if result['primary']['is_free']:
print("Yes, that time is available!")
else:
print("You have a conflict during that time")
| Operation | Function | Description |
|-----------|----------|-------------|
| List | list_events() | List upcoming events with filters |
| Get | get_event() | Get full event details |
| Calendars | list_calendars() | List all accessible calendars |
| Search | search_events() | Search events by keyword |
| FreeBusy | get_freebusy() | Check availability for time range |
| Find Slots | find_slots() | Find available meeting slots |
| Create | create_event() | Create new event |
| Quick Add | quick_add() | Create from natural language |
| Update | update_event() | Modify existing event |
| Delete | delete_event() | Delete event |
| Add Attendees | add_attendees() | Add people to event |
| Remove Attendees | remove_attendees() | Remove people from event |
Use RRULE format for recurring events:
| Pattern | RRULE |
|---------|-------|
| Daily | RRULE:FREQ=DAILY |
| Weekly | RRULE:FREQ=WEEKLY |
| Every Tuesday | RRULE:FREQ=WEEKLY;BYDAY=TU |
| Bi-weekly | RRULE:FREQ=WEEKLY;INTERVAL=2 |
| Monthly | RRULE:FREQ=MONTHLY |
| 10 occurrences | RRULE:FREQ=WEEKLY;COUNT=10 |
| Until date | RRULE:FREQ=WEEKLY;UNTIL=20251231T000000Z |
See ../google-master/references/error-handling.md for common errors and solutions.
| Error | Cause | Solution |
|-------|-------|----------|
| 401 Unauthorized | Token expired | Run google_auth.py --login |
| 403 Forbidden | No access to calendar | Check calendar sharing settings |
| 404 Not Found | Wrong event/calendar ID | Verify the ID is correct |
| "Access blocked" | User not in test users | Add to OAuth consent screen test users |
| Rate limit exceeded | Too many requests | Wait and retry |
import sys
sys.path.insert(0, "skills/integrations/google/google-calendar/scripts")
from calendar_operations import (
list_events,
get_event,
list_calendars,
search_events,
get_freebusy,
find_slots,
create_event,
quick_add,
update_event,
delete_event,
add_attendees,
remove_attendees
)
# List upcoming events
events = list_events(max_results=5)
# Find available 30-min slots
slots = find_slots(
duration_minutes=30,
time_min="2025-12-16",
time_max="2025-12-20"
)
# Create event with attendee
event = create_event(
summary="Sales Call",
start="2025-12-17T14:00",
end="2025-12-17T14:30",
attendees=["[email protected]"],
reminders={'popup': 15}
)
# Check availability
freebusy = get_freebusy(
time_min="2025-12-17T09:00",
time_max="2025-12-17T17:00"
)
By default, all operations use the primary calendar. To use a different calendar:
# List events from a specific calendar
uv run python calendar_operations.py list --calendar "[email protected]"
# Create event on specific calendar
uv run python calendar_operations.py create --calendar "[email protected]" --summary "Team Meeting" ...
To find available calendar IDs:
uv run python calendar_operations.py calendars
First-time setup: ../google-master/references/setup-guide.md
Quick start:
pip install google-auth google-auth-oauthlib google-api-python-client.env file at Beam Next root:
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_PROJECT_ID=your-project-id
python3 skills/integrations/google/google-master/scripts/google_auth.py --login02-memory/integrations/google-token.jsontools
Build a Palantir-shape, PDF-native use-case proposal document for a sophisticated enterprise account: research-grounded use cases (each with description, challenge, impact, value), an operating-graph ontology page, a recommended PoC with a week-by-week plan, and a closing page that asks for one decision. Load when a client asks us to 'propose high-impact use cases', requests a use-case presentation/catalog for a function (finance, HR, ops), or when a technical evaluation team will review candidates to pick a PoC. NOT for single-account cold outreach (use prospect-brief), full process diagnostics (use operating-diagnostic), or priced proposals (use proposal-creation).
development
Convert Beam Figma slide designs into high-fidelity, editable HTML presentation decks. Use when Codex is asked to audit Figma slides, extract slide templates, rebuild Beam slides as HTML decks, decide whether Figma imagery should be exported or rebuilt in HTML/CSS, create Beam/Prism-compatible deck templates, or improve fidelity of existing Beam HTML slide rebuilds.
development
Use the Beam AI reusable slide library: individual HTML slide templates extracted from Beam Figma rebuilds, kept separate from deck themes and full deck templates. Load when the user asks for a slide library, specific Beam slide patterns, reusable Figma-inspired slides, Prism slide-library items, or slide-level HTML templates.
development
Use Beam AI deck and report design packs, HTML templates, and curated examples to create sales decks, customer intro decks, RPO decks, and DIN A4 use-case proposal reports. Load when the user asks for Beam-branded presentation templates, Prism-compatible deck templates, Beam report templates, customer intro decks, commercial proposals, or reusable HTML deck/report examples.