Strava Training Coach
Analysis
The artifacts match a Strava coaching and alerting skill, with expected but sensitive Strava access, local token storage, and Slack/Discord notifications.
Findings (5)
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.
Source: unknown ... No install spec — this is an instruction-only skill.
The skill has bundled scripts but no external source repository or install specification, so provenance is limited even though no suspicious install behavior is shown.
"schedule": {"kind": "every", "everyMs": 86400000}, "command": "python3 scripts/coach_check.py"The skill documents an optional daily scheduled run for ongoing monitoring, which is persistent behavior but is disclosed and purpose-aligned.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
scopes = 'read,activity:read' ... TOKEN_FILE = os.path.join(CONFIG_DIR, 'strava_tokens.json')
The OAuth flow requests Strava read/activity access and stores the resulting tokens locally for later API calls.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
sends smart alerts to Discord or Slack ... export DISCORD_WEBHOOK_URL=... / export SLACK_WEBHOOK_URL=...
Training alerts are intentionally sent to a user-configured third-party webhook, which may include workout, recovery, heart-rate, or readiness information.
STATE_FILE = os.path.join(CONFIG_DIR, 'coach_state.json') ... self.weekly_mileage_history: List[Dict] = []
The coach persists local state and weekly mileage history across runs so future checks can use prior context.
