garmin-connect-skill
Analysis
Review before installing: the Garmin health-sync purpose is coherent, but the artifacts weakly store your Garmin password, overstate encryption, and include Feishu messaging credential/data flows.
Findings (7)
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.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
认证成功后,凭证会加密保存到 `~/.garth/session.json`。
The user-facing instructions claim encrypted credential storage, but the included auth script comments that it uses base64 obfuscation, not encryption.
每1小时自动同步一次(systemd timer) ... `sudo systemctl enable garmin-sync.timer`
The skill documents a persistent background timer for recurring sync. This is disclosed and aligned with fitness data synchronization, but it keeps operating after setup.
garminconnect>=0.2.38 requests>=2.28.0 python-dateutil>=2.8.2 garth>=0.5.0
The dependency versions are lower-bound ranges rather than pinned versions or hashes, and these libraries participate in authentication and network data sync.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
password = sys.argv[2] ... encoded_password = base64.b64encode(password.encode()).decode() ... "password_encrypted": encoded_password
The script collects the Garmin account password from a command-line argument and saves it in a persistent session file using reversible base64, despite labeling the field as encrypted.
if not app_secret:
app_secret = "sXYUTk...S8PB"The Feishu setup path defaults to an embedded App Secret when the user leaves the prompt blank, then uses that credential to obtain a tenant access token and send messages.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
response = requests.post(webhook_url, json=data, timeout=10)
The webhook script sends generated health report text to a configured Feishu webhook. This is purpose-aligned for report delivery, but it transmits sensitive health summaries to a third-party chat endpoint.
单一SQLite数据库存储所有数据 ... 数据库:`~/.clawdbot/garmin/data.db`
The skill intentionally persists Garmin health data, including daily metrics, sleep data, workouts, and time-series data, in a local SQLite database for later reuse.
