Manage macOS Calendar events and Reminders using the ekctl CLI tool
Manages macOS Calendar events and Reminders using the ekctl CLI tool.
/plugin marketplace add schappim/ekctl-skill/plugin install schappim-ekctl-skill@schappim/ekctl-skillThis skill inherits all available tools. When active, it can use any tool Claude has access to.
command-reference.mdscripting-examples.mdUse the ekctl command-line tool to manage Calendar events and Reminders on macOS. All output is JSON for easy parsing.
Ensure ekctl is installed:
brew tap schappim/ekctl && brew install ekctl
If not installed, guide the user to install it first.
Before any calendar/reminder operation, check if the user has aliases configured:
ekctl alias list
If aliases exist, use them instead of raw IDs. If no aliases exist, help the user set them up after listing calendars.
ekctl list calendars
This returns both event calendars (type: "event") and reminder lists (type: "reminder").
Help users create aliases for frequently used calendars:
ekctl alias set work "CALENDAR_ID"
ekctl alias set personal "CALENDAR_ID"
ekctl alias set groceries "REMINDER_LIST_ID"
Use the appropriate command based on what the user wants to do. See command-reference.md for all commands.
Always use ISO 8601 format with timezone:
| Example | Description |
|---|---|
2026-01-15T09:00:00Z | 9:00 AM UTC |
2026-01-15T09:00:00+10:00 | 9:00 AM AEST |
2026-01-15T00:00:00Z | Start of day (midnight UTC) |
2026-01-15T23:59:59Z | End of day |
Generate dates dynamically when needed:
# Today at midnight UTC
TODAY=$(date -u +"%Y-%m-%dT00:00:00Z")
# Tomorrow at midnight UTC
TOMORROW=$(date -u -v+1d +"%Y-%m-%dT00:00:00Z")
# Next week
NEXT_WEEK=$(date -u -v+7d +"%Y-%m-%dT00:00:00Z")
# Specific time today (e.g., 2pm)
TODAY_2PM=$(date -u +"%Y-%m-%dT14:00:00Z")
TODAY=$(date -u +"%Y-%m-%dT00:00:00Z")
TOMORROW=$(date -u -v+1d +"%Y-%m-%dT00:00:00Z")
ekctl list events --calendar work --from "$TODAY" --to "$TOMORROW"
TODAY=$(date -u +"%Y-%m-%dT00:00:00Z")
NEXT_WEEK=$(date -u -v+7d +"%Y-%m-%dT23:59:59Z")
ekctl list events --calendar work --from "$TODAY" --to "$NEXT_WEEK"
ekctl add event \
--calendar work \
--title "Team Standup" \
--start "2026-01-15T09:00:00Z" \
--end "2026-01-15T09:30:00Z" \
--location "Conference Room A" \
--notes "Weekly sync"
ekctl add event \
--calendar personal \
--title "Vacation Day" \
--start "2026-01-20T00:00:00Z" \
--end "2026-01-21T00:00:00Z" \
--all-day
ekctl add reminder \
--list personal \
--title "Call the dentist" \
--due "2026-01-16T10:00:00Z" \
--priority 1
ekctl list reminders --list personal --completed false
ekctl complete reminder "REMINDER_ID"
All ekctl commands return JSON. Use jq for parsing:
# Get calendar ID by name
WORK_ID=$(ekctl list calendars | jq -r '.calendars[] | select(.title == "Work") | .id')
# Count events
ekctl list events --calendar work --from "$TODAY" --to "$TOMORROW" | jq '.count'
# Get event titles only
ekctl list events --calendar work --from "$TODAY" --to "$TOMORROW" | jq -r '.events[].title'
# Export to CSV
ekctl list events --calendar work --from "2026-01-01T00:00:00Z" --to "2026-12-31T23:59:59Z" \
| jq -r '.events[] | [.title, .startDate, .endDate, .location // ""] | @csv'
Check the status field in responses:
{
"status": "error",
"error": "Calendar not found with ID: invalid-id"
}
Common errors:
ekctl list calendars❌ Using raw calendar IDs repeatedly without suggesting aliases
✅ Help users set up aliases for calendars they use often
❌ Hardcoding dates without explaining the format
✅ Show the ISO 8601 format and generate dates dynamically when appropriate
❌ Ignoring the JSON status field
✅ Always check status field and handle errors gracefully
❌ Listing all events without a reasonable date range
✅ Use sensible date ranges (today, this week, this month)
command-reference.md for complete command documentationscripting-examples.md for advanced automation patternsApplies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.