Scan Report
10 /100
run-coach
Science-based running coach with HD visual training plans and Garmin sync
A legitimate running coach skill with well-documented capabilities. All external network access (Telegram Bot API, Garmin Connect) is declared. No hidden functionality, credential theft, or malicious patterns detected.
Safe to install
Pin the garminconnect library version in SKILL.md to avoid unexpected breakage. Consider explicitly declaring browser:READ for the Playwright-based screenshot pipeline.
Findings 3 items
| Severity | Finding | Location |
|---|---|---|
| Low | Playwright dependency not declared | training/screenshot.mjs:1 |
| Low | garminconnect version not pinned | SKILL.md:77 |
| Info | Telegram bot credentials transmitted to external API | training/send-album.mjs:18 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | READ | WRITE | ✓ Aligned | SKILL.md: 'pip install garminconnect'; garmin-sync.py writes to garmin/activitie… |
| Network | READ | READ | ✓ Aligned | SKILL.md declares Telegram bot and Garmin Connect usage; send-album.mjs:18 POSTs… |
| Shell | WRITE | WRITE | ✓ Aligned | SKILL.md instructs agent to use exec/bash for training/text-to-image.sh and node… |
| Environment | READ | READ | ✓ Aligned | SKILL.md declares GARMIN_EMAIL, GARMIN_PASSWORD, TELEGRAM_BOT_TOKEN, TELEGRAM_CH… |
| Browser | NONE | READ | ✓ Aligned | screenshot.mjs uses Playwright/chrome-headless-shell to screenshot HTML, used vi… |
2 findings
Medium External URL 外部 URL
https://api.telegram.org/bot$ training/send-album.mjs:18 Info Email 邮箱地址
[email protected] garmin/garmin-sync.py:37 File Tree
8 files · 31.6 KB · 920 lines Python 2f · 473L
Markdown 2f · 228L
JavaScript 2f · 116L
Shell 2f · 103L
├─
▾
garmin
│ ├─
garmin-query.py
Python
│ └─
garmin-sync.py
Python
├─
▾
training
│ ├─
screenshot.mjs
JavaScript
│ ├─
send-album.mjs
JavaScript
│ ├─
send-plan.sh
Shell
│ └─
text-to-image.sh
Shell
├─
MEMORY.md
Markdown
└─
SKILL.md
Markdown
Dependencies 2 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
garminconnect | * | pip | No | Version not pinned — minor maintenance risk |
playwright-core | * | npm | No | Assumed pre-installed in /app/node_modules/; not explicitly listed in SKILL.md |
Security Positives
✓ All shell execution (bash, node -e) is explicitly declared in SKILL.md agent instructions
✓ Telegram Bot API is the only external network destination — no suspicious IPs or URLs
✓ Garmin Connect is a known, legitimate third-party API — not a hidden exfiltration channel
✓ Garmin credentials are used only for Garmin Connect authentication and immediately discarded
✓ No base64 encoding, obfuscation, eval(), or dynamic code generation patterns
✓ No access to ~/.ssh, ~/.aws, .env, or other sensitive host paths
✓ Playwright uses chrome-headless-shell (not full Chrome), avoiding unnecessary attack surface
✓ Token caching uses .garth file in workspace — not credential stores
✓ All file writes are scoped to the skill's own garmin/ and training/ directories