Apple Calendar CLI Plus
/install accli-plus
accli — Apple Calendar CLI
accli manages Apple Calendar on macOS via EventKit. All commands support --json for structured output. Exit codes: 0=success, 1=runtime error, 2=validation error, 10=auth error.
Platform: macOS only (darwin). Uses osascript + EventKit. Do not run on non-macOS systems.
First run: accli setup to grant Calendar permissions. Full Calendar Access is required in System Settings > Privacy & Security > Calendars. This gives the agent read and write access to all calendars on the device — install only if you intend to delegate calendar management to the agent.
Agent Safety Rules
Before any create, update, or delete operation:
- Use
accli searchoraccli eventto confirm the correct event ID - Run the command with
--dry-runfirst and show the user the preview - Require explicit user confirmation before executing the real mutation
- Scope all operations to specific
--calendar-idvalues — never operate on all calendars unless the user explicitly requests it
For search and export:
- Always pass
--calendar-idand narrow--from/--toranges unless the user explicitly asks for a full export - Treat exported calendar data (summaries, locations, descriptions) as private — do not include it in summaries sent to third-party services
Calendars
accli calendars [--json]
Returns list of calendars with id, name, source, index, writable. Always prefer --calendar-id \x3Cid> over calendar name — IDs are stable, names are not.
Events
accli events [\x3CcalendarName>] [--calendar-id \x3Cid>] --from \x3Cdate> --to \x3Cdate> [--json]
Lists events in a date range. Calendar is required (use name, --calendar-id, or set a default via accli config set-default).
Single Event
accli event [\x3CcalendarName>] \x3CeventId> [--calendar-id \x3Cid>] [--json]
Fetches full event detail including alerts array (minutes before start).
Create Event
accli create \x3CcalendarName> --summary \x3Ctext> --start \x3Cdatetime> --end \x3Cdatetime> \
[--location \x3Ctext>] [--description \x3Ctext>] [--all-day] \
[--alert \x3Cminutes>] [--alert \x3Cminutes>] \
[--recur daily|weekly|monthly|yearly] [--recur-count \x3Cn>] [--recur-end \x3CYYYY-MM-DD>] \
[--json]
--alertis repeatable — adds one alert per flag (minutes before start)--recur-endand--recur-countare mutually exclusive- All-day events: use
YYYY-MM-DDfor--startand--end - Timed events: use
YYYY-MM-DDTHH:mm - Always confirm with user before creating — calendar events cannot be easily bulk-undone
Update Event
accli update \x3CcalendarName> \x3CeventId> \
[--summary \x3Ctext>] [--start \x3Cdatetime>] [--end \x3Cdatetime>] \
[--location \x3Ctext>] [--description \x3Ctext>] \
[--alert \x3Cminutes>] [--alert \x3Cminutes>] \
[--dry-run] [--json]
--alert on update replaces all existing alerts. Omit --alert to leave alerts unchanged.
Mandatory dry-run flow:
accli update Work \x3Cid> --summary "New title" --dry-run --json # show user
accli update Work \x3Cid> --summary "New title" --json # only after user confirms
Delete Event
accli delete \x3CcalendarName> \x3CeventId> [--dry-run] [--json]
Mandatory dry-run flow:
accli delete Work \x3Cid> --dry-run --json # show user what would be deleted
accli delete Work \x3Cid> --json # only after user confirms
Search
accli search --query \x3Ctext> [--from \x3Cdate>] [--to \x3Cdate>] [--calendar-id \x3Cid>] [--json]
Case-insensitive search across summary, location, and description. Scope with --calendar-id and a narrow date range. Do not expose raw results to third-party services without user consent.
Export
accli export --from \x3Cdate> --to \x3Cdate> [--calendar-id \x3Cid>] [--json]
Exports all events grouped by calendar. Response: { calendars: [{ id, name, source, events, truncated }], totalEvents, truncated }. Each calendar truncates at 500 events and sets truncated: true if hit. Use narrow date ranges and specific calendar IDs unless the user explicitly requests a full backup.
Free/Busy
accli freebusy --from \x3Cdatetime> --to \x3Cdatetime> [--calendar-name \x3Cname>] [--json]
Returns busy time slots across calendars.
Config
accli config set-default --calendar-id \x3Cid> [--json]
accli config show [--json]
accli config clear [--json]
Persists default calendar to ~/.acclirc (override with ACCLI_CONFIG_PATH).
DateTime Formats
- Timed:
YYYY-MM-DDTHH:mmorYYYY-MM-DDTHH:mm:ss - Date-only (all-day events, --from/--to):
YYYY-MM-DD
Error Codes
| Code | Meaning |
|---|---|
NOT_AUTHORIZED |
Calendar access not granted or set to Add Only |
CALENDAR_NOT_FOUND |
Calendar ID or name not found |
AMBIGUOUS_CALENDAR |
Multiple calendars with same name — use --calendar-id |
EVENT_NOT_FOUND |
Event ID not found in calendar |
MISSING_REQUIRED |
Required flag missing |
INVALID_ARGUMENT |
Invalid flag value |
INVALID_RANGE |
Start is after end |
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install accli-plus - After installation, invoke the skill by name or use
/accli-plus - Provide required inputs per the skill's parameter spec and get structured output
What is Apple Calendar CLI Plus?
Manage Apple Calendar events from the command line on macOS — create, update, delete, search, export, and check availability with full JSON output for agent... It is an AI Agent Skill for Claude Code / OpenClaw, with 83 downloads so far.
How do I install Apple Calendar CLI Plus?
Run "/install accli-plus" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Apple Calendar CLI Plus free?
Yes, Apple Calendar CLI Plus is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Apple Calendar CLI Plus support?
Apple Calendar CLI Plus is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Apple Calendar CLI Plus?
It is built and maintained by Gopalji Gaur (@gopaljigaur); the current version is v1.2.3.