Claude-skill-registry invites

View and manage calendar invitations - check pending invites, accept/decline meeting requests, create events

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/invites" ~/.claude/skills/majiayu000-claude-skill-registry-invites && rm -rf "$T"
manifest: skills/data/invites/SKILL.md
source content

Calendar Invitations & Events

Check pending calendar invitations, respond to meeting requests, and create new events.

Quick Status

~/.claude-mind/system/bin/calendar-invites list --text

Commands

List Pending Invitations

# Human-readable format
~/.claude-mind/system/bin/calendar-invites list --text

# JSON format (default)
~/.claude-mind/system/bin/calendar-invites list --json

# Custom date range
~/.claude-mind/system/bin/calendar-invites list --days 7

# Specific calendar
~/.claude-mind/system/bin/calendar-invites list --calendar "Work"

Show Event Details

~/.claude-mind/system/bin/calendar-invites show "EVENT_ID"

Respond to Invitations

# Accept an invitation (via AppleScript)
~/.claude-mind/system/bin/calendar-invites accept "EVENT_ID"

# Decline an invitation
~/.claude-mind/system/bin/calendar-invites decline "EVENT_ID"

# Mark as tentative/maybe
~/.claude-mind/system/bin/calendar-invites maybe "EVENT_ID"

# Accept all pending invitations (via AppleScript)
~/.claude-mind/system/bin/calendar-invites accept-all

# Accept all via UI automation (more reliable)
~/.claude-mind/system/bin/calendar-invites accept-all-ui

Sync/Refresh Calendars

# Force calendar sync with server
~/.claude-mind/system/bin/calendar-invites sync

Create Events

# Basic event (1 hour duration)
~/.claude-mind/system/bin/calendar-invites create --title "Team Meeting" --start "2026-01-20T14:00"

# Event with duration
~/.claude-mind/system/bin/calendar-invites create --title "Lunch" --start "2026-01-20 12:00" --duration 90

# Event with specific end time
~/.claude-mind/system/bin/calendar-invites create --title "Workshop" --start "2026-01-20 09:00" --end "2026-01-20 12:00"

# All-day event
~/.claude-mind/system/bin/calendar-invites create --title "Vacation" --start "2026-01-25" --all-day

# Multi-day all-day event
~/.claude-mind/system/bin/calendar-invites create --title "Conference" --start "2026-01-25" --end "2026-01-27" --all-day

# Event with location and notes
~/.claude-mind/system/bin/calendar-invites create --title "Client Call" --start "2026-01-20 15:00" \
    --location "Zoom" --notes "Discuss Q1 planning" --calendar "Work"

Create Options:

  • --title
    - Event title (required)
  • --start
    - Start date/time (required). Formats: ISO8601, "2026-01-20 14:00", "2026-01-20"
  • --end
    - End date/time (optional)
  • --duration
    - Duration in minutes (default: 60)
  • --calendar
    - Calendar name (default: system default)
  • --location
    - Event location
  • --notes
    - Event notes/description
  • --url
    - Event URL
  • --all-day
    - Create an all-day event

List Available Calendars

~/.claude-mind/system/bin/calendar-invites calendars

Open in Calendar.app

~/.claude-mind/system/bin/calendar-invites open "EVENT_ID"

JSON Output Format

The

list --json
command returns:

{
  "invitations": [
    {
      "event_id": "ABC123-DEF456",
      "title": "Weekly Sync",
      "start": "2026-01-20T09:00:00-05:00",
      "end": "2026-01-20T10:00:00-05:00",
      "calendar": "Work",
      "organizer": {
        "name": "Jane Smith",
        "email": "jane@example.com"
      },
      "my_status": "pending",
      "location": "Zoom",
      "attendees": [...]
    }
  ],
  "count": 1
}

Workflow

  1. Check invitations: Run
    list --text
    to see what's pending
  2. Review if needed: Use
    show
    for full details on specific events
  3. Respond: Use
    accept
    ,
    decline
    , or
    maybe
  4. Bulk accept: Use
    accept-all
    for routine meetings

Limitations

  • EventKit is read-only for responses: Apple's EventKit API does not allow setting
    participantStatus
  • AppleScript limitations: Direct property setting sometimes doesn't trigger server-side updates
  • UI automation is most reliable: The
    accept-all-ui
    command clicks actual buttons in Calendar.app
  • Sync delays: Calendar providers (Exchange, Google, iCloud) may have sync delays
  • Recurring events: Response may only affect the next occurrence

Response Methods (Fallback Chain)

  1. CalDAV (primary) - Proper iTIP protocol, notifies organizers, server-side
  2. AppleScript (fallback) - Local property change, may not sync
  3. UI automation (
    accept-all-ui
    ) - Clicks buttons in Calendar.app
  4. Manual - Calendar.app opens for you to respond

Direct CalDAV Commands

# List pending invitations via CalDAV inbox
~/.claude-mind/system/bin/calendar-caldav inbox

# Accept via CalDAV (proper protocol)
~/.claude-mind/system/bin/calendar-caldav accept "EVENT_UID"

# Accept all pending via CalDAV
~/.claude-mind/system/bin/calendar-caldav accept-all

# Decline via CalDAV
~/.claude-mind/system/bin/calendar-caldav decline "EVENT_UID"

Troubleshooting

If authorization fails:

  1. Check System Settings > Privacy & Security > Calendars
  2. Ensure Terminal has calendar access

If invitations don't appear:

  1. Run
    calendar-invites sync
    to force refresh
  2. Check that calendar is syncing in Calendar.app preferences

If responses don't work:

  1. Check CalDAV credentials:
    ~/.claude-mind/system/bin/calendar-caldav test
  2. Try
    accept-all-ui
    instead of
    accept-all
    (uses UI automation)
  3. The script falls back to opening Calendar.app

CalDAV setup:

  • Credentials stored in
    ~/.claude-mind/config/caldav-credentials.json
  • Requires app-specific password from appleid.apple.com