iwatch-swim-tracker

ReviewAudited by ClawScan on May 10, 2026.

Overview

This swim tracker is mostly purpose-aligned, but it stores and reuses workout history and has unsafe local file/command handling that could affect a user's files or trend reports.

Before installing, clear or separate the bundled swim_data records, confirm where your health metrics will be stored, and avoid letting the agent save data until the date/path validation and JSON command-passing issues are fixed.

Findings (4)

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

Trend analysis may include someone else's preloaded swim history, producing misleading comparisons or advice.

Why it was flagged

The skill package includes real-looking workout and heart-rate records under the active swim_data directory. Since the history query code reads that directory for trend analysis, a new user's reports can be influenced by bundled data that is not disclosed as sample-only.

Skill content
"date": "2026-03-13", ... "avg_heart_rate": 158, "max_heart_rate": 185
Recommendation

Ship examples outside the live data directory, start with an empty swim_data store for users, or clearly separate sample data from user history.

What this means

A malformed or adversarial date value could cause the save helper to create or overwrite JSON files outside the intended workout-data folder.

Why it was flagged

The model-extracted date controls path components and the output filename without enforcing the documented YYYY-MM-DD format or checking that the resolved path stays inside swim_data.

Skill content
date_str = data["date"]
year, month, _ = date_str.split("-")
...
file_path = dir_path / f"{date_str}.json"
...
file_path.write_text(...)
Recommendation

Validate dates with a strict YYYY-MM-DD parser, reject slashes/absolute paths, and verify the resolved output path remains under DATA_DIR before writing.

What this means

A crafted screenshot or extracted value could make the save command fail or, in the worst case, run unintended shell text.

Why it was flagged

The documented workflow places extracted JSON directly inside single quotes in a shell command. OCR/user-derived values containing apostrophes or shell metacharacters could break quoting or be interpreted unexpectedly if the agent runs it through a shell.

Skill content
python3 {baseDir}/scripts/extract_swim_data.py '<json_data>'
Recommendation

Pass JSON via stdin, a temporary file, or an argument-vector API instead of shell interpolation; also escape or validate all fields before command execution.

What this means

If the helper is used, the user may install whatever Pillow version is current from the package index.

Why it was flagged

An optional helper documents installing Pillow without a pinned version, while the registry requirements only declare python3. This is purpose-aligned image-processing support but leaves dependency provenance/versioning to the user.

Skill content
venv/bin/pip install Pillow
Recommendation

Declare the dependency in install metadata and pin a trusted Pillow version or provide a lockfile.