Install
openclaw skills install mac-reminders-agentIntegrate with macOS Reminders app to check, add, edit, delete, and complete reminders. Supports multiple reminder lists (calendars), priority levels (high/medium/low), and title search. Supports native recurrence (매주/weekly/毎週/每周) via Swift EventKit - creates single reminder with repeat rule. Supports editing and deleting reminders by ID (calendarItemIdentifier from EventKit). Supports multiple languages (en, ko, ja, zh) for trigger detection and response formatting. When users request recurring reminders, MUST use --repeat option (daily|weekly|monthly|yearly). Supports parsing meeting notes to extract action items and suggest reminders (parse command). Parse command is pure text processing - no Reminders app access required.
openclaw skills install mac-reminders-agentThis skill integrates with the local macOS Reminders app to:
The skill uses the following files relative to its directory:
cli.js (unified entry point)reminders/apple-bridge.js (backend: AppleScript + applescript npm module)reminders/eventkit-bridge.swift (native recurrence via Swift EventKit)reminders/meeting-parser.js (meeting notes parser for action item extraction)locales.json (language-specific triggers and responses)The skill automatically detects user language or can be explicitly set via --locale parameter.
| Code | Language | Example Trigger |
|---|---|---|
en | English | "What do I have to do today?" |
ko | 한국어 | "오늘 할 일 뭐 있어?" |
ja | 日本語 | "今日のタスクは?" |
zh | 中文 | "今天有什么任务?" |
--locale parameteren (English)User natural language requests are handled in two cases:
For each case, call the Node.js CLI, receive JSON results, and format them using locale-specific templates.
node skills/mac-reminders-agent/cli.js lists --locale ko
Returns JSON with calendars array:
{
"calendars": [
{ "id": "cal-id-1", "name": "Reminders", "isDefault": true },
{ "id": "cal-id-2", "name": "Work", "isDefault": false }
]
}
English:
Korean (한국어):
Japanese (日本語):
Chinese (中文):
# List with default locale (en)
node skills/mac-reminders-agent/cli.js list --scope today
# List with specific locale
node skills/mac-reminders-agent/cli.js list --scope week --locale ko
# List from specific list
node skills/mac-reminders-agent/cli.js list --scope week --list "Work"
# Search by title keyword
node skills/mac-reminders-agent/cli.js list --query "meeting" --scope all
--scope (optional): today, week (default), all--list (optional): Filter by reminder list name (omit for all lists)--query (optional): Filter by title keyword (case-insensitive)--locale (optional): Response language (en, ko, ja, zh)Returns JSON with items array:
[
{
"id": "ABC-123-DEF",
"title": "Task title",
"due": "2026-02-05T16:30:00+09:00",
"list": "Work",
"priority": "high",
"completed": false
}
]
Use locales.json templates to format responses in user's language:
English:
[Incomplete Reminders]
- 2/2 (Mon) 09:00 [Work] Meeting
- 2/3 (Tue) 14:00 [Personal] Visit bank
[Completed]
- 2/1 (Sun) [Work] Submit report ✅
Korean:
[미완료 미리알림]
- 2/2 (월) 09:00 [업무] 회의
- 2/3 (화) 14:00 [개인] 은행 방문
[완료됨]
- 2/1 (일) [업무] 보고서 제출 ✅
English:
Korean (한국어):
Japanese (日本語):
Chinese (中文):
# Add with locale
node skills/mac-reminders-agent/cli.js add --title "Meeting" --due "2026-02-05T09:00:00+09:00" --locale ko
# Add with priority and specific list
node skills/mac-reminders-agent/cli.js add --title "Urgent Report" --due "2026-02-05T17:00:00+09:00" --priority high --list "Work" --locale ko
--title (required): Reminder title--due (optional): ISO 8601 format (YYYY-MM-DDTHH:mm:ss+09:00)--note (optional): Additional notes--priority (optional): high, medium, low, none (default: none)--list (optional): Target reminder list name (default: system default list)--locale (optional): Response language (en, ko, ja, zh)English:
Korean:
English:
Korean (한국어):
# Edit title
node skills/mac-reminders-agent/cli.js edit --id "ABC123" --title "New Meeting Title" --locale ko
# Edit due date
node skills/mac-reminders-agent/cli.js edit --id "ABC123" --due "2026-03-01T10:00:00+09:00"
# Edit priority
node skills/mac-reminders-agent/cli.js edit --id "ABC123" --priority high
# Edit note
node skills/mac-reminders-agent/cli.js edit --id "ABC123" --note "Updated notes"
--id (required): Reminder ID (calendarItemIdentifier from list output)--title (optional): New title--due (optional): New due date in ISO 8601 format--note (optional): New note text--priority (optional): high, medium, low, none--locale (optional): Response language (en, ko, ja, zh)list first to get reminder IDsBefore editing, always run list to get the reminder's id field. The id is an EventKit calendarItemIdentifier (UUID-like string).
English:
Korean (한국어):
node skills/mac-reminders-agent/cli.js delete --id "ABC123" --locale ko
--id (required): Reminder ID (from list output)--locale (optional): Response languageEnglish:
Korean (한국어):
node skills/mac-reminders-agent/cli.js complete --id "ABC123" --locale ko
--id (required): Reminder ID (from list output)--locale (optional): Response languageUse --repeat to create reminders with native recurrence (single reminder with repeat rule, not multiple copies).
# Weekly recurring reminder
node skills/mac-reminders-agent/cli.js add --title "Weekly standup" --due "2026-02-10T09:00:00+09:00" --repeat weekly
# Bi-weekly reminder
node skills/mac-reminders-agent/cli.js add --title "Sprint review" --due "2026-02-10T14:00:00+09:00" --repeat weekly --interval 2
# Monthly reminder until end of year
node skills/mac-reminders-agent/cli.js add --title "Monthly report" --due "2026-02-28T17:00:00+09:00" --repeat monthly --repeat-end 2026-12-31
--repeat (optional): daily, weekly, monthly, yearly--interval (optional): Repeat interval (default: 1). Example: --interval 2 = every 2 weeks--repeat-end (optional): End date in YYYY-MM-DD formatWhen user requests recurring reminders (매주, 격주, 매월, etc.), MUST use --repeat option. Do NOT create multiple individual reminders manually.
Correct:
node cli.js add --title "주간 회의" --due "2026-02-10T09:00:00+09:00" --repeat weekly
Wrong (DO NOT DO THIS):
# Creating 12 separate reminders is WRONG
node cli.js add --title "주간 회의 - 2/10" --due "2026-02-10T09:00:00+09:00"
node cli.js add --title "주간 회의 - 2/17" --due "2026-02-17T09:00:00+09:00"
...
Extract action items from meeting notes and suggest reminders. Pure text processing - no Reminders app access required.
English:
Korean (한국어):
Japanese (日本語):
Chinese (中文):
# From inline text
node skills/mac-reminders-agent/cli.js parse --text "Q1 report due by March 20. John: prepare slides by Friday - URGENT" --locale en
# From a file
node skills/mac-reminders-agent/cli.js parse --file /path/to/meeting_notes.txt --locale ko
--text (required if no --file): Meeting notes as a string--file (required if no --text): Path to a text file containing meeting notes--locale (optional): Language for pattern matching (en, ko, ja, zh). Auto-detected if omitted.{
"ok": true,
"locale": "en",
"labels": {},
"items": [
{
"title": "Submit Q1 report",
"due": "2026-03-20T17:00:00+09:00",
"priority": "high",
"confidence": "high",
"source_line": "Q1 report due by March 20 - URGENT"
}
]
}
| Language | Action Keywords | Date Patterns | Priority Signals |
|---|---|---|---|
| English | TODO:, action item:, by [date], deadline:, need to | by March 20, tomorrow, next Friday | urgent, important, nice to have |
| Korean | ~까지, ~해야, ~할 것, 담당:, 기한: | 3월 15일, 내일, 다음 주 | 긴급, 중요, 나중에 |
| Japanese | ~まで, ~する必要, 担当:, 期限: | 3月15日, 明日, 来週 | 緊急, 重要, できれば |
| Chinese | ~之前, ~需要, 负责:, 截止: | 3月15日, 明天, 下周 | 紧急, 重要, 如果可以 |
parse to get suggested items[]add --title ... --due ... --priority ...The parse command only suggests. Claude MUST call add explicitly for each approved item.
Do NOT auto-add without user confirmation.
English:
Korean:
Japanese:
When automatic integration fails, offer alternatives in user's language.
| Requirement | Details |
|---|---|
| OS | macOS only (tested on macOS 13+) |
| Node.js | v18.0.0 or higher |
| npm | Included with Node.js |
| Swift | Included with Xcode Command Line Tools |
# 1. Install Xcode Command Line Tools (if not already installed)
xcode-select --install
# 2. Install npm dependencies
cd $SKILL_DIR
npm install
This skill requires access to the Reminders app. On first use:
Note: The Swift EventKit bridge (
eventkit-bridge.swift) is compiled on-the-fly when needed. No manual compilation required.
locales.json (en, ko, ja, zh)lists [--locale XX] — view all reminder lists (calendars)list --scope today|week|all [--list "NAME"] [--query "KEYWORD"] [--locale XX] — returns items with id, list, priority fieldsadd --title ... [--due ...] [--priority high|medium|low|none] [--list "NAME"] [--repeat daily|weekly|monthly|yearly] [--interval N] [--repeat-end YYYY-MM-DD] [--locale XX]edit --id ID [--title ...] [--due ...] [--note ...] [--priority ...] [--locale XX]delete --id ID [--locale XX]complete --id ID [--locale XX]--repeat for recurring reminders (creates single reminder with repeat rule)parse --text "..." [--file path] [--locale XX] — extract action items and suggest reminders--locale parameter