Use this skill when the user asks to sync, rebuild, or validate Garmin training data in garmin_tracking.json (workspace root).
playwright-core must be available in the runtime where the skill executes.MODULE_NOT_FOUND: playwright-core, install it in the active workspace:npm install playwright-core
2026-02-01.lastUpdate, planName, currentWeek, summary, history, upcoming, recurring_activities.summary.to must always be today (YYYY-MM-DD).typedistanceKmdurationSecavgPaceSecPerKmavgHrBpmcaloriessourceId2026-02-01 onward./app/training-plan) and refresh currentWeek + upcoming.tabs -> focus -> fresh snapshot) before escalation.Use this strict order:
sync_training_plan.mjs supports:
--auth-source auto (default): use existing browser session; if signed out and credentials are available, try credentials login.--auth-source browser: never use credentials; require manual login.--auth-source credentials: require credentials and attempt login directly.If the user is signed out, guide with explicit steps:
https://connect.garmin.com/signin/ -> https://connect.garmin.com/app/training-plan -> rerun sync.
Notes:
If browser sign-in is not possible, credentials mode can be used as fallback.
Rules:
MEMORY.md, garmin_tracking.json, logs, or skill files.garmin_tracking.json.planName and recurring_activities.history from Garmin activities (>= control start date).summary from rebuilt history.summary.to to today and lastUpdate to current timestamp.Use the bundled script for schema normalization and summary recomputation:
python3 {baseDir}/scripts/reconcile_tracking.py --file garmin_tracking.json --write
Check-only mode:
python3 {baseDir}/scripts/reconcile_tracking.py --file garmin_tracking.json
Use the bundled script to refresh currentWeek and upcoming from Garmin Training Plan:
node {baseDir}/scripts/sync_training_plan.mjs --file garmin_tracking.json --write
Credentials fallback example (last resort):
node {baseDir}/scripts/sync_training_plan.mjs \
--auth-source credentials \
--garmin-email "user@example.com" \
--garmin-password "***" \
--file garmin_tracking.json \
--write
CDP resolution priority:
--cdp-url (explicit override)browser.defaultProfile -> browser.profiles..cdpUrl ) from --config pathhttp://127.0.0.1:)Override example:
node {baseDir}/scripts/sync_training_plan.mjs --config data/config/openclaw.json --url "https://connect.garmin.com/app/training-plan" --file garmin_tracking.json --write
Run parser fixtures:
node --test {baseDir}/scripts/__tests__/training_plan_parser.test.mjs
nutritionLog key exists.history[].activities[] are canonical.summary.to equals today.共 1 个版本