Docs menu

Calendar

Orchard gives your AI client full read/write access to macOS Calendar events, along with a standalone date-conversion tool. Calendar is one of the three apps enabled on the Free plan.

What you can do

  • “Schedule a team sync tomorrow from 2 to 3pm and remind me 15 minutes and 1 hour before.”
  • “What’s on my calendar next week?”
  • “Move my dentist appointment to Friday at 9am.”
  • “Schedule a standup every other Monday, Wednesday, and Friday for 10 occurrences.”
  • “Delete only next week’s occurrence of the team sync, not the whole series.”
  • “What is today’s date in the Chinese lunar calendar?”
  • “Cancel the ‘Product Review’ event on my Work calendar.”

Available tools

ToolDescription
calendar_event_createCreate a one-time or recurring event with title, time, calendar, location, notes, URL, and alarms.
calendar_event_updateUpdate an event, change/remove its recurrence, or apply a change to one occurrence or all future occurrences.
calendar_event_deleteDelete one occurrence or the selected occurrence and all future events in a recurring series.
calendar_infoList calendars, or list events within a date range and optional calendar filter.
calendar_convertConvert a Gregorian date to another calendar system.

Events support multiple alarms expressed as minutes before the start time — for example [15, 60, 1440] for 15 minutes, 1 hour, and 1 day before. calendar_info with type=calendars accepts a calendar_type filter of event (default) or birthday.

Recurring events

Orchard 0.6.2 adds daily, weekly, monthly, and yearly recurrence. You can repeat every N periods, select weekdays or calendar dates, create patterns such as the first Monday or last day of the month, and end after a fixed count or on an inclusive date.

When updating or deleting a recurring event, Orchard can affect only the selected occurrence (this_event) or that occurrence and every one after it (future_events). Every occurrence shares the series’ event ID, so use occurrence_date as well when the target is not the first occurrence returned for that ID.

Check the span before changing a series

Deleting defaults to the selected occurrence only. Updating also defaults to one occurrence, except changing the recurrence rule defaults to that occurrence and all future events. Ask your AI client to state the target occurrence and scope before it makes a destructive series change.

Supported calendar systems for calendar_convert

calendar_convert translates a date into any of these 13 calendar systems:

IdentifierCalendar
gregorianGregorian
buddhistBuddhist
chineseChinese lunar
hebrewHebrew
islamicIslamic (Umm al-Qura)
islamicCivilIslamic Civil
indianIndian National
japaneseJapanese
persianPersian
copticCoptic
ethiopicAmeteMihretEthiopic (Amete Mihret)
ethiopicAmeteAlemEthiopic (Amete Alem)
iso8601ISO 8601

Required permissions

Calendar needs Calendars full access. macOS prompts for this the first time you use a calendar tool, or during onboarding if you selected Calendar on the Choose Your Features screen.

macOS system permission prompt requesting access to Calendars

Birthday calendar quirk

Listing the birthday calendar (calendar_info with calendar_type=birthday, or orchard calendar info --type calendars --calendar-type birthday on the CLI) works when Reminders access is granted, not just Calendars access. If this call fails with a permission error even though Calendars is authorized, check that Reminders access is granted too. See Troubleshooting for this exact symptom.

CLI usage

The orchard calendar command exposes the same five operations as subcommands.

Terminal
orchard calendar create --title "Team sync" --start "2026-07-14T14:00:00" --end "2026-07-14T15:00:00" --alarms "15,60"
Terminal
orchard calendar info --type events --from "2026-07-14T00:00:00" --to "2026-07-21T00:00:00"

Filter that event query to one or more calendar IDs with a comma-separated list:

Terminal
orchard calendar info --type events --from "2026-07-14" --to "2026-07-21" --calendar-ids "WORK_ID,PERSONAL_ID"
Terminal
orchard calendar info --type calendars --calendar-type birthday
Terminal
orchard calendar update --event-id ABC123 --start "2026-07-18T09:00:00" --end "2026-07-18T09:30:00"
Terminal
orchard calendar update --event-id ABC123 --calendar-id "personal-calendar-id" --url "" --alarms "15,60"

Create a custom recurring event:

Terminal
orchard calendar create --title "Standup" --start "2026-08-10T10:00:00+08:00" --end "2026-08-10T10:30:00+08:00" \
--repeat weekly --repeat-interval 2 --repeat-days-of-week "mon,wed,fri" --repeat-count 10

Create an event on the last day of every month, ending on a date:

Terminal
orchard calendar create --title "Month-end review" --start "2026-08-31T16:00:00+08:00" --end "2026-08-31T17:00:00+08:00" \
--repeat monthly --repeat-days-of-month=-1 --repeat-until "2027-08-31"

Update one occurrence, or delete that occurrence and every future one:

Terminal
orchard calendar update --event-id ABC123 --occurrence-date "2026-09-07T10:00:00+08:00" --span this-event --start "2026-09-07T11:00:00+08:00" --end "2026-09-07T11:30:00+08:00"
orchard calendar delete --event-id ABC123 --occurrence-date "2026-10-05T10:00:00+08:00" --span future-events

Use --repeat none on calendar update to remove recurrence. --repeat-until and --repeat-count are alternative end conditions and cannot be combined. Run orchard calendar create --help for the yearly and positional repeat flags.

Terminal
orchard calendar convert --date "2026-07-13T00:00:00" --calendar chinese

Every subcommand accepts --json for machine-readable output. Run orchard calendar <subcommand> --help (or orchard help calendar <subcommand>) for the full flag list — see the CLI Reference for more.

Tips & limitations

  • Calendar is enabled by default alongside Reminders, so most users see it working immediately after onboarding.
  • To move an event to a different calendar, update it with a new calendar_id (or --calendar-id on the CLI). calendar_event_update refuses to move an event into a calendar that isn’t an event calendar or that doesn’t allow content modifications.
  • All-day events are created by passing --all-day (CLI) or all_day: true (tool); omit end-of-day handling — Orchard uses the dates you provide as-is.
  • Passing an empty url value on update clears the event’s URL (--url "" on the CLI); passing an empty alarms array clears all alarms (--alarms "" on the CLI).
  • A recurrence end_date is inclusive. For monthly rules, negative days count backward from the end of the month (-1 means the last day).