{"skill":{"slug":"mac-reminder-bridge","displayName":"Mac Reminder Bridge","summary":"Manage macOS Reminders.app from Docker via HTTP bridge. Use when user says: set/add/create a reminder, remind me to X, cancel/delete a reminder, mark reminde...","description":"---\nname: mac-reminder-bridge\ndescription: \"Manage macOS Reminders.app from Docker via HTTP bridge. Use when user says: set/add/create a reminder, remind me to X, cancel/delete a reminder, mark reminder done/complete, update/edit a reminder, show/list my reminders. Requires listener.py running on Mac at port 5000.\"\nmetadata:\n  {\n    \"openclaw\": {\n      \"emoji\": \"🔔\",\n      \"requires\": { \"bins\": [\"curl\"] }\n    }\n  }\n---\n\n# Skill: Mac Reminder Bridge\n\nControl macOS Reminders.app from inside Docker via HTTP.\nBase URL: `http://host.docker.internal:5000`\n\n---\n\n## When to use\n\n| User intent | Endpoint |\n|-------------|----------|\n| \"Remind me to / Set a reminder / Add a reminder\" | POST `/add_reminder` |\n| \"Cancel / Delete my reminder to ...\" | POST `/delete_reminder` |\n| \"Done with / Mark ... as complete\" | POST `/complete_reminder` |\n| \"Unmark / reopen reminder ...\" | POST `/complete_reminder` with `completed:false` |\n| \"Update / Change / Edit my reminder ...\" | POST `/update_reminder` |\n| \"What are my reminders / Show reminders\" | GET `/list_reminders` |\n| \"What lists do I have\" | GET `/list_lists` |\n\n---\n\n## POST /add_reminder\n\n```json\n{\n  \"task\":      \"Buy groceries\",\n  \"list\":      \"Shopping\",\n  \"due\":       \"2025-12-31 09:00\",\n  \"remind_at\": \"2025-12-31 08:50\",\n  \"notes\":     \"Get milk and eggs\",\n  \"priority\":  \"high\"\n}\n```\n\n- `task` required; all others optional\n- `due` / `remind_at` format: `YYYY-MM-DD HH:MM`\n- `priority`: `none` | `low` | `medium` | `high`\n- `list`: leave empty to use the default list\n\n---\n\n## POST /update_reminder\n\n```json\n{\n  \"task\":         \"Buy groceries\",\n  \"fuzzy\":        false,\n  \"new_task\":     \"Buy organic groceries\",\n  \"new_due\":      \"2025-12-31 10:00\",\n  \"new_notes\":    \"Also get juice\",\n  \"new_priority\": \"medium\"\n}\n```\n\n- `task` identifies which reminder to update\n- Set `new_due` to `\"\"` to clear the due date\n- Only include the fields you want to change\n\n---\n\n## POST /delete_reminder\n\n```json\n{ \"task\": \"Buy groceries\", \"fuzzy\": false, \"list\": \"\" }\n```\n\n- `fuzzy: true` → match by \"contains\" (useful when unsure of exact wording)\n- `list`: leave empty to search ALL lists\n\n---\n\n## POST /complete_reminder\n\n```json\n{ \"task\": \"Buy groceries\", \"completed\": true, \"fuzzy\": false }\n```\n\n- `completed: false` → un-check / reopen the reminder\n\n---\n\n## GET /list_reminders\n\n```\nGET /list_reminders\nGET /list_reminders?list=Shopping\nGET /list_reminders?completed=true\nGET /list_reminders?completed=all\n```\n\nReturns structured JSON with task, due, notes, priority, completed, list.\n\n---\n\n## GET /list_lists\n\nReturns all lists with pending/total counts and the default list name.\n\n---\n\n## GET /health\n\nCheck if listener is running and has Reminders permission.\n\n---\n\n## Agent step-by-step\n\n### Adding a reminder\n1. Extract: `task` (required), `due`, `remind_at`, `notes`, `priority`, `list`\n2. POST `/add_reminder`\n3. Confirm: \"✅ Reminder set: <task>\" + due date if applicable\n\n### Deleting a reminder\n1. Extract task name; use `fuzzy: true` if unsure of exact wording\n2. POST `/delete_reminder`\n3. Check `count`: if 0, say \"⚠️ No reminder found matching '<task>'\"\n\n### Updating a reminder\n1. Extract current name and what to change\n2. POST `/update_reminder` with only the changed fields\n3. Confirm what was changed\n\n### Listing reminders\n1. GET `/list_reminders` (add `?list=X` if user specifies a list)\n2. Format results clearly, grouping by list if multiple lists present\n\n### Health check before important ops\n```bash\ncurl http://host.docker.internal:5000/health\n```\n\n### Auth header (if BRIDGE_SECRET is set)\n```\nX-Bridge-Secret: <secret>\n```\n","tags":{"latest":"2.1.2"},"stats":{"comments":0,"downloads":603,"installsAllTime":23,"installsCurrent":0,"stars":0,"versions":3},"createdAt":1773395628484,"updatedAt":1778491880948},"latestVersion":{"version":"2.1.2","createdAt":1773398780214,"changelog":"Added cloud deployment documentation and IP allowlist configuration examples.","license":"MIT-0"},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"masteryuuuu","userId":"s1728cxwqyz8by9pzckv9y37eh83q3m1","displayName":"MasteRyuuuu","image":"https://avatars.githubusercontent.com/u/37771932?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089868974}}