Commands

Complete reference for every ical command, flag, and option. Covers list, add, update, delete, search, export, import, and calendar management.

Overview

ical provides commands for managing macOS Calendar events and calendars. Every command that displays data supports --output (-o) with table, json, or plain formats.

CommandDescription
ical calendarsList all calendars
ical calendars create [title]Create a new calendar
ical calendars update [name]Update a calendar (rename, recolor)
ical calendars delete [name]Delete a calendar and all its events
ical listList events in a date range
ical todayToday’s events
ical upcomingEvents in next N days
ical show [# or id]Show event details
ical add [title]Create an event
ical update [# or id]Update an event
ical delete [# or id]Delete an event
ical search [query]Search events
ical exportExport events (JSON/CSV/ICS)
ical import [file]Import events (JSON/CSV)
ical skills installInstall AI agent skill (Claude Code / Codex / OpenClaw / others)
ical skills uninstallRemove AI agent skill
ical skills statusShow skill installation status
ical versionShow version info
ical completionGenerate shell completions

Global Flags

These flags are available on all commands:

FlagShortDefaultDescription
--output-otableOutput format: table, json, plain
--no-colorfalseDisable color output (also respects NO_COLOR)

ical calendars

Manage calendars. Running without a subcommand lists all calendars.

ical calendars
ical cals
ical calendars -o json

Displays the calendar name, source (iCloud, Google, etc.), type, color, and read-only status. Useful for finding the exact calendar name to pass to -c and discovering available sources for creating new calendars.


ical calendars create

Create a new calendar. Requires --source to specify the account.

# Create with flags
ical calendars create "Projects" --source iCloud --color "#FF6961"

# Interactive mode
ical calendars create -i

Flags

FlagShortDescription
--title-TCalendar title
--source-sAccount source — required (e.g., “iCloud”)
--colorCalendar color (hex, e.g., “#FF6961”)
--interactive-iInteractive mode with guided prompts

Run ical calendars to see available sources from existing calendars.


ical calendars update

Update an existing calendar (rename or recolor).

# Update by name
ical calendars update "Projects" --title "Archived" --color "#8295AF"

# Interactive mode (guided form)
ical calendars update "Projects" -i

# Interactive picker (no argument)
ical calendars update -i

Flags

FlagShortDescription
--title-TNew calendar title
--colorNew calendar color (hex, e.g., “#42D692”)
--interactive-iInteractive mode with guided prompts

Subscribed and birthday calendars cannot be updated (immutable).


ical calendars delete

Permanently delete a calendar and all its events.

# Delete by name (with confirmation)
ical calendars delete "Projects"

# Skip confirmation
ical calendars delete "Projects" --force

# Interactive picker (no argument)
ical calendars delete

Flags

FlagShortDescription
--force-fSkip confirmation prompt

Subscribed and birthday calendars cannot be deleted (immutable).


ical list

List events within a date range.

ical list -f "next monday" -t "next friday"
ical list -f today -t "in 7 days" -c Work

Flags

FlagShortDescription
--from-fStart date (natural language)
--to-tEnd date (natural language)
--calendar-cFilter by calendar name
--exclude-calendarExclude calendar (repeatable)
--limit-nMaximum number of results
--sortSort by: title, time, calendar

Events are displayed with row numbers (#1, #2, …) that can be used with show, update, and delete. The row mapping is cached to ~/.ical-last-list so subsequent commands can reference events by number.

# List, then act on event #2
ical list -f today -t "next friday"
ical show 2

ical today

Show today’s events. A convenience shortcut for ical list -f today -t today.

ical today
ical today -c Work
ical today -o json

Flags

FlagShortDescription
--calendar-cFilter by calendar name
--exclude-calendarExclude calendar (repeatable)

ical upcoming

Show events for the next N days (default: 7).

ical upcoming
ical upcoming -d 30
ical upcoming -d 14 -c Work --exclude-calendar Birthdays

Flags

FlagShortDefaultDescription
--days-d7Number of days to look ahead
--calendar-cFilter by calendar name
--exclude-calendarExclude calendar (repeatable)
--limit-nMaximum number of results
--sortSort by: title, time, calendar

ical show

Display detailed information about a single event.

# Interactive picker (no argument)
ical show

# By row number from last listing
ical show 2

# By full or partial event ID
ical show 577B8983-DF44-4665-B0F9-ABCD1234

# By exact event ID (for scripts and agents)
ical show --id "577B8983-DF44-4665-B0F9-ABCD1234:abc"

Flags

FlagShortDescription
--idFull event ID — exact match, no prefix search
--from-fStart date for event picker
--to-tEnd date for event picker
--days-dDays to show in picker (default: 7)

Event Selection

Events can be selected four ways:

  1. Interactive picker — Run with no argument to get a searchable list
  2. Row number — Use #N from the last list, today, or upcoming output
  3. Event ID — Pass a full or partial eventIdentifier as a positional arg
  4. --id flag — Full event ID, exact match only (preferred for scripts/agents)

--id and a positional argument are mutually exclusive.

The show command displays title, calendar, start/end times, location, notes, alerts, recurrence rules, URL, and attendees.


ical add

Create a new calendar event.

# With flags
ical add "Team Standup" -s "tomorrow 9am" -e "tomorrow 9:30am" -c Work

# Interactive guided form
ical add -i

Flags

FlagShortDescription
--start-sStart time (natural language)
--end-eEnd time (natural language)
--calendar-cCalendar to add to
--location-lEvent location
--all-dayCreate an all-day event
--alertAdd alert before event (repeatable)
--timezoneTimezone (e.g., America/New_York)
--repeatRecurrence: daily, weekly, monthly, yearly
--repeat-daysDays for weekly recurrence (repeatable)
--repeat-untilRecurrence end date
--interactive-iUse guided interactive form

Examples

# All-day event
ical add "Company Holiday" -s 2026-03-15 --all-day -c Work

# With location and multiple alerts
ical add "Dinner" -s "friday 7pm" -e "friday 9pm" \
  -l "The Restaurant, 123 Main St" --alert 1h --alert 15m

# Weekly recurring event
ical add "Weekly Sync" -s "next monday 10am" -e "next monday 11am" \
  --repeat weekly --repeat-days mon -c Work

# Recurring with end date
ical add "Daily Standup" -s "tomorrow 9am" -e "tomorrow 9:15am" \
  --repeat daily --repeat-until "2026-12-31" -c Work

# With timezone
ical add "NYC Meeting" -s "tomorrow 2pm" -e "tomorrow 3pm" \
  --timezone "America/New_York" -c Work

Interactive Mode

The -i flag launches a guided form where you fill in each field step by step. The form uses the Catppuccin theme and supports calendar selection from a dropdown.


ical update

Update an existing event.

# Interactive picker + guided form
ical update -i

# Update by row number
ical update 2 --title "New Title"

# Reschedule
ical update 3 -s "tomorrow 2pm" -e "tomorrow 3pm"

# Update future occurrences of recurring event
ical update 1 --span future --title "New Series Name"

# By exact event ID (for scripts and agents)
ical update --id "577B8983-DF44:abc" --title "New Title"

Flags

FlagShortDescription
--idFull event ID — exact match, no prefix search
--titleNew title
--start-sNew start time (natural language)
--end-eNew end time (natural language)
--calendar-cMove to different calendar
--location-lNew location
--all-dayToggle all-day status
--alertReplace alerts (repeatable)
--timezoneNew timezone
--repeatNew recurrence pattern
--repeat-daysNew recurrence days
--repeat-untilNew recurrence end date
--spanApply to: this or future occurrences
--interactive-iUse guided interactive form

update applies changes immediately — there is no confirmation prompt and no --force flag. --id and a positional argument are mutually exclusive.


ical delete

Delete one or more events with a confirmation prompt.

# Interactive picker with confirmation
ical delete

# Delete by row number
ical delete 3

# Skip confirmation
ical delete 3 -f

# Batch delete multiple events at once
ical delete 1 2 3 --force

# Delete future occurrences of recurring event
ical delete 2 --span future

# By exact event ID (for scripts and agents)
ical delete --id "577B8983-DF44:abc" --force

Flags

FlagShortDescription
--idFull event ID — exact match, no prefix search
--force-fSkip confirmation prompt
--spanApply to: this or future occurrences

Batch Delete

Multiple row numbers or event IDs can be passed as positional arguments to delete several events in a single operation:

ical list --from today --to "next friday"   # Shows #1, #2, #3...
ical delete 1 3 5 --force                   # Delete events #1, #3, #5

Batch delete uses go-eventkit’s DeleteEvents API for efficient single-call deletion. Each event is resolved individually, and per-event errors are reported without aborting the entire batch.

Always pass --force when running non-interactively (scripts, agents). There is no --confirm flag. --id and a positional argument are mutually exclusive. --id only works for single event deletion.


Search events by title and description.

ical search "standup"
ical search "meeting" -c Work -f "1 month ago" -t "in 1 month"

Flags

FlagShortDescription
--from-fStart date (natural language)
--to-tEnd date (natural language)
--calendar-cFilter by calendar name
--exclude-calendarExclude calendar (repeatable)
--limit-nMaximum number of results
--sortSort by: title, time, calendar

ical export

Export events to a file or stdout.

# Export to JSON
ical export -f 2026-01-01 -t 2026-12-31 --format json > events.json

# Export to CSV
ical export -c Work --format csv --output-file work-events.csv

# Export to ICS (RFC 5545)
ical export --format ics --output-file calendar.ics

Flags

FlagShortDefaultDescription
--formatjsonExport format: json, csv, ics
--from-fStart date filter
--to-tEnd date filter
--calendar-cFilter by calendar
--output-fileSave to file (default: stdout)

Formats

  • JSON: Full event data including IDs, timestamps, recurrence rules
  • CSV: Tabular format suitable for spreadsheets
  • ICS: RFC 5545 iCalendar format, compatible with any calendar app

ical import

Import events from a JSON or CSV file.

ical import events.json
ical import events.csv -c Personal
ical import events.json --dry-run

Flags

FlagShortDescription
--calendar-cTarget calendar for imported events
--dry-runPreview import without creating events

The format is auto-detected from the file extension (.json or .csv).


ical skills

Manage the embedded AI agent skill. ical ships with an agent skill baked into the binary that teaches AI coding agents (Claude Code, Codex CLI, OpenClaw, GitHub Copilot, Cursor, Windsurf, Augment) how to use it.

ical skills install

Install the skill to the selected agent’s skill directory. Without --agent, shows an interactive picker. In interactive mode, a confirmation prompt shows exactly which paths will be created before writing anything. The skill files are the same documentation published at ical.sidv.dev/docs.

# Preview what would be installed (no files written)
ical skills install --dry-run

# Interactive — pick which agents, then confirm
ical skills install

# Direct
ical skills install --agent claude    # → ~/.claude/skills/ical-cli/
ical skills install --agent codex     # → ~/.codex/skills/ical-cli/
ical skills install --agent openclaw  # → ~/.openclaw/skills/ical-cli/
ical skills install --agent others    # → ~/.agents/skills/ical-cli/
ical skills install --agent all       # All agents

Flags

FlagDescription
--agentTarget agent: claude, codex, openclaw, others, or all
--dry-runPreview what would be installed without writing

Supported targets:

  • claude~/.claude/skills/ical-cli/ — works with Claude Code, GitHub Copilot, Cursor, OpenCode, Augment
  • codex~/.codex/skills/ical-cli/ — works with Codex CLI
  • openclaw~/.openclaw/skills/ical-cli/ — works with OpenClaw
  • others~/.agents/skills/ical-cli/ — works with Copilot, Windsurf, OpenCode, Augment

ical skills uninstall

Remove the skill from the selected agent’s skill directory.

ical skills uninstall
ical skills uninstall --agent claude

Flags

FlagDescription
--agentTarget agent: claude, codex, openclaw, others, or all

ical skills status

Show where skills are installed and whether they match the current binary version.

ical skills status

If installed skills are outdated (from a previous version), ical will show a warning and prompt you to run ical skills install to update them.


ical version

Display the installed version of ical.

ical version

ical completion

Generate shell completion scripts.

# Bash
ical completion bash > /usr/local/etc/bash_completion.d/ical

# Zsh
ical completion zsh > "${fpath[1]}/_ical"

# Fish
ical completion fish > ~/.config/fish/completions/ical.fish

After generating, restart your shell or source the completion file to activate.