Workouts your AI can write and any app can play.
The Portable Workout Format (PWF) is an open format for workouts. Describe a workout to Claude or ChatGPT in plain words, then play it with timers, share it, and ask for changes.
The button opens a new chat with a short prompt that points your assistant at the PWF guide. The prompt is copied too, in case it isn’t filled in. Using another assistant? Copy the prompt and paste it in.
How it works
-
Start a chat
Your assistant reads the PWF guide, so it knows how to write workouts any PWF app can play.
-
Describe your workout
How long, what kit, how hard, what to focus on. Ask for changes as you go: “shorter rests”, “swap the burpees”.
-
Play it
Your assistant gives you a link that opens the workout in the PWF player, with timers, rounds and what’s next. Save it as a file to keep or share.
Things to ask for:
- 20-minute Tabata, no equipment
- Upper body, dumbbells, 3 × 8 to 12
- 12-minute EMOM: swings, then burpees
- 6 × 400 m run repeats, 90 s recovery
- Beginner full body with a warm-up and stretch
- Group class: 6 stations, 45 on, 15 off
Make your assistant fluent in PWF
The button above works in any chat. To have PWF ready every time, add it to your assistant.
PWF skill
A skill teaches your assistant PWF and gives it scripts that check each workout and build the link to play it. The same file works in Claude and ChatGPT.
Upload the zip in your assistant’s skills settings. In Claude Code, run /plugin install pwf --marketplace portableworkoutformat/pwf. If your version doesn’t know --marketplace, run /plugin marketplace add portableworkoutformat/pwf, then /plugin install pwf@pwf.
PWF connector
An MCP connector that checks workouts and plays them right inside the chat, so you don’t have to leave the conversation.
Follow progress on GitHub.
The guide
Point any AI at portableworkout.org/llms-full.txt: the whole format, worked examples and a checklist, written for AI assistants.
No AI? No problem
What a PWF workout looks like
A PWF workout is a JSON file. It says what to do, in what order, and when each step ends: after a time, a number of reps, a distance, or when you’re done.
Every app that plays PWF follows the same timing rules, so a workout plays the same everywhere. Exercises are plain names, so nothing breaks when an app doesn’t know one.
This is Tabata: eight rounds of 20 seconds on, 10 off.
{
"pwf": "0.1",
"name": "Tabata",
"plan": {
"type": "block",
"rounds": 8,
"skipLastRest": true,
"children": [
{
"type": "exercise",
"exercise": { "name": "Burpee" },
"end": { "time": 20 },
"rest": { "time": 10 }
}
]
}
}
For developers
PWF is an open draft (version 0.1), and comments are welcome. Add import and export to your app, and your users can bring workouts from any AI or any other PWF app.
- Specification (also as plain Markdown)
- JSON Schema
- Conformance suite: workouts and the exact timelines they must produce
llms.txtandllms-full.txtfor AI tools- Source, issues and discussions