← Back to Skills Marketplace
masteryuuuu

Mac Reminder Bridge

by MasteRyuuuu · GitHub ↗ · v2.1.2 · MIT-0
cross-platform ✓ Security Clean
242
Downloads
0
Stars
0
Active Installs
3
Versions
Install in OpenClaw
/install mac-reminder-bridge
Description
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...
README (SKILL.md)

Skill: Mac Reminder Bridge

Control macOS Reminders.app from inside Docker via HTTP. Base URL: http://host.docker.internal:5000


When to use

User intent Endpoint
"Remind me to / Set a reminder / Add a reminder" POST /add_reminder
"Cancel / Delete my reminder to ..." POST /delete_reminder
"Done with / Mark ... as complete" POST /complete_reminder
"Unmark / reopen reminder ..." POST /complete_reminder with completed:false
"Update / Change / Edit my reminder ..." POST /update_reminder
"What are my reminders / Show reminders" GET /list_reminders
"What lists do I have" GET /list_lists

POST /add_reminder

{
  "task":      "Buy groceries",
  "list":      "Shopping",
  "due":       "2025-12-31 09:00",
  "remind_at": "2025-12-31 08:50",
  "notes":     "Get milk and eggs",
  "priority":  "high"
}
  • task required; all others optional
  • due / remind_at format: YYYY-MM-DD HH:MM
  • priority: none | low | medium | high
  • list: leave empty to use the default list

POST /update_reminder

{
  "task":         "Buy groceries",
  "fuzzy":        false,
  "new_task":     "Buy organic groceries",
  "new_due":      "2025-12-31 10:00",
  "new_notes":    "Also get juice",
  "new_priority": "medium"
}
  • task identifies which reminder to update
  • Set new_due to "" to clear the due date
  • Only include the fields you want to change

POST /delete_reminder

{ "task": "Buy groceries", "fuzzy": false, "list": "" }
  • fuzzy: true → match by "contains" (useful when unsure of exact wording)
  • list: leave empty to search ALL lists

POST /complete_reminder

{ "task": "Buy groceries", "completed": true, "fuzzy": false }
  • completed: false → un-check / reopen the reminder

GET /list_reminders

GET /list_reminders
GET /list_reminders?list=Shopping
GET /list_reminders?completed=true
GET /list_reminders?completed=all

Returns structured JSON with task, due, notes, priority, completed, list.


GET /list_lists

Returns all lists with pending/total counts and the default list name.


GET /health

Check if listener is running and has Reminders permission.


Agent step-by-step

Adding a reminder

  1. Extract: task (required), due, remind_at, notes, priority, list
  2. POST /add_reminder
  3. Confirm: "✅ Reminder set: \x3Ctask>" + due date if applicable

Deleting a reminder

  1. Extract task name; use fuzzy: true if unsure of exact wording
  2. POST /delete_reminder
  3. Check count: if 0, say "⚠️ No reminder found matching '\x3Ctask>'"

Updating a reminder

  1. Extract current name and what to change
  2. POST /update_reminder with only the changed fields
  3. Confirm what was changed

Listing reminders

  1. GET /list_reminders (add ?list=X if user specifies a list)
  2. Format results clearly, grouping by list if multiple lists present

Health check before important ops

curl http://host.docker.internal:5000/health

Auth header (if BRIDGE_SECRET is set)

X-Bridge-Secret: \x3Csecret>
Usage Guidance
This skill appears to be what it says: a host-side listener you run on your Mac plus client calls from inside Docker. Before installing/running: 1) Only run listener.py on a Mac you control (it uses osascript to access Reminders and will require macOS permission). 2) Secure the bridge: set BRIDGE_SECRET and/or restrict BRIDGE_ALLOWED_IPS to the specific Docker/host IPs you trust (do not set 0.0.0.0/0 without a secret). 3) Be aware logs are written next to the script (reminder_bridge.log). 4) If you run the agent in a remote/cloud environment, ensure the cloud IP is explicitly added to the allowlist or use BRIDGE_SECRET — otherwise the bridge could be reachable from unintended hosts. If you want more assurance, review the full listener.py AppleScript calls yourself before running.
Capability Analysis
Type: OpenClaw Skill Name: mac-reminder-bridge Version: 2.1.2 The skill bundle provides a legitimate HTTP bridge to manage macOS Reminders from a Dockerized environment. It includes proactive security measures such as IP allowlisting, optional shared-secret authentication (BRIDGE_SECRET), and input sanitization in listener.py (as_escape function) to prevent AppleScript injection. No evidence of data exfiltration, malicious persistence, or harmful prompt injection was found.
Capability Assessment
Purpose & Capability
Name/description claim to control macOS Reminders from Docker; the package contains a host-side Python listener (listener.py) that uses osascript to talk to Reminders and a client helper (send_reminder.sh) plus SKILL.md that instructs the agent to call http://host.docker.internal:5000. Required binary (curl) matches the client-side usage. Nothing in the files asks for unrelated cloud credentials or extra system access.
Instruction Scope
SKILL.md is narrowly scoped: it instructs the agent to call specific REST endpoints and mentions an optional X-Bridge-Secret header. The included listener.py runs only AppleScript (osascript) to manipulate Reminders and exposes health and CRUD endpoints. Note: the listener must be run on the macOS host and will prompt for Reminders permission; it writes logs to the repo directory. No instructions attempt to read unrelated host files or exfiltrate data externally.
Install Mechanism
No automated install spec is provided (instruction-only). README instructs cloning and running pip install -r requirements.txt and then running listener.py on the Mac — a standard, transparent manual setup. There are no downloads from obscure URLs or extracted archives in an automated install step.
Credentials
The skill package itself does not require any environment variables for the agent side (only curl). The host listener optionally reads BRIDGE_SECRET, BRIDGE_PORT, BRIDGE_ALLOWED_IPS, and DRY_RUN which are appropriate for a networked bridge. One operational caveat: the default ALLOWED_IPS includes 172.0.0.0/8 (useful for Docker networking) — if misconfigured (e.g., set to 0.0.0.0/0 without a secret) it could expose the bridge. The optional BRIDGE_SECRET is an appropriate mitigation but is not required by the skill.
Persistence & Privilege
The skill is not always-enabled and does not request elevated platform privileges beyond running a user-level Python listener on the Mac. Autonomous invocation by the agent is normal here; no skills-wide persistent/global privilege escalation is requested.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install mac-reminder-bridge
  3. After installation, invoke the skill by name or use /mac-reminder-bridge
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v2.1.2
Added cloud deployment documentation and IP allowlist configuration examples.
v2.1.1
Fixed Python compatibility issues for older versions (pre-3.10).
v2.1.0
Initial GitHub-linked release with security hardening and bilingual docs.
Metadata
Slug mac-reminder-bridge
Version 2.1.2
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 3
Frequently Asked Questions

What is Mac Reminder Bridge?

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... It is an AI Agent Skill for Claude Code / OpenClaw, with 242 downloads so far.

How do I install Mac Reminder Bridge?

Run "/install mac-reminder-bridge" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Mac Reminder Bridge free?

Yes, Mac Reminder Bridge is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Mac Reminder Bridge support?

Mac Reminder Bridge is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Mac Reminder Bridge?

It is built and maintained by MasteRyuuuu (@masteryuuuu); the current version is v2.1.2.

💬 Comments