Workout Claw
Log workouts, track progress, compute PRs, edit/delete sessions via a local CLI. Local-first, JSON storage.
Denys
@dsdevq
Install
$ openclaw skills install @dsdevq/workout-clawworkout-claw
Local-first gym workout tracker. Plain-JSON storage at ~/.workout-claw/. Invokable as a CLI by an agent — no MCP server, no daemon.
Setup
This skill ships a SKILL.md manifest via ClawHub, but the workout-claw CLI binary lives on npm. Both layers are required.
openclaw skills install workout-claw # installs this SKILL.md
npm install -g workout-claw # installs the CLI binary
Requires Node >= 20. Once both are installed, the CLI is on PATH and other skills can invoke it.
When to invoke
User describes a workout session, asks about progress, or wants to see a PR. Examples that should trigger this skill:
- "I just did chest day — bench 4x10 at 60, incline DB 4x12 at 20, triceps 4x12 at 40"
- "Log today's workout"
- "What's my bench PR?"
- "Show my back workouts from the last 4 weeks"
- "What did I do at the gym today?"
How to invoke
Use the workout-claw CLI via Bash. All commands output YAML to stdout, errors to stderr.
Log a workout
workout-claw log "bench 4x10@60, incline-db-press 4x12@20, triceps-pushdown 4x12@40"
Optional flags:
--muscle <group>—back | legs | chest | shoulders | arms | core | full | cardio | other. If omitted, inferred from weekday (Mon=back, Wed=legs, Fri=chest per~/.life/domains/health.md).--cardio "<entry>"— e.g."incline-walk 20min @4.5kmh i6"(minutes, speed kmh, incline)--note "<text>"— free-text note--date YYYY-MM-DD— override date--time HH:MM— override time
Input syntax
<exercise> <sets>x<reps>@<weight> per entry, comma-separated for multiple exercises.
- Multi-word exercise names use dashes:
incline-db-press,barbell-row - Bodyweight:
pullups 4x10@bw - All weights in kg
Query history
workout-claw history --muscle chest --weeks 4
workout-claw history --exercise bench
Get a PR
workout-claw pr bench
Returns best estimated 1RM via Epley formula: weight × (1 + reps/30).
Cross-day muscle volume (v0.3+)
workout-claw volume --muscle back --weeks 4
workout-claw volume --muscle chest --weeks 8
Aggregates volume per exercise, not per session. Pullups on chest day count toward back volume; triceps-pushdown counts toward arms. Returns total kg lifted, sets, reps, days trained, and a per-date breakdown.
This is the right query for tracking weekly volume per muscle group — far more accurate than history --muscle X which is session-grain.
Summary of today
workout-claw summary
workout-claw summary --date 2026-05-15
Most recent session
workout-claw last
Returns the latest session across all dates — useful for "what did I do at the gym?" without naming a date.
Delete a session
workout-claw delete <session-id>
Session IDs come from the id field in any log / summary / last output. No confirmation prompt — the CLI is non-interactive by design.
Edit a session
workout-claw edit <session-id>
Opens the session JSON in $EDITOR (defaults to vi). On save: validates JSON, refuses to save if the id was changed. On parse error: original session unchanged. Useful for fixing typos in exercise names or set counts without a full delete + re-log.
Agent note: edit requires an interactive editor, so the agent should not invoke this in a Telegram round-trip. Instead, when a user asks to fix a logged workout via Telegram, prefer delete + log again, or hand back the session ID and tell the user to run workout-claw edit <id> from their terminal.
Data location
~/.workout-claw/logs/<date>.json— one JSON file per day, array of sessions- Schema: see
src/lib/types.tsin the workout-claw repo
Notes for the agent
- After logging, relay the YAML summary back to the user in a readable form (don't dump raw YAML)
- If the user names an exercise that doesn't match the dash-naming convention, normalize before invoking (e.g. "incline DB press" →
incline-db-press) - Session-level
--muscleis inferred from weekday — only set explicitly if the user names a non-standard split (e.g. arm day on a Tuesday). Per-exercise muscle tags are inferred automatically at log time via name lookup (pullups→back, bench→chest, etc.), so no extra input is needed. - When user describes cardio separately, use
--cardioflag. When they describe both lifting + cardio in one breath, use both. - For "how much back/chest/leg volume?" questions, prefer
volume --muscle Xoverhistory --muscle X— volume aggregates per-exercise, history filters per-session.
Related skills
Section 11: Endurance Training Coach (Intervals.icu)
@crankaddictEvidence-based endurance coaching protocol (v11.35). Use when analyzing training data, reviewing sessions, generating pre/post-workout reports, planning work...
healthcheck
@stellarhold170ntTrack water and sleep with JSON file storage
Coach Skill
@shiv19Create personalized triathlon, marathon, and ultra-endurance training plans. Use when athletes ask for training plans, workout schedules, race preparation, or coaching advice. Can sync with Strava to analyze training history, or work from manually provided fitness data. Generates periodized plans with sport-specific workouts, zones, and race-day strategies.
HealthKit Sync
@mneves75iOS HealthKit data sync CLI commands and patterns. Use when working with healthsync CLI, fetching Apple Health data (steps, heart rate, sleep, workouts), pairing iOS devices over local network, or understanding the iOS Health Sync project architecture including mTLS certificate pinning, Keychain storage, and audit logging.
Strava
@hith3shTrack and manage Strava workouts, athlete stats, routes, segments, and club activities via the Strava API. Use this skill when users want to log activities,...
unisound-health-risk-assessment
@unisound-llm体检健康风险评估。基于体检报告对心脑血管、糖代谢、肿瘤、代谢综合征等多维度健康风险进行分级,生成含时间节点的个性化健康管理方案(JSON + 健康风险报告)。