From calendar-skills
Schedule Zoom meetings via the Zoom API (Server-to-Server OAuth) or reuse an existing Zoom join URL, then email calendar invites (.ics) via AgentMail with a standardized “Zoom Meeting Invitation” body (topic, participants, date/time, join link, meeting ID, passcode, disclaimer). Use when an agent needs to create/send Zoom calendar invites, CC participants, or automate meeting scheduling + invite delivery.
How this skill is triggered — by the user, by Claude, or both
Slash command
/calendar-skills:ai-schedulerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use the bundled script to (a) create a Zoom meeting via API, and/or (b) send an AgentMail email with an `.ics` invite attachment and the standard invitation body.
Use the bundled script to (a) create a Zoom meeting via API, and/or (b) send an AgentMail email with an .ics invite attachment and the standard invitation body.
--yes).--to recipient, use <PREFIX> <TO_NAME>: <TOPIC> (prefer the display name if provided). <PREFIX> must be provided via env AGENTMAIL_SUBJECT_PREFIX (loaded from .env.scheduler) or --subject-prefix. The script compacts <TOPIC> to at most 5 words.--no-subject-prefix (subject becomes <TO_NAME>: <TOPIC> for a single recipient, else <TOPIC>).<TO_NAME>:), pass --subject-topic-only (works with or without a subject prefix).2026-03-15 19:00, America/New_York)--to and optional --cc, comma-separated). You can use either:
--to "[email protected]"--to "Ry <[email protected]>"Ryan Z. Nie)AGENTMAIL_HOST, otherwise defaults to AGENTMAIL_INBOX_ID)ZOOM_ACCOUNT_IDZOOM_CLIENT_IDZOOM_CLIENT_SECRETAGENTMAIL_API_KEYAGENTMAIL_INBOX_ID (required; used as the From/host email)Preferred: set env vars in the environment running the script.
Optional: put env vars in .env.scheduler (default), or pass a custom path via --env-file. The script reads the env file and only fills missing env vars. Treat the values below as placeholders and keep the real values in .env.scheduler.
ZOOM_ACCOUNT_ID=...
ZOOM_CLIENT_ID=...
ZOOM_CLIENT_SECRET=...
AGENTMAIL_API_KEY=...
[email protected]
AGENTMAIL_INBOX_DISPLAY_NAME=Ryan Nie's AI Agent
AGENTMAIL_HOST_NAME=Ryan Nie's AI Agent
[email protected]
AGENTMAIL_SUBJECT_PREFIX=Ryan +
Create a meeting via Zoom API, then email an invite. Run from this skill directory:
. .venv_agentmail/bin/activate
.venv_agentmail/bin/python scripts/schedule_zoom_and_send_invite.py \
--topic "AgentMail" \
--chat-topic "<Topic>" \
--to "[email protected]" \
--cc "[email protected]" \
--start "2026-03-15 19:00" \
--tz "America/New_York" \
--duration 30
Reuse an existing Zoom meeting (skip Zoom API) and just send the invite email. Run from this skill directory:
. .venv_agentmail/bin/activate
.venv_agentmail/bin/python scripts/schedule_zoom_and_send_invite.py \
--topic "AgentMail" \
--chat-topic "<Topic>" \
--to "[email protected]" \
--cc "[email protected]" \
--start "2026-03-15 19:00" \
--tz "America/New_York" \
--duration 30 \
--existing-join-url "<zoom join url>" \
--existing-meeting-id <zoom meeting id> \
--existing-passcode "<passcode>"
The invite email body must not be hardcoded. The script renders the email body by reading references/body-template.md and filling placeholders with your inputs (topic, host, participants, when, join URL, meeting ID, passcode, disclaimer).
references/body-template.md for the exact text template.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub ryanznie/skills --plugin calendar-skills