Apple Watch Health Sync

SuspiciousAudited by ClawScan on May 10, 2026.

Overview

The skill is aligned with Apple Watch health syncing, but it sets up a persistent local health-data server with elevated/forceful system actions that should be reviewed first.

Review setup.py before running it. Only install if you are comfortable running a persistent local server for Apple Health data; avoid elevated startup privileges, do not force-kill unknown processes, keep the API key private, restrict metrics to what you need, and make sure you know how to stop the service and delete stored data.

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.

ConcernHigh Confidence
ASI10: Rogue Agents
What this means

A local server handling health data may keep running after setup or after you stop using the agent.

Why it was flagged

The skill requires an at-login background service that is kept alive and continues operating after the agent session.

Skill content
The server MUST run independently of any agent session... Register-ScheduledTask -TaskName "HealthSyncServer"... -RunLevel Highest... <key>KeepAlive</key><true/>
Recommendation

Only enable persistence with explicit approval; provide and use clear stop, disable, and uninstall steps; run it as a normal user where possible.

What this means

If the server or its dependencies are compromised, elevated execution can increase the damage beyond the skill's stated purpose.

Why it was flagged

The Windows setup asks for highest run level without showing why elevated privilege is needed for a local Flask health-sync server.

Skill content
Register-ScheduledTask -TaskName "HealthSyncServer" -Action $action -Trigger $trigger -RunLevel Highest -Force
Recommendation

Run the service under the normal user account unless a specific, reviewed admin-only requirement exists.

What this means

This could stop another local application or service without the user understanding what was killed.

Why it was flagged

The instructions tell the agent to forcefully terminate any process using the port, which could be unrelated to this skill.

Skill content
Before starting, kill anything already on port 3001... Stop-Process -Id $_ -Force ... lsof -ti:3001 | xargs kill -9
Recommendation

Identify the process first, ask for user approval, and prefer changing ports over force-killing unknown processes.

What this means

Running setup may pull changing third-party code into the environment and may bypass network controls the user expected to apply.

Why it was flagged

Setup installs an unpinned Python package and fetches an unpinned GitHub branch, while explicitly removing proxy configuration for those network operations.

Skill content
subprocess.check_call([sys.executable, "-m", "pip", "install", "flask"]) ... REPO_ZIP = "https://github.com/HealthyApps/health-auto-export-server/archive/refs/heads/main.zip" ... env.pop(k, None) ... ProxyHandler({})
Recommendation

Pin dependencies and commit hashes, avoid bypassing proxy settings, and disclose all network downloads in the install metadata.

What this means

The local skill directory can accumulate sensitive health history that may be readable by other local users or backups.

Why it was flagged

The skill is designed to collect broad health categories and store received records as local JSONL files.

Skill content
"Health Metrics (all)" ... "Sleep Analysis" ... "Blood Oxygen Saturation" ... "Blood Pressure" ... "Blood Glucose" ... filepath = category_dir / f"{name}.jsonl"
Recommendation

Choose the minimum needed metrics, protect the data directory, and define retention/deletion steps for stored health data.

What this means

Anyone who obtains the API key and can reach the service could interact with the health data API.

Why it was flagged

The generated local web API allows cross-origin requests and relies on a shared API key for access to health data endpoints.

Skill content
response.headers["Access-Control-Allow-Origin"] = "*" ... response.headers["Access-Control-Allow-Headers"] = "Content-Type, api-key" ... return request.headers.get("api-key", "") == get_api_key()
Recommendation

Use trusted networks only, keep the API key private, rotate it if exposed, and consider firewall or HTTPS protections for LAN use.