Mac Reminder Bridge

ReviewAudited by ClawScan on May 10, 2026.

Overview

The skill matches its stated purpose, but it gives an HTTP bridge authority to read and change macOS Reminders, with broad/default access controls and fuzzy delete behavior that users should review before installing.

Install only if you intentionally want OpenClaw/Docker to manage your macOS Reminders. Before use, set a BRIDGE_SECRET, keep port 5000 off public networks, narrow BRIDGE_ALLOWED_IPS, and require confirmation before fuzzy delete or update actions.

Findings (6)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Another process or container that can reach the bridge may be able to read, create, update, or delete reminders.

Why it was flagged

The bridge accepts reminder-management requests without a shared secret by default, relying on a broad IP allowlist. Because the skill exposes create/update/delete/list operations, weak default access control is a material concern if the service is reachable outside the intended container path.

Skill content
API_SECRET = os.environ.get("BRIDGE_SECRET", "") ... _raw_ips = os.environ.get("BRIDGE_ALLOWED_IPS", "172.0.0.0/8,127.0.0.1,::1")
Recommendation

Set BRIDGE_SECRET, narrow BRIDGE_ALLOWED_IPS to the exact trusted Docker/host addresses, and do not expose port 5000 to untrusted networks.

What this means

A vague delete request could remove the wrong reminder, or multiple reminders, especially across several lists.

Why it was flagged

The delete workflow encourages fuzzy matching across all lists when unsure, but the instructions do not require showing matches or asking for confirmation before deletion.

Skill content
- `fuzzy: true` → match by "contains" ... - `list`: leave empty to search ALL lists
Recommendation

Require exact matching or list the matching reminders and ask the user to confirm before delete, complete, or update operations.

What this means

The running listener can act on the user's Reminders app with the permission granted by macOS.

Why it was flagged

The bridge needs host-level permission to macOS Reminders, which is expected for the purpose but gives the listener delegated access to the user's reminder data.

Skill content
On first run, macOS will prompt you to grant terminal/IDE permission to access Reminders. Please allow this.
Recommendation

Grant the permission only if you trust the listener code and revoke it in macOS privacy settings if you stop using the bridge.

What this means

Requests to the bridge cause AppleScript to run on the Mac under the user's permissions.

Why it was flagged

The bridge executes generated AppleScript through osascript to control Reminders. This is central to the stated purpose, and the visible code includes escaping and a timeout, but it is still host-side code execution.

Skill content
result = subprocess.run(["osascript", "-e", script], capture_output=True, text=True, timeout=15)
Recommendation

Keep the listener local and authenticated, and review any future code changes that alter AppleScript generation.

What this means

Users have less registry-level provenance information for code that will run on the Mac host.

Why it was flagged

The package provenance and installation path are not strongly documented in registry metadata, while the README instructs users to run local Python code.

Skill content
Source: unknown; Homepage: none; No install spec — this is an instruction-only skill.
Recommendation

Verify the files locally before running listener.py, and prefer a known source repository or signed release if available.

What this means

The Mac remains controllable through the reminder bridge until the listener is stopped.

Why it was flagged

The bridge is intended to run as a persistent local listener. This is disclosed and not hidden, but it continues to accept requests while left running.

Skill content
Run the listener:
```bash
python3 listener.py
```
Recommendation

Run the listener only when needed, monitor who can reach it, and stop the process when finished.