MACOS · CLI · AGENT DOCUMENTATION

Cinch CLI

A native command-line interface for managing Apple Reminders on macOS. Create, inspect, update, and complete reminders — including location-based ones — from Terminal, scripts, or an LLM agent.

01 / ONE-TIME SETUP

Install the terminal command

The CLI executable is bundled inside the macOS app. The App Store sandbox prevents the app from editing shell files directly, so the setup command prints a user-local symlink command for you to copy into Terminal. The default user-local install does not require sudo.

  1. For the standard App Store location, run the bundled CLI command below.
  2. If Cinch is installed elsewhere, replace /Applications/Cinch.app with its actual app path.
  3. Copy and run the command printed by install-cli. It creates ~/.local/bin/cinch.
"/Applications/Cinch.app/Contents/MacOS/Cinch" install-cli

If Terminal reports cinch: command not found, add ~/.local/bin to PATH. For zsh, add this line to ~/.zshrc:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc

Open a new Terminal window and verify the installation:

cinch version
cinch doctor --json

doctor is read-only and checks app-bundle resolution, the active parsing locale, execution mode, Reminders authorization, and IPC daemon connectivity without requesting permission.

Third-Party Terminals & IDEs (VS Code, Cursor, AI Agents): The CLI communicates with Cinch via a local App Group UNIX domain socket IPC bridge. Commands run seamlessly through the background app using its Reminders permissions without requiring terminal TCC entitlements.

02 / SAFE AGENT WORKFLOW

Preview before saving

Use --dry-run to inspect the parsed reminder before creating or updating it. Review the title, due date, priority, list, and repeat rule, then remove --dry-run to commit.

cinch add "Submit report tomorrow at 5pm !!! #Work repeats weekly" --locale en-US --dry-run --json
cinch add --text "Buy milk tomorrow" --locale en-US --dry-run --json

Run cinch schema for machine-readable command definitions, supported locales, natural-language examples, and the error contract.

03 / NATURAL LANGUAGE

Write the reminder the way you think

Priority and list routing

  • ! means low, !! medium, and !!! or more high priority.
  • Unknown labels such as !high are stripped from the title and do not set priority. Use --priority high for an explicit value.
  • Use #Work to route to a matching single-token list. For names with spaces or exact list IDs, use --list.
  • Explicit flags such as --title, --due, --repeat, --priority, and --list override matching parsed values.

Tags, contacts, and flags

  • Tags: Type #tag or #"Multi-word tag" (e.g. #Work, #"Project Alpha") to assign category tags. If a single-word #Name matches an existing list, it routes to that list; otherwise it is indexed as a tag.
  • Contacts: Type @name or @"Full Name" (e.g. @Sarah, @"John Appleseed") to link contact mentions to the reminder.
  • Flags: Include !flag in your natural language text or pass the --flag option to mark the reminder with a high-visibility flag.

Dates, times, and language

  • Natural-language parsing defaults to the language saved in Cinch. Use --locale on add, or on update to parse --due.
  • Supported locale tags: en, cs, de, es, fr, it, ja, ko, pl, pt-BR, sk, and zh-Hans.
  • Relative dates, weekdays, clock times, and period phrases are supported. For example, mañana por la tarde resolves to tomorrow at 2pm and is removed from the title.

Repeat phrase examples

  • en: daily, every day; weekly, every Monday, repeats weekly; monthly; yearly.
  • cs: denně, každý týden, každé pondělí, opakovat týdně; měsíčně; ročně.
  • de: täglich, jede Woche, jeden Monat, jedes Jahr. es: cada día, cada semana, cada mes, cada año.
  • fr: chaque jour, chaque semaine, chaque mois, chaque année. it: ogni giorno, ogni settimana, ogni mese, ogni anno.
  • ja: 毎日, 毎週, 毎月, 毎年. ko: 매일, 매주, 매월, 매년.
  • pl: codziennie, co tydzień, co miesiąc, co rok. pt-BR: cada dia, cada semana, cada mês, cada ano.
  • sk: každý deň, každý týždeň, každý mesiac, každý rok. zh-Hans: 每天, 每周, 每月, 每年.
04 / COMMAND REFERENCE

Every command, explained

Every command, alias, and option in one place — the same details cinch help <command> prints in Terminal. Run cinch schema for machine-readable definitions.

Create and edit

cinch addnew · create

Create a reminder from positional text or --text, with optional explicit overrides.

  • --text <text> — Natural-language input (alias for the positional text)
  • --title <text> — Explicit title override
  • --notes <text> — Notes body
  • --due <date> — Due date or time, e.g. "today 5pm", "2026-09-26 14:00"
  • --repeat <rule> — daily, weekly, biweekly, monthly, yearly, none
  • --priority <level> — low, medium, high, none
  • --list <name|id> — Destination list
  • --url <url> — Attached URL
  • --location <lat,lon|home|work> — Location trigger
  • --radius <meters> — Geofence radius (default 100)
  • --proximity <arriving|leaving> — Trigger direction (--on-arrive/--on-leave are aliases)
  • --flag (or --flagged) — Flag the reminder
  • --tag <name> / --tags <list> — Add category tags (comma-separated or repeatable)
  • --contact <name> / --contacts <list> — Link contacts (comma-separated or repeatable)
  • --locale <tag> — Parsing language (BCP-47)
  • --dry-run — Preview without saving
cinch update <id>edit

