Install
openclaw skills install @paulkennethkent/hybrid-training-planRead and update the user's own Hybrid Training Plan account (hybridtrainingplan.app) — today's and upcoming sessions with suggested weights, log strength sets, runs and rows, mark days complete or skipped, read and set exercise 1RMs. Use only when the user asks about their Hybrid Training Plan, thei
openclaw skills install @paulkennethkent/hybrid-training-planRead the user's plan and record their training at hybridtrainingplan.app.
export HYBRID_API_KEY="htp_..."
Run the helper as bash scripts/htp.sh <command> from this skill's directory.
A key can read the plan and record training — nothing else. It cannot create keys, change account details, delete anything, spend credits, generate or rewrite plans, or touch billing; those return 403 and are done in the app. Revoke a key any time in Account → Agent Skills.
Every command sends one HTTPS request to api.hybridtrainingplan.app (or HYBRID_API_URL) and nowhere else.
HYBRID_API_KEY is a secret. Never print, echo, log or repeat it, and never ask the user to paste it into chat.distanceUnit tells you how to talk back to them.Read-only
| Command | Use |
|---|---|
today | Today's sessions: ids, exercises, work sets, suggested kg, run steps |
upcoming | Same for the coming days |
dashboard | Current plan id, the user's plans, today's day status |
day <date> <planId> | One day in full, straight from the plan |
session-logs <planId> <date> | What is already logged for a day |
maxes | Stored 1RMs |
Write — changes the live account, confirm first (see Rules)
| Command | Changes |
|---|---|
log-session '<json>' | Saves or replaces one session's log, completes the day, may raise stored 1RMs |
complete <date> <planId> | Marks the whole day completed |
skip <date> <planId> | Marks the whole day skipped |
set-max "<exercise>" <kg> | Overwrites that exercise's 1RM |
state in today/upcoming other than ok explains an empty list: no_plan, building, no_access (subscription lapsed), paused, ended.
Take planId, sessionId, dayDate, sessionType from today. Logging any content completes the day automatically — no separate complete call needed.
Strength — one entry per set, setIndex from 0 per exercise, exerciseName/exerciseKey copied from today:
bash scripts/htp.sh log-session '{"planId":"…","sessionId":"…","dayDate":"2026-10-11","sessionType":"strength",
"strengthSets":[
{"exerciseName":"Back Squat","exerciseKey":"back_squat","setIndex":0,"reps":5,"weightKg":100},
{"exerciseName":"Back Squat","exerciseKey":"back_squat","setIndex":1,"reps":5,"weightKg":100}]}'
For a timed hold use durationSeconds, for a carry or sled distanceMetres, in place of reps.
Run: "runDistanceKm": 8.2, "runDurationSeconds": 2580. Row: "rowDistanceM": 2000, "rowDurationSeconds": 480. Circuits: "roundsCompleted": 4. Any session: "notes": "…".
Logging the same sessionId again replaces that log. A good set also raises the stored 1RM on its own; use set-max only when the user states a max.
See references/api.md for request and response shapes.