Agent skill
Team Scheduler
Use this skill when the user says "schedule a meeting", "find a time", "coordinate availability", "schedule", "plan a session", or needs to organize a team event/meeting/session through Slack. An AI-powered scheduling assistant that messages team members, collects availability, finds optimal times, and posts confirmations.
Install this agent skill to your Project
npx add-skill https://github.com/ChinchillaEnterprises/ChillSkills/tree/main/scheduler
SKILL.md
Chinchilla AI Team Scheduler v2.0
An AI-powered scheduling assistant that coordinates team availability through Slack + Google Calendar. Built by Chinchilla AI — no $50/month SaaS needed.
What Changed in v2.0
- Google Calendar integration (read busy/free, create events)
- Automatic timezone conversion per team member
- Calendar event creation with Google Meet links
- Email invites sent to all attendees
- Cron job support for automated scanning
- Privacy-first: only shows free/busy, NEVER discloses event details
How It Works
- Scan — Check Slack for scheduling requests (keywords: "schedule", "meeting", "find a time")
- Check Calendars — Read each team member's Google Calendar for busy/free times
- Cross-Reference — Find overlapping free slots across all required attendees
- DM Team — Send each person time options in THEIR timezone
- Collect Votes — Team reacts or replies with their preferred time
- Create Event — Add to Google Calendar with all attendees + Google Meet link
- Confirm — Post final confirmation to the channel
Cron Job Setup (Phase 1 — CLI)
Session-only, expires after 3 days. For testing and development.
CronCreate:
cron: "7 9-18 * * 1-5" # Every hour :07, 9am-6pm Mon-Fri
recurring: true
prompt: [scheduler scan prompt - see below]
Phase 2 (Permanent): Move to Claude Desktop / CoWork for persistent operation. Phase 3: GitHub Actions for fully autonomous scheduling.
Cron Scan Prompt
You are the Chinchilla Scheduler Bot. Check Slack for any pending scheduling requests
(messages containing "schedule", "meeting", "find a time", or replies to your DMs).
When a scheduling request is found:
1. Check Google Calendar for team availability
2. DM each required attendee to confirm availability (only show free/busy, NEVER disclose event details)
3. Find the best overlapping time slot
4. Post the confirmed time back to the requesting channel
5. Create the calendar event if confirmed
If no pending requests, silently do nothing (no output needed).
Team Roster
| Name | Slack ID | Calendar Email | Timezone |
|---|---|---|---|
| Abel | U072PCVTS00 | abel@chinchilla-ai.com | America/Chicago (CT) |
| Jamie | U09FEC6A9UZ | jamie@chinchilla-ai.com | America/New_York (ET) |
| Hailee | U094DK4G1UG | hailee@chinchilla-ai.com | America/Los_Angeles (PT) |
| Soroush | U07HM3QV7N1 | TBD | America/New_York (ET) |
IMPORTANT: Jamie's Slack ID is U09FEC6A9UZ (NOT U091MH3R6U9 — that's the Claude bot).
Key Channels
| Channel | ID |
|---|---|
| #general | C072D98C41X |
| #internal-beoniq | C09JD94HRUN |
Step-by-Step Execution
Step 1: Gather Details
Ask the user (if not provided):
- What: Event name/description
- Who: List of participants (use team roster above)
- Duration: How long (default: 1 hour)
- Window: Date range to consider (e.g., "this afternoon", "tomorrow", "this week")
- Channel: Where to post (default: #general)
Step 2: Check Google Calendar
IMPORTANT: Use gcal_find_meeting_times to check ALL attendees at once (preferred), or gcal_find_my_free_time per person. Do NOT use gcal_list_events — it fails for calendars shared as "free/busy only" (which is the recommended privacy setting).
Option A — Find meeting times for everyone at once (preferred):
mcp__claude_ai_Google_Calendar__gcal_find_meeting_times(
attendees=["abel@chinchilla-ai.com", "jamie@chinchilla-ai.com", "hailee@chinchilla-ai.com"],
duration=60,
timeMin="[start_of_window]",
timeMax="[end_of_window]",
timeZone="America/Chicago"
)
Option B — Check one person's free time:
mcp__claude_ai_Google_Calendar__gcal_find_my_free_time(
calendarIds=["[calendar_email]"],
timeMin="[start_of_window]",
timeMax="[end_of_window]",
timeZone="[participant_timezone]"
)
Rank results by: most participants available > earliest > afternoon preference
Privacy Rule: Only use free/busy data. NEVER use gcal_list_events to read event details. The bot should only know WHEN someone is busy, not WHY.
Step 3: Post Options to Channel
Send time options with timezone conversion for each person:
:calendar: *Scheduler Bot — Meeting Options*
The bot checked everyone's calendars and found these free slots:
:one: *1:00 - 2:00 PM CT* (2:00 PM ET / 11:00 AM PT)
:two: *2:30 - 3:30 PM CT* (3:30 PM ET / 12:30 PM PT)
@Abel @Jamie @Hailee — React with your preferred time!
Step 4: DM Each Participant
Send a DM to each person with times in THEIR timezone:
:calendar: *Chinchilla Scheduler Bot*
Hey [Name]! [Organizer] is requesting a *[Event Name]*.
Based on calendar availability, would any of these times work?
:one: [Time in THEIR timezone]
:two: [Time in THEIR timezone]
React or reply with your preferred time!
Step 5: Collect Votes
Read the thread or DMs for responses:
mcp__slack__slack_read_thread(channel_id="C072D98C41X", message_ts="[original_ts]")
Parse responses and find the winning time.
Step 6: Create Calendar Event
Once a time is confirmed:
mcp__claude_ai_Google_Calendar__gcal_create_event(
event={
summary: "[Event Name]",
description: "Scheduled by Chinchilla Scheduler Bot via Slack vote.",
start: { dateTime: "[RFC3339]", timeZone: "[organizer_tz]" },
end: { dateTime: "[RFC3339]", timeZone: "[organizer_tz]" },
attendees: [
{ email: "chinchillaai.admin@gmail.com", organizer: true },
{ email: "abel@chinchilla-ai.com", displayName: "Abel" },
{ email: "jamie@chinchilla-ai.com", displayName: "Jamie" },
{ email: "hailee@chinchilla-ai.com", displayName: "Hailee" }
],
conferenceData: {
createRequest: {
conferenceSolutionKey: { type: "hangoutsMeet" },
requestId: "scheduler-[unique-id]"
}
}
},
sendUpdates: "all"
)
CRITICAL:
- Always include ALL attendees (including the requester)
- Always set
sendUpdates: "all"so everyone gets email invites - Always include
chinchillaai.admin@gmail.comas organizer - Always add Google Meet link via conferenceData
Step 7: Post Confirmation
:white_check_mark: *Meeting Confirmed!*
*[Event Name]*
:calendar: [Day, Date]
:clock1: [Time CT] / [Time ET] / [Time PT]
:busts_in_silhouette: [Attendee list]
:link: Google Meet link included in calendar invite
Calendar invites sent to everyone's email!
_Chinchilla Scheduler Bot_
Lessons Learned (from testing Mar 18-20, 2026)
- Always include all attendees — missing someone means no calendar invite for them
- Use
sendUpdates: "all"—"none"means no email invites - Use calendar emails, not Slack IDs for event creation
- Privacy works — events show as "Untitled Event" when shared as free/busy only
- Cron job offset — use :07 instead of :00 to avoid API congestion
- CLI cron is session-only — dies when terminal closes, expires after 3 days
- Abel's calendar is abel@chinchilla-ai.com (not personal gmail)
- Team must share calendars with chinchillaai.admin@gmail.com (free/busy only)
- Use
gcal_find_meeting_timesorgcal_find_my_free_time— NOTgcal_list_events—list_eventsfails on calendars shared as "free/busy only" (returns "fetch failed"). The free/busy tools work with any sharing permission level. This was discovered Mar 20 when Abel's calendar stopped working withlist_eventsbut worked fine withfind_my_free_time.
Calendar Sharing Instructions (for new team members)
- Go to calendar.google.com
- Left side > "My calendars" > hover calendar name > three dots (⋮)
- "Settings and sharing"
- Scroll to "Share with specific people or groups"
- Click "+ Add people and groups"
- Type: chinchillaai.admin@gmail.com
- Set permission: "See only free/busy (hide details)"
- Click "Send"
Best Practices
- Always tag participants with @mention in channel posts
- Send DMs in parallel (all at once)
- Give people at least a few hours to respond before nudging
- Convert times to each person's timezone
- If someone can't make ANY time, report immediately
- Keep all messages concise and friendly
- Use emoji to make messages scannable
- Bot sees free/busy ONLY — never disclose event details
- Always DM to confirm before creating the event
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
Red Team
Use this skill when the user says "red team", "stress test", "attack this", "critique this", "run the models against this", "test this plan", "refine this with AI", or wants to use external AI models to critique, validate, or improve a document, pitch, plan, or idea. Also use when the user wants to save Claude Code usage by offloading analysis to other models.
Upwork Scanner
This skill should be used when the user asks to "scan upwork", "find upwork jobs", "check upwork", "run the scanner", "look for jobs", or mentions finding freelance projects for Chinchilla AI.
Polymarket Arb Scanner
This skill should be used when the user asks to "scan polymarket", "find arb opportunities", "check polymarket arbs", "run arb scanner", "polymarket arbitrage", or mentions detecting price inefficiencies on Polymarket.
captain-update
Polymarket Copy Trader
This skill should be used when the user asks to "copy trade", "telegram bot polymarket", "follow traders", "copy polymarket", or mentions building a copy trading bot for Polymarket.
Architecture Diagram
This skill should be used when the user asks to "generate a diagram", "create an architecture diagram", "make a diagram", "draw a system diagram", or needs a branded Chinchilla AI technical diagram for proposals or documentation.
Didn't find tool you were looking for?