Modify an existing reminder. Set a field, retune it, or clear it.

  • --title, --notes, --due, --repeat, --priority, --list, --url — Update a field
  • --location <lat,lon|home|work> — Replace the location trigger
  • --radius, --proximity — Retune the existing trigger without repeating --location
  • --clear-due, --clear-repeat, --clear-url, --clear-location — Remove a field
  • --flag / --unflag (or --clear-flag) — Set or remove the high-priority flag
  • --tag, --remove-tag, --clear-tags — Add, remove, or clear category tags
  • --contact, --remove-contact, --clear-contacts — Add, remove, or clear contact mentions
  • --locale <tag> — Parses --due
  • --dry-run — Preview changes

Read and filter

cinch listls

List and filter reminders. Defaults to incomplete reminders.

  • --list <name|id> — Filter by list
  • --status <incomplete|completed|all> — Completion filter
  • --due <filter> — today, tomorrow, upcoming, overdue, anytime, or YYYY-MM-DD
  • --recurring / --no-recurring — Recurring only / non-recurring only
  • --has-location / --no-location — With / without a location trigger
  • --priority <none|low|medium|high> — Priority filter
  • --flagged / --unflagged — Filter only flagged or unflagged reminders
  • --tag <name> / --tags <list> — Filter by category tag
  • --contact <name> / --contacts <list> — Filter by linked contact
  • --search <query> — Match title or notes
  • --limit <n> — Maximum results
  • --table / --plain / --json — Output format
cinch get <id>show

Show full details for one reminder by identifier or external identifier.

cinch lists

List every reminder list and calendar with IDs and counts.

Complete, reopen, and delete

cinch complete <id>done

Mark a reminder complete. Recurring tasks advance to their next occurrence.

cinch uncomplete <id>undo

Reopen a completed reminder.

cinch delete <id>rm

Permanently delete a reminder.

Diagnostics and setup

cinch doctor

Read-only diagnostics for bundle resolution, PATH, parsing locale, execution mode, IPC daemon connectivity, and Reminders authorization. Never requests permission.

cinch schema

Print the machine-readable JSON schema of commands, parameters, and error codes — ideal for LLM tool calls.

cinch completions <shell>

Print shell completion definitions.

  • zsh, bash, or fish
cinch install-cli

Print the shell command that creates a user-local symlink to the bundled CLI.

  • --path <path> — Optional custom symlink location
cinch version

Print the installed Cinch version and build.

cinch help

Show general help, or help for a single command.

  • [command]

Global options

  • --json — Force JSON output (the default when stdout is piped)
  • --plain — Force human-readable output
  • --table — Aligned table for cinch list
  • --dry-run — Preview add and update without saving
05 / LOCATION REMINDERS

Location-based reminders

Attach a geofence so a reminder fires when you arrive at or leave a place. Cinch writes the trigger to Apple Reminders, and matching tasks appear in the Nearby section.

Options

  • --location <lat,lon|home|work> — Coordinates, or the home/work places saved in Cinch Settings
  • --radius <meters> — Geofence radius (default 100)
  • --proximity <arriving|leaving> — Fire on arrival (default) or departure
  • --on-arrive / --on-leave — Shortcuts for --proximity
  • --clear-location — Remove the trigger (update)
cinch add "Buy milk" --location "37.3318,-122.0312" --radius 200 --on-leave
cinch add "Water the plants" --location home --proximity arriving
cinch add "Pick up dry cleaning" --location work --radius 150
cinch update <id> --radius 250
cinch update <id> --clear-location
cinch list --has-location

Notes: on add, --radius and --proximity require --location. On update they retune the existing trigger without repeating --location, and omitting --proximity keeps the current direction.

06 / AGENT OUTPUT

JSON, previews, and error handling

  • When stdout is piped, JSON is the default. --json forces JSON; --plain forces human-readable lines; --table selects a list table.
  • Timed due dates serialize as ISO-8601 timestamps; all-day dates serialize as YYYY-MM-DD.
  • Reminder objects include isFlagged (boolean), tags (array of strings), and contacts (array of strings).
  • Success uses { success: true, data: ..., error: null }. Failure uses { success: false, data: null, error: { code, message } }.
{"success":false,"data":null,"error":{"code":"not_found","message":"Reminder was not found."}}

Exit codes: 0 success; 1 general/operation error; 2 invalid argument or task; 3 Reminders permission denied; 4 requested reminder not found.

Error codes: invalid_task, missing_id, missing_shell, invalid_shell, unknown_command, permission_denied, not_found, fetch_error, save_error, update_error, completion_error, delete_error, and install_error.

07 / SHELL INTEGRATION

Shell completions

Generate zsh, bash, or fish completions and install them in your user configuration:

mkdir -p ~/.zsh/completions && cinch completions zsh > ~/.zsh/completions/_cinch
mkdir -p ~/.local/share/bash-completion/completions && cinch completions bash > ~/.local/share/bash-completion/completions/cinch
mkdir -p ~/.config/fish/completions && cinch completions fish > ~/.config/fish/completions/cinch.fish

For zsh, add fpath=(~/.zsh/completions $fpath) before compinit in ~/.zshrc. Bash needs bash-completion to load its user completion directory; Fish loads its completion directory automatically.

Run cinch doctor for read-only PATH, locale, bundle, and Reminders-permission diagnostics. It never requests permission.

See Support for other help.