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.

Stars 2
Forks 0

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

  1. Scan — Check Slack for scheduling requests (keywords: "schedule", "meeting", "find a time")
  2. Check Calendars — Read each team member's Google Calendar for busy/free times
  3. Cross-Reference — Find overlapping free slots across all required attendees
  4. DM Team — Send each person time options in THEIR timezone
  5. Collect Votes — Team reacts or replies with their preferred time
  6. Create Event — Add to Google Calendar with all attendees + Google Meet link
  7. 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.com as 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)

  1. Always include all attendees — missing someone means no calendar invite for them
  2. Use sendUpdates: "all""none" means no email invites
  3. Use calendar emails, not Slack IDs for event creation
  4. Privacy works — events show as "Untitled Event" when shared as free/busy only
  5. Cron job offset — use :07 instead of :00 to avoid API congestion
  6. CLI cron is session-only — dies when terminal closes, expires after 3 days
  7. Abel's calendar is abel@chinchilla-ai.com (not personal gmail)
  8. Team must share calendars with chinchillaai.admin@gmail.com (free/busy only)
  9. Use gcal_find_meeting_times or gcal_find_my_free_time — NOT gcal_list_eventslist_events fails 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 with list_events but worked fine with find_my_free_time.

Calendar Sharing Instructions (for new team members)

  1. Go to calendar.google.com
  2. Left side > "My calendars" > hover calendar name > three dots (⋮)
  3. "Settings and sharing"
  4. Scroll to "Share with specific people or groups"
  5. Click "+ Add people and groups"
  6. Type: chinchillaai.admin@gmail.com
  7. Set permission: "See only free/busy (hide details)"
  8. Click "Send"

Best Practices

  1. Always tag participants with @mention in channel posts
  2. Send DMs in parallel (all at once)
  3. Give people at least a few hours to respond before nudging
  4. Convert times to each person's timezone
  5. If someone can't make ANY time, report immediately
  6. Keep all messages concise and friendly
  7. Use emoji to make messages scannable
  8. Bot sees free/busy ONLY — never disclose event details
  9. Always DM to confirm before creating the event

Expand your agent's capabilities with these related and highly-rated skills.

ChinchillaEnterprises/ChillSkills

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.

2 0
Explore
ChinchillaEnterprises/ChillSkills

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.

2 0
Explore
ChinchillaEnterprises/ChillSkills

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.

2 0
Explore
ChinchillaEnterprises/ChillSkills

captain-update

2 0
Explore
ChinchillaEnterprises/ChillSkills

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.

2 0
Explore
ChinchillaEnterprises/ChillSkills

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.

2 0
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results