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

  1. Start a chat

    Your assistant reads the PWF guide, so it knows how to write workouts any PWF app can play.

  2. Describe your workout

    How long, what kit, how hard, what to focus on. Ask for changes as you go: “shorter rests”, “swap the burpees”.

  3. 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:

Make your assistant fluent in PWF

The button above works in any chat. To have PWF ready every time, add it to your assistant.

Claude and ChatGPT

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.

Download the skill

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.

Coming soon

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.

Any assistant

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.