workout.md — the routine format
A routine is plain markdown. It reads fine on screen, prints on a gym clipboard, and parses cleanly back into tensr. Four properties on purpose: machine readable, human readable, printable, and useful by itself.
Minimal example
---
title: Upper Hypertrophy — Push
---
# Day A
## Barbell Bench Press: 4x6-8 rest:150
## Incline Dumbbell Press: 3x8-12 rest:90
## Cable Crossover: 3x12-15 rest:60Grammar
| Piece | Shape | Notes |
|---|---|---|
| Frontmatter | --- … --- | YAML. title is optional (untitled routines get Finder-style numbering). |
| Day | # Day A / # Mon / # Push | One # heading per training day. Omit entirely for a single-workout routine. Labels like Mon or Push carry across to every surface. |
| Movement | ## Name: SETSxREPS | An h2 per movement. The name resolves against the open movement catalog (or stays a custom name). |
| Prescription | 4x8 · 3x8-12 | SETS x REPS. Reps may be a single number or a range. Never invent a prescription the source doesn't state. |
| Rest | rest:90 | Optional, seconds, after the prescription. |
| Notes / cues | plain text under a movement | Free prose (e.g. per leg, form cues) is preserved as movement notes. |
Supersets & multi-day
Superset notation (e.g. 4a/4b pairs) is preserved from the source. A multi-day split is just multiple # day sections in one file; a single workout omits the day headings and lists movements directly.
Complete example — every feature
A single .workout.md that exercises every part of the grammar andlints clean under workoutmd lint --strict (zero diagnostics, round-trips through fmt): frontmatter, a defaults 1RM table, weekday / ordinal / rest day normalization, supersets, modalities, every prescription and resistance kind, tempo, drop sets, stop conditions, AMRAP, bullet-form movements, notes, and images.
↓ kitchen-sink.workout.md · curl https://docs.tensr.fitness/examples/kitchen-sink.workout.md
What each part demonstrates
- Frontmatter —
version: 0.1(required for a clean strict lint),title,author,source, an inlinetagsarray, abased_onlist withhref+title, and forward-tolerant extra keys (difficulty,weeks) preserved verbatim. - Defaults / 1RM — a
defaultscode block:units:plusMovement=valuelines with per-line unit overrides (kg) and parenthetical notes. - Days —
# Monday→Mon,# Day 4(ordinal), and a bare# Restday. - Supersets —
A1./A2.share a cluster letter. - Modalities — leading (
BB,SA DB) and trailing (Face Pull DB). - Prescriptions —
5x5,4x6-8(rep range),3+x5(≥ sets),3x12+(≥ reps),3xAMRAP 30s. - Tempo —
{3-1-2-0}and{3e-1-2c-0}(explicit eccentric / concentric markers). - Resistance —
@80%,@315lbs,@140kg,@50lbs(25/hand),@rpe8.5,@BW. - Rest —
rest:180,rest:2m. - Drop sets —
DS,DS-3,DS(2 x 2rir),DS(3 x failure). - Stops —
2rir,failure. - Bullet form —
- sets / reps / weight / tempo / rpe / rir / rest / stop / dropset(incl.reps: 8+-12, which is bullet-only). - Notes & images —
Form:(with a continuation line),Reason:,Notes:, a plain general note, andimages (relative and absolute).
---
version: 0.1
title: The Kitchen Sink — every workout.md feature
author: Eric Moore
source: https://docs.tensr.fitness/workout-md/
tags: [reference, example, strength, hypertrophy]
based_on:
- href: https://5thirtyone.com/jim-wendler-531
title: "5/3/1 — Jim Wendler"
difficulty: intermediate
weeks: 8
---
```defaults
units: lbs
Bench Press=225
Back Squat=315
Deadlift=405lbs(belt)
Overhead Press=140
Front Squat=115kg
Bulgarian Split Squat=50(25/hand)
```
# Monday
## A1. BB Bench Press: 5x5 @80% {3-1-2-0} rest:180

Form: Tucked elbows, scapulae retracted, feet driving into the floor.
Bar path travels over the base of the sternum.
Reason: Primary horizontal press; loaded off the 1RM table above.
## A2. SA DB Row: 5x8 @70lbs rest:90
Superset with A1 — alternate A1/A2, rest only after A2.
## B. Back Squat: 4x6-8 @315lbs {2-1-1-0} rest:2m
Notes: Earn the top of the 6–8 range before adding load.
## C. Deadlift: 3+x5 @85% 2rir
## D. Bulgarian Split Squat: 3x10 @50lbs(25/hand) rest:60
## E. Cable Crossover: 3x12-15 @BW DS-3
## F. Tricep Pushdown: 3x12+ @40lbs DS
## G. Bicep Curl: 3xAMRAP 30s @rpe8.5
# Wednesday
## A. Front Squat: 5x3 @140kg {3e-1-2c-0} rest:180
## B. Overhead Press
- sets: 4
- reps: 8+-12
- weight: @70%
- tempo: {2-0-1-0}
- rir: 2
- rest: 90
- dropset: 2
Form: Brace the ribs down and press "through the window."
## C. Lat Pulldown
- sets: 3
- reps: 10-12
- rpe: 8
- rest: 75
- stop: failure
## D. Pull-up: 4x8 @BW rest:120 failure
## E. Face Pull DB: 3x15 @20lbs
# Rest
# Day 4
## A. BB Hip Thrust: 4x12 @225lbs {1-2-1-1} rest:75

## B. Leg Press: 3x20 @360lbs DS(2 x 2rir)
## C. Standing Calf Raise: 4x15-20 @140lbs DS(3 x failure)
Provenance (catalog entries)
Routines curated into the open catalog carry mandatory attribution in frontmatter —source_author and source_url — so a program's origin travels with the file:
---
version: 0.1
title: Cable A/B Split (curated)
source_author: Jane Coach
source_url: https://example.com/cable-program
---For agents
When a model proposes a program, it should emit exactly this format so the user can import it directly, and prefer catalog movement names it can confirm exist. A forthcoming workoutmd CLI validates a file against this spec with agent-legible error messages (which line, which rule, how to fix). Until then, the grammar above is the contract.