Draft v0.1 - Open Workout Format
Workout Day Markdown
A readable, parseable format for describing one complete training day: strength work, hypertrophy blocks, supersets, EMOMs, AMRAPs, tests, warm-ups, finishers, and coaching notes.
The canonical specification now lives in the public open-workout-format GitHub repository. Set is the first intended consumer, not the owner of the format.
Prompt generator
Turn any workout text into a conversion prompt.
Paste a workout or program, then copy a generic AI prompt that targets Open Workout Format v0.1.
Set import code
Create one code for a whole program.
Paste Open Workout Markdown and copy a Set import code. Set will create one Saved Plan per workout day.
Examples
Real-world pattern examples without copied program content.
The public format repo includes synthetic examples for tempo strength, rehab calendar days, compact week sessions, max-rep tests, note-heavy press days, and composite AMRAP work.
Minimal shape
Markdown for people. Directives for software.
The document stays useful in a normal Markdown viewer, while `::: block` sections mark the exact work the athlete should complete during the day.
# Hypertrophy System S7.3
::: block id=part-3 name="Lower Body" kind=tri-set
complete: 4 rounds
rest: 1m30s-2m
rpe: 8
- Eccentric Nordic Hamstring Curl
reps: 5
tempo: "Slow the eccentric as much as possible"
- Leg Extension
reps: 10/side
tempo: 20X2
- Banded Clamshell
reps: 10/side
:::
Structure
One workout day is an ordered list of blocks.
A block is one unit of work: a lift prescription, circuit, interval piece, warm-up, test, or instruction section.
Required
- An H1 title for the workout day.
- At least one `::: block` directive for structured work.
- A `kind` attribute on each block.
Recommended
- `id` for stable local references.
- `name` for display labels.
- Field lines such as `sets`, `reps`, `rest`, `tempo`, `rpe`, `duration`, and `score`.
Block vocabulary
Broad enough for real programming.
Known kinds get specialized UI. Unknown kinds should be preserved instead of dropped, so source intent survives conversion.
Timed and scored work
AMRAP, EMOM, intervals, and tests fit the same model.
Completion style lives on the block. Exercise prescriptions stay as readable fields underneath each movement.
::: block id=conditioning name="AMRAP 35" kind=amrap duration=35m
score: rounds+reps
- Strict Chest-to-Bar
reps: 3
- Wall-Facing Handstand Hold
duration: 30s
- Clapping Push-ups
reps: 10
:::
::: block id=emom-12 name="EMOM 12" kind=emom duration=12m interval=1m
score: completed rounds
minute 1:
- Row
calories: 12
minute 2:
- Burpees
reps: 10
:::
Parser contract
Preserve the source. Normalize only when safe.
Values such as `10-12`, `10/side`, `65-70% 1RM`, `31X1`, `max`, and `1m30s-2m` can be understood by software, but the original string must remain available for rendering.
PDF, screenshot, coach text, spreadsheet, or manual Markdown.
The open, editable representation of what should be completed today.
Set can render structured instructions in review screens and the session runner.
Set clipboard transport
Set can wrap the open Markdown for compact sharing.
Raw Open Workout Markdown remains the canonical format. Set's clipboard code is only a transport envelope: `SET-OPEN-WORKOUT-v1:` followed by base64url-encoded JSON that carries the Markdown payload.
{"type":"set.openWorkout","version":1,"format":"open-workout-format","formatVersion":"0.1","payloadEncoding":"utf8","payload":"# Workout Day\n\n..."}
Adoption path
The first target is planned workouts.
Set will use Open Workout Format to improve imported workout-plan rendering before expanding toward broader conversion workflows. Future changes, examples, fixtures, and AI conversion work should happen in the GitHub repository so any coach, tool, or athlete can build against the same open specification.