@vitness/fds-skill 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,173 @@
1
+ # Exercise Classification Prompt
2
+
3
+ ## System Prompt
4
+
5
+ ```
6
+ You are an expert exercise physiologist and fitness data specialist with deep knowledge of the FDS (Fitness Data Standard) specification.
7
+
8
+ Your task is to classify exercises according to the FDS schema requirements. You must determine:
9
+ 1. exerciseType - The primary category of the exercise
10
+ 2. movement - The movement pattern (from 14 valid options)
11
+ 3. mechanics - Whether it's compound or isolation
12
+ 4. force - The force direction
13
+ 5. level - The difficulty level
14
+
15
+ Always respond with valid JSON matching the expected schema. Be precise and consistent.
16
+ ```
17
+
18
+ ## User Prompt Template
19
+
20
+ ```
21
+ Classify this exercise according to FDS v1.0.0:
22
+
23
+ Exercise: {{name}}
24
+ {{#if bodyPart}}Body Part: {{bodyPart}}{{/if}}
25
+ {{#if target}}Target Muscle: {{target}}{{/if}}
26
+ {{#if equipment}}Equipment: {{equipment}}{{/if}}
27
+ {{#if description}}Description: {{description}}{{/if}}
28
+
29
+ Provide classification as JSON with this exact structure:
30
+ {
31
+ "exerciseType": "strength|cardio|mobility|plyometric|balance",
32
+ "movement": "squat|hinge|lunge|push-horizontal|push-vertical|pull-horizontal|pull-vertical|carry|core-anti-extension|core-anti-rotation|rotation|locomotion|isolation|other",
33
+ "mechanics": "compound|isolation",
34
+ "force": "push|pull|static|mixed",
35
+ "level": "beginner|intermediate|advanced",
36
+ "reasoning": "Brief explanation of your classification choices"
37
+ }
38
+
39
+ Classification Guidelines:
40
+ - exerciseType: Consider the primary training goal (building strength, cardio endurance, flexibility, explosive power, or balance)
41
+ - movement: Identify the primary movement pattern. Use "isolation" for single-joint exercises, "locomotion" for cardio-based movements
42
+ - mechanics: "compound" if multiple joints move, "isolation" if single joint
43
+ - force: Primary force direction - pushing away, pulling toward, static hold, or combination
44
+ - level: Consider technique complexity and strength requirements
45
+
46
+ Respond ONLY with the JSON object, no additional text.
47
+ ```
48
+
49
+ ## Expected Output Schema
50
+
51
+ ```json
52
+ {
53
+ "type": "object",
54
+ "required": ["exerciseType", "movement", "mechanics", "force", "level"],
55
+ "properties": {
56
+ "exerciseType": {
57
+ "type": "string",
58
+ "enum": ["strength", "cardio", "mobility", "plyometric", "balance"]
59
+ },
60
+ "movement": {
61
+ "type": "string",
62
+ "enum": ["squat", "hinge", "lunge", "push-horizontal", "push-vertical", "pull-horizontal", "pull-vertical", "carry", "core-anti-extension", "core-anti-rotation", "rotation", "locomotion", "isolation", "other"]
63
+ },
64
+ "mechanics": {
65
+ "type": "string",
66
+ "enum": ["compound", "isolation"]
67
+ },
68
+ "force": {
69
+ "type": "string",
70
+ "enum": ["push", "pull", "static", "mixed"]
71
+ },
72
+ "level": {
73
+ "type": "string",
74
+ "enum": ["beginner", "intermediate", "advanced"]
75
+ },
76
+ "reasoning": {
77
+ "type": "string"
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ ## Example Inputs/Outputs
84
+
85
+ ### Example 1: Compound Strength
86
+ **Input:**
87
+ ```
88
+ Exercise: Barbell Back Squat
89
+ Body Part: upper legs
90
+ Target Muscle: glutes
91
+ Equipment: barbell
92
+ ```
93
+
94
+ **Output:**
95
+ ```json
96
+ {
97
+ "exerciseType": "strength",
98
+ "movement": "squat",
99
+ "mechanics": "compound",
100
+ "force": "push",
101
+ "level": "intermediate",
102
+ "reasoning": "Back squat is a foundational compound strength exercise with a squat movement pattern. It involves knee and hip extension (pushing force). Requires proper technique and baseline strength, making it intermediate level."
103
+ }
104
+ ```
105
+
106
+ ### Example 2: Isolation Exercise
107
+ **Input:**
108
+ ```
109
+ Exercise: Bicep Curl
110
+ Target Muscle: biceps
111
+ Equipment: dumbbell
112
+ ```
113
+
114
+ **Output:**
115
+ ```json
116
+ {
117
+ "exerciseType": "strength",
118
+ "movement": "isolation",
119
+ "mechanics": "isolation",
120
+ "force": "pull",
121
+ "level": "beginner",
122
+ "reasoning": "Bicep curl is a single-joint isolation exercise targeting the biceps. The elbow flexion is a pulling motion. Simple technique makes it beginner-friendly."
123
+ }
124
+ ```
125
+
126
+ ### Example 3: Core Exercise
127
+ **Input:**
128
+ ```
129
+ Exercise: Plank
130
+ Body Part: waist
131
+ Target Muscle: abs
132
+ Equipment: body weight
133
+ ```
134
+
135
+ **Output:**
136
+ ```json
137
+ {
138
+ "exerciseType": "strength",
139
+ "movement": "core-anti-extension",
140
+ "mechanics": "isolation",
141
+ "force": "static",
142
+ "level": "beginner",
143
+ "reasoning": "Plank is an isometric core exercise that resists spinal extension (anti-extension). Despite engaging multiple muscles, the joint action is minimal (isolation). Static hold with no movement. Basic technique accessible to beginners."
144
+ }
145
+ ```
146
+
147
+ ### Example 4: Cardio
148
+ **Input:**
149
+ ```
150
+ Exercise: Treadmill Run
151
+ Body Part: cardio
152
+ Target Muscle: cardiovascular system
153
+ Equipment: treadmill
154
+ ```
155
+
156
+ **Output:**
157
+ ```json
158
+ {
159
+ "exerciseType": "cardio",
160
+ "movement": "locomotion",
161
+ "mechanics": "compound",
162
+ "force": "mixed",
163
+ "level": "beginner",
164
+ "reasoning": "Running is a cardiovascular locomotion exercise. It's compound as it involves hip, knee, and ankle joints. Force is mixed between push-off and pull-through phases. Basic running is beginner-accessible."
165
+ }
166
+ ```
167
+
168
+ ## Validation Rules
169
+
170
+ 1. All 5 required fields must be present
171
+ 2. Each field must use exact enum values (case-sensitive)
172
+ 3. The `reasoning` field helps with audit but is not stored in FDS
173
+ 4. If uncertain between two options, choose the more common/primary classification
@@ -0,0 +1,178 @@
1
+ # Exercise Description Prompt
2
+
3
+ ## System Prompt
4
+
5
+ ```
6
+ You are an expert fitness content writer with deep knowledge of exercise science and the FDS (Fitness Data Standard) specification.
7
+
8
+ Your task is to write clear, concise, and accurate exercise descriptions. Descriptions should:
9
+ 1. Explain what the exercise is and its purpose
10
+ 2. Mention the primary muscles targeted
11
+ 3. Be suitable for a general fitness audience
12
+ 4. Be 1-3 sentences long
13
+ 5. Avoid overly technical jargon
14
+
15
+ Always respond with valid JSON matching the expected schema.
16
+ ```
17
+
18
+ ## User Prompt Template
19
+
20
+ ```
21
+ Write a description for this exercise:
22
+
23
+ Exercise: {{name}}
24
+ {{#if bodyPart}}Body Part: {{bodyPart}}{{/if}}
25
+ {{#if target}}Target Muscle: {{target}}{{/if}}
26
+ {{#if equipment}}Equipment: {{equipment}}{{/if}}
27
+ {{#if classification}}
28
+ Classification:
29
+ - Type: {{classification.exerciseType}}
30
+ - Movement: {{classification.movement}}
31
+ - Mechanics: {{classification.mechanics}}
32
+ {{/if}}
33
+
34
+ Provide a JSON response:
35
+ {
36
+ "description": "Your 1-3 sentence description here",
37
+ "aliases": ["alternative name 1", "alternative name 2"]
38
+ }
39
+
40
+ Guidelines:
41
+ - Description should be informative but concise (50-150 words)
42
+ - Start with what the exercise is, not "This exercise..."
43
+ - Mention key muscles and benefits
44
+ - Aliases should be common alternative names people might search for
45
+
46
+ Respond ONLY with the JSON object, no additional text.
47
+ ```
48
+
49
+ ## Expected Output Schema
50
+
51
+ ```json
52
+ {
53
+ "type": "object",
54
+ "required": ["description"],
55
+ "properties": {
56
+ "description": {
57
+ "type": "string",
58
+ "minLength": 20,
59
+ "maxLength": 500
60
+ },
61
+ "aliases": {
62
+ "type": "array",
63
+ "items": {
64
+ "type": "string",
65
+ "minLength": 2
66
+ },
67
+ "maxItems": 5
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ ## Example Inputs/Outputs
74
+
75
+ ### Example 1: Compound Exercise
76
+ **Input:**
77
+ ```
78
+ Exercise: Barbell Back Squat
79
+ Body Part: upper legs
80
+ Target Muscle: glutes
81
+ Equipment: barbell
82
+ Classification:
83
+ - Type: strength
84
+ - Movement: squat
85
+ - Mechanics: compound
86
+ ```
87
+
88
+ **Output:**
89
+ ```json
90
+ {
91
+ "description": "A foundational compound movement that targets the quadriceps, glutes, and hamstrings while engaging the core for stability. The barbell back squat builds lower body strength and power, making it essential for athletic performance and functional fitness.",
92
+ "aliases": ["back squat", "barbell squat", "high bar squat", "low bar squat"]
93
+ }
94
+ ```
95
+
96
+ ### Example 2: Isolation Exercise
97
+ **Input:**
98
+ ```
99
+ Exercise: Dumbbell Bicep Curl
100
+ Target Muscle: biceps
101
+ Equipment: dumbbell
102
+ Classification:
103
+ - Type: strength
104
+ - Movement: isolation
105
+ - Mechanics: isolation
106
+ ```
107
+
108
+ **Output:**
109
+ ```json
110
+ {
111
+ "description": "An isolation exercise that targets the biceps brachii through elbow flexion. Dumbbell curls allow for independent arm training, helping address muscle imbalances while building arm size and strength.",
112
+ "aliases": ["bicep curl", "arm curl", "dumbbell curl", "DB curl"]
113
+ }
114
+ ```
115
+
116
+ ### Example 3: Core Exercise
117
+ **Input:**
118
+ ```
119
+ Exercise: Plank
120
+ Body Part: waist
121
+ Target Muscle: abs
122
+ Equipment: body weight
123
+ Classification:
124
+ - Type: strength
125
+ - Movement: core-anti-extension
126
+ - Mechanics: isolation
127
+ ```
128
+
129
+ **Output:**
130
+ ```json
131
+ {
132
+ "description": "An isometric core exercise that strengthens the entire anterior core by resisting spinal extension. The plank improves core stability, posture, and provides a foundation for more advanced exercises.",
133
+ "aliases": ["front plank", "prone hold", "hover"]
134
+ }
135
+ ```
136
+
137
+ ### Example 4: Cardio Exercise
138
+ **Input:**
139
+ ```
140
+ Exercise: Jumping Jacks
141
+ Body Part: cardio
142
+ Target Muscle: cardiovascular system
143
+ Equipment: body weight
144
+ Classification:
145
+ - Type: cardio
146
+ - Movement: locomotion
147
+ - Mechanics: compound
148
+ ```
149
+
150
+ **Output:**
151
+ ```json
152
+ {
153
+ "description": "A classic calisthenics exercise that elevates heart rate while engaging the entire body. Jumping jacks improve cardiovascular endurance, coordination, and serve as an effective warm-up or cardio interval exercise.",
154
+ "aliases": ["star jumps", "side-straddle hop"]
155
+ }
156
+ ```
157
+
158
+ ## Quality Guidelines
159
+
160
+ ### Do
161
+ - Be specific about muscles targeted
162
+ - Mention practical benefits
163
+ - Use active voice
164
+ - Keep sentences clear and readable
165
+
166
+ ### Don't
167
+ - Start with "This exercise is..."
168
+ - Use excessive technical anatomy terms
169
+ - Include form instructions (those go elsewhere)
170
+ - Make health claims or guarantees
171
+ - Be overly verbose
172
+
173
+ ### Alias Guidelines
174
+ - Include common abbreviations (e.g., "DB" for dumbbell)
175
+ - Include regional variations (e.g., "press-up" for "push-up")
176
+ - Include equipment-less variants if applicable
177
+ - Maximum 5 aliases
178
+ - Exclude the main name
@@ -0,0 +1,278 @@
1
+ # Exercise Metrics Prompt
2
+
3
+ ## System Prompt
4
+
5
+ ```
6
+ You are an expert exercise physiologist familiar with the FDS (Fitness Data Standard) specification.
7
+
8
+ Your task is to determine the appropriate metrics for tracking exercise performance. You must select:
9
+ 1. primary metric - The most important measurement for this exercise
10
+ 2. secondary metrics - Additional useful measurements (optional)
11
+
12
+ Choose from the valid FDS metric types and units. Always respond with valid JSON.
13
+ ```
14
+
15
+ ## User Prompt Template
16
+
17
+ ```
18
+ Determine the appropriate metrics for this exercise:
19
+
20
+ Exercise: {{name}}
21
+ {{#if classification}}
22
+ Classification:
23
+ - Exercise Type: {{classification.exerciseType}}
24
+ - Movement: {{classification.movement}}
25
+ - Mechanics: {{classification.mechanics}}
26
+ {{/if}}
27
+ {{#if equipment}}Equipment: {{equipment}}{{/if}}
28
+
29
+ Provide metrics as JSON:
30
+ {
31
+ "primary": {
32
+ "type": "<metric type>",
33
+ "unit": "<metric unit>"
34
+ },
35
+ "secondary": [
36
+ { "type": "<metric type>", "unit": "<metric unit>" }
37
+ ],
38
+ "reasoning": "Brief explanation of metric choices"
39
+ }
40
+
41
+ Valid metric types: reps, weight, duration, distance, speed, pace, power, heartRate, steps, calories, height, tempo, rpe
42
+
43
+ Valid metric units:
44
+ - count (for reps, tempo, rpe, steps)
45
+ - kg, lb (for weight)
46
+ - s, min (for duration)
47
+ - m, km, mi (for distance)
48
+ - m_s, km_h (for speed)
49
+ - min_per_km, min_per_mi (for pace)
50
+ - W (for power)
51
+ - bpm (for heartRate)
52
+ - kcal (for calories)
53
+ - cm, in (for height)
54
+
55
+ Common pairings:
56
+ - Strength: reps/count + weight/kg
57
+ - Cardio distance: distance/km + duration/min
58
+ - Cardio time: duration/min + heartRate/bpm
59
+ - Timed holds: duration/s
60
+ - Plyometrics: reps/count + height/cm
61
+
62
+ Respond ONLY with the JSON object, no additional text.
63
+ ```
64
+
65
+ ## Expected Output Schema
66
+
67
+ ```json
68
+ {
69
+ "type": "object",
70
+ "required": ["primary"],
71
+ "properties": {
72
+ "primary": {
73
+ "type": "object",
74
+ "required": ["type", "unit"],
75
+ "properties": {
76
+ "type": {
77
+ "type": "string",
78
+ "enum": ["reps", "weight", "duration", "distance", "speed", "pace", "power", "heartRate", "steps", "calories", "height", "tempo", "rpe"]
79
+ },
80
+ "unit": {
81
+ "type": "string",
82
+ "enum": ["count", "kg", "lb", "s", "min", "m", "km", "mi", "m_s", "km_h", "min_per_km", "min_per_mi", "W", "bpm", "kcal", "cm", "in"]
83
+ }
84
+ }
85
+ },
86
+ "secondary": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "object",
90
+ "required": ["type", "unit"],
91
+ "properties": {
92
+ "type": { "type": "string" },
93
+ "unit": { "type": "string" }
94
+ }
95
+ }
96
+ },
97
+ "reasoning": {
98
+ "type": "string"
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ ## Example Inputs/Outputs
105
+
106
+ ### Example 1: Weighted Strength Exercise
107
+ **Input:**
108
+ ```
109
+ Exercise: Barbell Bench Press
110
+ Classification:
111
+ - Exercise Type: strength
112
+ - Movement: push-horizontal
113
+ - Mechanics: compound
114
+ Equipment: barbell
115
+ ```
116
+
117
+ **Output:**
118
+ ```json
119
+ {
120
+ "primary": { "type": "reps", "unit": "count" },
121
+ "secondary": [
122
+ { "type": "weight", "unit": "kg" },
123
+ { "type": "rpe", "unit": "count" }
124
+ ],
125
+ "reasoning": "Bench press is tracked primarily by reps completed, with weight being the key secondary metric for progressive overload. RPE helps gauge effort relative to capacity."
126
+ }
127
+ ```
128
+
129
+ ### Example 2: Bodyweight Exercise
130
+ **Input:**
131
+ ```
132
+ Exercise: Push-Up
133
+ Classification:
134
+ - Exercise Type: strength
135
+ - Movement: push-horizontal
136
+ - Mechanics: compound
137
+ Equipment: body weight
138
+ ```
139
+
140
+ **Output:**
141
+ ```json
142
+ {
143
+ "primary": { "type": "reps", "unit": "count" },
144
+ "secondary": [
145
+ { "type": "tempo", "unit": "count" }
146
+ ],
147
+ "reasoning": "Bodyweight push-ups are primarily tracked by rep count. Tempo (e.g., 3-1-2-0 for eccentric-pause-concentric-pause) can be used to increase difficulty and time under tension."
148
+ }
149
+ ```
150
+
151
+ ### Example 3: Timed Hold
152
+ **Input:**
153
+ ```
154
+ Exercise: Plank
155
+ Classification:
156
+ - Exercise Type: strength
157
+ - Movement: core-anti-extension
158
+ - Mechanics: isolation
159
+ Equipment: body weight
160
+ ```
161
+
162
+ **Output:**
163
+ ```json
164
+ {
165
+ "primary": { "type": "duration", "unit": "s" },
166
+ "secondary": [],
167
+ "reasoning": "Plank is an isometric hold measured by duration in seconds. No secondary metrics are typically needed as progression comes from extending hold time."
168
+ }
169
+ ```
170
+
171
+ ### Example 4: Distance Cardio
172
+ **Input:**
173
+ ```
174
+ Exercise: Treadmill Run
175
+ Classification:
176
+ - Exercise Type: cardio
177
+ - Movement: locomotion
178
+ - Mechanics: compound
179
+ Equipment: treadmill
180
+ ```
181
+
182
+ **Output:**
183
+ ```json
184
+ {
185
+ "primary": { "type": "distance", "unit": "km" },
186
+ "secondary": [
187
+ { "type": "duration", "unit": "min" },
188
+ { "type": "pace", "unit": "min_per_km" },
189
+ { "type": "heartRate", "unit": "bpm" },
190
+ { "type": "calories", "unit": "kcal" }
191
+ ],
192
+ "reasoning": "Running is typically tracked by distance covered. Secondary metrics include time, pace for intensity, heart rate for training zone, and calories for energy expenditure."
193
+ }
194
+ ```
195
+
196
+ ### Example 5: Time-Based Cardio
197
+ **Input:**
198
+ ```
199
+ Exercise: Stationary Bike
200
+ Classification:
201
+ - Exercise Type: cardio
202
+ - Movement: locomotion
203
+ - Mechanics: compound
204
+ Equipment: cardio machine
205
+ ```
206
+
207
+ **Output:**
208
+ ```json
209
+ {
210
+ "primary": { "type": "duration", "unit": "min" },
211
+ "secondary": [
212
+ { "type": "distance", "unit": "km" },
213
+ { "type": "power", "unit": "W" },
214
+ { "type": "heartRate", "unit": "bpm" },
215
+ { "type": "calories", "unit": "kcal" }
216
+ ],
217
+ "reasoning": "Stationary biking is often tracked by time spent. Power (watts) is valuable for consistent intensity measurement. Distance, heart rate, and calories provide additional context."
218
+ }
219
+ ```
220
+
221
+ ### Example 6: Plyometric Exercise
222
+ **Input:**
223
+ ```
224
+ Exercise: Box Jump
225
+ Classification:
226
+ - Exercise Type: plyometric
227
+ - Movement: squat
228
+ - Mechanics: compound
229
+ Equipment: body weight
230
+ ```
231
+
232
+ **Output:**
233
+ ```json
234
+ {
235
+ "primary": { "type": "reps", "unit": "count" },
236
+ "secondary": [
237
+ { "type": "height", "unit": "cm" }
238
+ ],
239
+ "reasoning": "Box jumps are tracked by rep count, with box height as a secondary metric indicating intensity and explosive power capability."
240
+ }
241
+ ```
242
+
243
+ ## Decision Guide
244
+
245
+ ```
246
+ What type of exercise?
247
+ ├─ Strength (weighted)
248
+ │ └─ Primary: reps/count
249
+ │ Secondary: weight/kg, rpe/count
250
+
251
+ ├─ Strength (bodyweight)
252
+ │ └─ Primary: reps/count
253
+ │ Secondary: tempo/count (optional)
254
+
255
+ ├─ Isometric Hold
256
+ │ └─ Primary: duration/s
257
+ │ Secondary: (none typically)
258
+
259
+ ├─ Cardio (distance-based)
260
+ │ └─ Primary: distance/km
261
+ │ Secondary: duration/min, pace/min_per_km, heartRate/bpm
262
+
263
+ ├─ Cardio (time-based)
264
+ │ └─ Primary: duration/min
265
+ │ Secondary: distance/km, heartRate/bpm, calories/kcal
266
+
267
+ ├─ Cardio (power-based, e.g., rowing, cycling)
268
+ │ └─ Primary: duration/min OR distance/m
269
+ │ Secondary: power/W, heartRate/bpm
270
+
271
+ ├─ Plyometric
272
+ │ └─ Primary: reps/count
273
+ │ Secondary: height/cm (for jumps)
274
+
275
+ └─ Mobility/Flexibility
276
+ └─ Primary: duration/s (for holds)
277
+ OR reps/count (for dynamic stretches)
278
+ ```