Create custom exercise
create_custom_exerciseAdds a new exercise to the user's own library, for when search_exercises doesn't have what they're after — including conditioning work such as a run, skipping or sprints, via exercise_type. The returned exercise_id can then be used with search_exercises results in create_planned_workout — never invent an exercise_id. Not safe to retry: calling this again with the same name creates a separate duplicate exercise, not the same one — check search_exercises first if unsure whether it already exists.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exercise name as the user will see it in the app, e.g. "Incline hammer curl". Max 80 characters. | |
| notes | No | Optional setup or coaching cues shown with the exercise. Max 500 characters. | |
| equipment | No | Free text, e.g. "dumbbell" — best-effort matched against the library; omitted if no match. | |
| muscle_group | No | Free text, e.g. "chest" or "hamstrings" — best-effort matched against the library; omitted if no match. | |
| exercise_type | No | How the movement is measured. This decides which targets create_planned_workout will accept for it and which inputs the app shows while training, and there is no tool to change it afterwards — pick it deliberately. Defaults to "default". default = weight and reps (most strength work, and bodyweight work with reps such as pull-ups or hill sprints); time = duration only (planks, dead hangs, skipping); time_weight = duration and weight (weighted plank, farmer hold); distance_time = distance and duration (running, rowing machine, treadmill, cycling); weight_distance = weight and distance (farmer walk, sled push). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| exercise_id | Yes | ||
| exercise_type | Yes | ||
| equipment_matched | Yes | ||
| muscle_group_matched | Yes |