This skill should be used when the user asks to "create a workout", "build a workout file", "generate a .workout file", "make an Apple Watch workout", "create a running/cycling/swimming/HIIT workout", or needs to generate .workout files that can be imported into Apple Watch via iPhone. Supports creating workouts from text descriptions, images of workout plans, or structured specifications.
npx claudepluginhub oliverames/ames-claude --plugin ames-standalone-skillsThis skill is limited to using the following tools:
Generate valid `.workout` files for Apple Watch from text descriptions or images of workout plans.
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
Generate valid .workout files for Apple Watch from text descriptions or images of workout plans.
The user describes a workout in plain language or provides an image of a workout plan. You:
.workout binary fileNone required. The generator script (generate_workout.py) has zero external dependencies — it implements protobuf binary encoding from scratch using only Python standard library.
# Generate from JSON file
python3 generate_workout.py workout.json
# Generate with custom output path
python3 generate_workout.py workout.json -o MyWorkout.workout
# Generate from stdin (pipe JSON)
echo '{"displayName":"Quick Run",...}' | python3 generate_workout.py -
# Print example JSON
python3 generate_workout.py --example 5k_intervals
# Validate without generating
python3 generate_workout.py workout.json --validate
# List available examples
python3 generate_workout.py --list-examples
# List all activity types
python3 generate_workout.py --list-activities
Use consistent units throughout a workout. All distances in a workout should use the same measurement system (yards OR meters, not a mix).
Supported distance units: meters, kilometers, yards, miles
Parse the user's request into a JSON workout definition. The schema:
{
"displayName": "Workout Name",
"activity": "running",
"location": "outdoor",
"warmup": {
"goal": {"type": "distance", "value": 1.0, "unit": "km"},
"alert": {"type": "heartRateRange", "min": 120, "max": 140},
"displayName": "Easy Warmup"
},
"blocks": [
{
"iterations": 4,
"steps": [
{
"purpose": "work",
"goal": {"type": "distance", "value": 800, "unit": "meters"},
"alert": {"type": "pace", "metric": "current", "minPace": "5:00", "maxPace": "4:30"},
"displayName": "Fast 800m"
},
{
"purpose": "recovery",
"goal": {"type": "time", "value": 2, "unit": "minutes"},
"displayName": "Jog Recovery"
}
]
}
],
"cooldown": {
"goal": {"type": "time", "value": 5, "unit": "minutes"},
"displayName": "Cool Down"
}
}
# Write the JSON to a temp file, then generate
python3 ~/.claude/skills/apple-workout-generator/generate_workout.py /tmp/workout.json -o ~/Desktop/MyWorkout.workout
Tell the user to transfer the .workout file to their iPhone via AirDrop, iCloud Drive, email, or messaging. When opened on iPhone (iOS 17+), it presents a preview and "Add to Watch" button.
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | No | Workout name shown in Apple Watch UI |
activity | string | Yes | Activity type (see below) |
location | string | No | "indoor" or "outdoor" (default: outdoor) |
warmup | WorkoutStep | No | Optional warmup phase |
blocks | IntervalBlock[] | Yes | Array of interval blocks |
cooldown | WorkoutStep | No | Optional cooldown phase |
Common activities: running, cycling, swimming, walking, hiking, hiit, rowing, elliptical, yoga, strength, pilates, boxing, kickboxing, stairclimbing, pickleball, tennis, soccer, basketball, golf, climbing, skating, skiing, snowboarding, dance, core_training, flexibility, barre, tai_chi, mixed_cardio, surfing
Aliases are supported: run → running, bike/cycle → cycling, swim → swimming, walk → walking, hike → hiking, row → rowing, intervals → hiit
Run --list-activities for the complete list.
| Field | Type | Required | Description |
|---|---|---|---|
goal | Goal | Yes | Step goal |
alert | Alert | No | Optional alert |
displayName | string | No | Step label (shown on watch, watchOS 11+) |
Open goal (user manually advances):
{"type": "open"}
Distance goal:
{"type": "distance", "value": 5.0, "unit": "km"}
Units: km, meters, miles, yards
Time goal:
{"type": "time", "value": 20, "unit": "minutes"}
Units: seconds, minutes, hours
Heart rate range:
{"type": "heartRateRange", "min": 140, "max": 160}
Pace range (for running/cycling):
{"type": "pace", "metric": "current", "minPace": "5:30", "maxPace": "5:00", "paceUnit": "km"}
minPace: slower pace (higher number), maxPace: faster pace (lower number)paceUnit: "km" (min/km) or "mi" (min/mile). Can also embed in pace: "7:00/mi"metric: "current" or "average"Speed range (numeric):
{"type": "speedRange", "metric": "current", "minSpeed": 10, "maxSpeed": 15, "speedUnit": "kph"}
Units: mps (m/s), kph (km/h), mph (mi/h)
| Field | Type | Required | Description |
|---|---|---|---|
iterations | int | No | Number of repeats (default: 1) |
steps | IntervalStep[] | Yes | Array of work/recovery steps |
| Field | Type | Required | Description |
|---|---|---|---|
purpose | string | Yes | "work" or "recovery" |
goal | Goal | Yes | Step goal |
alert | Alert | No | Optional alert |
displayName | string | No | Step label |
User says: "Create a 5K interval workout with 4x800m repeats at 4:30-5:00/km pace with 2 min recovery jogs, plus a 1km warmup and cooldown"
→ Parse into JSON with warmup (1km), block (4 iterations, 800m work + 2min recovery), cooldown (1km)
When the user provides an image of a workout plan, read the image and extract:
Then build the JSON definition and generate.
minPace should be the SLOWER pace (bigger number) and maxPace the FASTER paceThe .workout file is a Protocol Buffer binary with a magic trailer. See RESEARCH.md for the full reverse-engineered specification. The file can be opened on any iPhone running iOS 17+ to preview and import to Apple Watch.