{"skill":{"slug":"accli","displayName":"Apple Calendar CLI","summary":"This skill should be used when interacting with Apple Calendar on macOS. Use it for listing calendars, viewing events, creating/updating/deleting calendar events, and checking availability/free-busy times. Triggers on requests like \"check my calendar\", \"schedule a meeting\", \"what's on my schedule\", \"am I free tomorrow\", or any calendar-related operations.","description":"---\nname: accli\ndescription: This skill should be used when interacting with Apple Calendar on macOS. Use it for listing calendars, viewing events, creating/updating/deleting calendar events, and checking availability/free-busy times. Triggers on requests like \"check my calendar\", \"schedule a meeting\", \"what's on my schedule\", \"am I free tomorrow\", or any calendar-related operations.\n---\n\n# Apple Calendar CLI (accli)\n\n## Installation\n\n```bash\nnpm install -g @joargp/accli\n```\n\n**Requirements:** macOS only (uses JavaScript for Automation)\n\n## Overview\n\nThe accli tool provides command-line access to macOS Apple Calendar. It enables listing calendars, querying events, creating/updating/deleting events, and checking availability across calendars.\n\n## Quick Reference\n\n### DateTime Formats\n- Timed events: YYYY-MM-DDTHH:mm or YYYY-MM-DDTHH:mm:ss\n- All-day events: YYYY-MM-DD\n\n### Global Options\n- --json - Output as JSON (recommended for parsing)\n- --help - Show help for any command\n\n## Commands\n\n### List Calendars\n\n```\naccli calendars [--json]\n```\n\nLists all available calendars with names and persistent IDs. Run this first to discover available calendars and their IDs.\n\n### List Events\n\n```\naccli events <calendarName> [options]\n```\n\nOptions:\n- --calendar-id <id> - Persistent calendar ID (recommended over name)\n- --from <datetime> - Start of range (default: now)\n- --to <datetime> - End of range (default: from + 7 days)\n- --max <n> - Maximum events to return (default: 50)\n- --query <q> - Case-insensitive filter on summary/location/description\n- --json - Output JSON\n\nExamples:\n\n```bash\n# Events from Work calendar for this week\naccli events Work --json\n\n# Events in January\naccli events Work --from 2025-01-01 --to 2025-01-31 --json\n\n# Search for specific events\naccli events Work --query \"standup\" --max 10 --json\n```\n\n### Get Single Event\n\n```\naccli event <calendarName> <eventId> [--json]\n```\n\nRetrieves details for a specific event by its ID.\n\n### Create Event\n\n```\naccli create <calendarName> --summary <s> --start <datetime> --end <datetime> [options]\n```\n\nRequired Options:\n- --summary <s> - Event title\n- --start <datetime> - Start time\n- --end <datetime> - End time\n\nOptional:\n- --location <l> - Event location\n- --description <d> - Event description\n- --all-day - Create an all-day event\n- --json - Output JSON\n\nExamples:\n\n```bash\n# Create a timed meeting\naccli create Work --summary \"Team Standup\" --start 2025-01-15T09:00 --end 2025-01-15T09:30 --json\n\n# Create an all-day event\naccli create Personal --summary \"Vacation\" --start 2025-07-01 --end 2025-07-05 --all-day --json\n\n# Create with location and description\naccli create Work --summary \"Client Meeting\" --start 2025-01-15T14:00 --end 2025-01-15T15:00 \\\n  --location \"Conference Room A\" --description \"Q1 planning discussion\" --json\n```\n\n### Update Event\n\n```\naccli update <calendarName> <eventId> [options]\n```\n\nOptions (all optional - only provide what to change):\n- --summary <s> - New title\n- --start <datetime> - New start time\n- --end <datetime> - New end time\n- --location <l> - New location\n- --description <d> - New description\n- --all-day - Convert to all-day event\n- --no-all-day - Convert to timed event\n- --json - Output JSON\n\nExample:\n\n```bash\naccli update Work event-id-123 --summary \"Updated Meeting Title\" --start 2025-01-15T15:00 --end 2025-01-15T16:00 --json\n```\n\n### Delete Event\n\n```\naccli delete <calendarName> <eventId> [--json]\n```\n\nPermanently deletes an event. Confirm with user before executing.\n\n### Check Free/Busy\n\n```\naccli freebusy --calendar <name> --from <datetime> --to <datetime> [options]\n```\n\nOptions:\n- --calendar <name> - Calendar name (can repeat for multiple calendars)\n- --calendar-id <id> - Persistent calendar ID (can repeat)\n- --from <datetime> - Start of range (required)\n- --to <datetime> - End of range (required)\n- --json - Output JSON\n\nShows busy time slots, excluding cancelled, declined, and transparent events.\n\nExamples:\n\n```bash\n# Check availability across calendars\naccli freebusy --calendar Work --calendar Personal --from 2025-01-15 --to 2025-01-16 --json\n\n# Check specific hours\naccli freebusy --calendar Work --from 2025-01-15T09:00 --to 2025-01-15T18:00 --json\n```\n\n### Configuration\n\n```bash\n# Set default calendar (interactive)\naccli config set-default\n\n# Set default by name\naccli config set-default --calendar Work\n\n# Show current config\naccli config show\n\n# Clear default\naccli config clear\n```\n\nWhen a default calendar is set, commands automatically use it if no calendar is specified.\n\n## Workflow Guidelines\n\n### Before Creating Events\n1. List calendars to get available calendar names/IDs\n2. Check free/busy to find available time slots\n3. Confirm event details with user before creating\n\n### Best Practices\n- Always use --json flag for programmatic parsing\n- Prefer --calendar-id over calendar names for reliability\n- When querying events, start with reasonable date ranges\n- Confirm with user before delete operations\n- Use ISO 8601 datetime format consistently\n\n### Common Patterns\n\nFind a free slot and schedule:\n\n```bash\n# 1. Check availability\naccli freebusy --calendar Work --from 2025-01-15T09:00 --to 2025-01-15T18:00 --json\n\n# 2. Create event in available slot\naccli create Work --summary \"Meeting\" --start 2025-01-15T14:00 --end 2025-01-15T15:00 --json\n```\n\nView today's schedule:\n\n```bash\naccli events Work --from $(date +%Y-%m-%d) --to $(date -v+1d +%Y-%m-%d) --json\n```\n","topics":["Calendar","Schedule"],"tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":6424,"installsAllTime":242,"installsCurrent":53,"stars":11,"versions":1},"createdAt":1767644556460,"updatedAt":1778485729679},"latestVersion":{"version":"1.0.0","createdAt":1767644556460,"changelog":"","license":null},"metadata":null,"owner":{"handle":"joargp","userId":"s17cgsw61wsmttvbcvyhscm735883mj7","displayName":"joargp","image":"https://avatars.githubusercontent.com/u/1954952?v=4"},"moderation":null}