fitness-nutrition – skill Khác cho agent AI
Lập kế hoạch tập luyện, macro và chỉ số cơ thể qua wger/USDA.
Cài skill fitness-nutrition bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/fitness-nutrition-96381.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /fitness-nutrition – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/fitness-nutrition-96381.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $fitness-nutrition – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/fitness-nutrition-96381.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /fitness-nutrition – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/fitness-nutrition-96381.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /fitness-nutrition – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
Fitness & Nutrition
Expert fitness coach and sports nutritionist skill. Two data sources
plus offline calculators — everything a gym-goer needs in one place.
Data sources (all free, no pip dependencies):
- wger (https://wger.de/api/v2/) — open exercise database, 690+ exercises with muscles, equipment, images. Public endpoints need zero authentication.
- USDA FoodData Central (https://api.nal.usda.gov/fdc/v1/) — US government nutrition database, 380,000+ foods.
DEMO_KEYworks instantly; free signup for higher limits.
Offline calculators (pure stdlib Python):
- BMI, TDEE (Mifflin-St Jeor), one-rep max (Epley/Brzycki/Lombardi), macro splits, body fat % (US Navy method)
---
When to Use
Trigger this skill when the user asks about:
- Exercises, workouts, gym routines, muscle groups, workout splits
- Food macros, calories, protein content, meal planning, calorie counting
- Body composition: BMI, body fat, TDEE, caloric surplus/deficit
- One-rep max estimates, training percentages, progressive overload
- Macro ratios for cutting, bulking, or maintenance
---
Procedure
Exercise Lookup (wger API)
All wger public endpoints return JSON and require no auth. Always add
format=json and language=2 (English) to exercise queries.
Step 1 — Identify what the user wants:
- By muscle → use
/api/v2/exercise/?muscles={id}&language=2&status=2&format=json - By category → use
/api/v2/exercise/?category={id}&language=2&status=2&format=json - By equipment → use
/api/v2/exercise/?equipment={id}&language=2&status=2&format=json - By name → use
/api/v2/exercise/search/?term={query}&language=english&format=json - Full details → use
/api/v2/exerciseinfo/{exercise_id}/?format=json
Step 2 — Reference IDs (so you don't need extra API calls):
Exercise categories:
| ID | Category |
|----|-------------|
| 8 | Arms |
| 9 | Legs |
| 10 | Abs |
| 11 | Chest |
| 12 | Back |
| 13 | Shoulders |
| 14 | Calves |
| 15 | Cardio |
Muscles:
| ID | Muscle | ID | Muscle |
|----|---------------------------|----|-------------------------|
| 1 | Biceps brachii | 2 | Anterior deltoid |
| 3 | Serratus anterior | 4 | Pectoralis major |
| 5 | Obliquus externus | 6 | Gastrocnemius |
| 7 | Rectus abdominis | 8 | Gluteus maximus |
| 9 | Trapezius | 10 | Quadriceps femoris |
| 11 | Biceps femoris | 12 | Latissimus dorsi |
| 13 | Brachialis | 14 | Triceps brachii |
| 15 | Soleus | | |
Equipment:
| ID | Equipment |
|----|----------------|
| 1 | Barbell |
| 3 | Dumbbell |
| 4 | Gym mat |
| 5 | Swiss Ball |
| 6 | Pull-up bar |
| 7 | none (bodyweight) |
| 8 | Bench |
| 9 | Incline bench |
| 10 | Kettlebell |
Step 3 — Fetch and present results:
# Search exercises by name
QUERY="$1"
ENCODED=$(python -c "import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1]))" "$QUERY")
curl -s "https://wger.de/api/v2/exercise/search/?term=${ENCODED}&language=english&format=json" \
| python -c "
import json,sys
data=json.load(sys.stdin)
for s in data.get('suggestions',[])[:10]:
d=s.get('data',{})
print(f\" ID {d.get('id','?'):>4} | {d.get('name','N/A'):<35} | Category: {d.get('category','N/A')}\")
"# Get full details for a specific exercise
EXERCISE_ID="$1"
curl -s "https://wger.de/api/v2/exerciseinfo/${EXERCISE_ID}/?format=json" \
| python -c "
import json,sys,html,re
data=json.load(sys.stdin)
trans=[t for t in data.get('translations',[]) if t.get('language')==2]
t=trans[0] if trans else data.get('translations',[{}])[0]
desc=re.sub('<[^>]+>','',html.unescape(t.get('description','N/A')))
print(f\"Exercise : {t.get('name','N/A')}\")
print(f\"Category : {data.get('category',{}).get('name','N/A')}\")
print(f\"Primary : {', '.join(m.get('name_en','') for m in data.get('muscles',[])) or 'N/A'}\")
print(f\"Secondary : {', '.join(m.get('name_en','') for m in data.get('muscles_secondary',[])) or 'none'}\")
print(f\"Equipment : {', '.join(e.get('name','') for e in data.get('equipment',[])) or 'bodyweight'}\")
print(f\"How to : {desc[:500]}\")
imgs=data.get('images',[])
if imgs: print(f\"Image : {imgs[0].get('image','')}\")
"# List exercises filtering by muscle, category, or equipment
# Combine filters as needed: ?muscles=4&equipment=1&language=2&status=2
FILTER="$1" # e.g. "muscles=4" or "category=11" or "equipment=3"
curl -s "https://wger.de/api/v2/exercise/?${FILTER}&language=2&status=2&limit=20&format=json" \
| python -c "
import json,sys
data=json.load(sys.stdin)
print(f'Found {data.get(\"count\",0)} exercises.')
for ex in data.get('results',[]):
print(f\" ID {ex['id']:>4} | muscles: {ex.get('muscles',[])} | equipment: {ex.get('equipment',[])}\")
"Nutrition Lookup (USDA FoodData Central)
Uses USDA_API_KEY env var if set, otherwise falls back to DEMO_KEY.
DEMO_KEY = 30 requests/hour. Free signup key = 1,000 requests/hour.
# Search foods by name
FOOD="$1"
API_KEY="${USDA_API_KEY:-DEMO_KEY}"
ENCODED=$(python -c "import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1]))" "$FOOD")
curl -s "https://api.nal.usda.gov/fdc/v1/foods/search?api_key=${API_KEY}&query=${ENCODED}&pageSize=5&dataType=Foundation,SR%20Legacy" \
| python -c "
import json,sys
data=json.load(sys.stdin)
foods=data.get('foods',[])
if not foods: print('No foods found.'); sys.exit()
for f in foods:
n={x['nutrientName']:x.get('value','?') for x in f.get('foodNutrients',[])}
cal=n.get('Energy','?'); prot=n.get('Protein','?')
fat=n.get('Total lipid (fat)','?'); carb=n.get('Carbohydrate, by difference','?')
print(f\"{f.get('description','N/A')}\")
print(f\" Per 100g: {cal} kcal | {prot}g protein | {fat}g fat | {carb}g carbs\")
print(f\" FDC ID: {f.get('fdcId','N/A')}\")
print()
"# Detailed nutrient profile by FDC ID
FDC_ID="$1"
API_KEY="${USDA_API_KEY:-DEMO_KEY}"
curl -s "https://api.nal.usda.gov/fdc/v1/food/${FDC_ID}?api_key=${API_KEY}" \
| python -c "
import json,sys
d=json.load(sys.stdin)
print(f\"Food: {d.get('description','N/A')}\")
print(f\"{'Nutrient':<40} {'Amount':>8} {'Unit'}\")
print('-'*56)
for x in sorted(d.get('foodNutrients',[]),key=lambda x:x.get('nutrient',{}).get('rank',9999)):
nut=x.get('nutrient',{}); amt=x.get('amount',0)
if amt and float(amt)>0:
print(f\" {nut.get('name',''):<38} {amt:>8} {nut.get('unitName','')}\")
"Offline Calculators
Use the helper scripts in scripts/ for batch operations,
or run inline for single calculations:
python scripts/body_calc.py bmi <weight_kg> <height_cm>python scripts/body_calc.py tdee <weight_kg> <height_cm> <age> <M|F> <activity 1-5>python scripts/body_calc.py 1rm <weight> <reps>python scripts/body_calc.py macros <tdee_kcal> <cut|maintain|bulk>python scripts/body_calc.py bodyfat <M|F> <neck_cm> <waist_cm> [hip_cm] <height_cm>
See references/FORMULAS.md for the science behind each formula.
---
Pitfalls
- wger exercise endpoint returns all languages by default — always add
language=2for English - wger includes unverified user submissions — add
status=2to only get approved exercises - USDA
DEMO_KEYhas 30 req/hour — addsleep 2between batch requests or get a free key - USDA data is per 100g — remind users to scale to their actual portion size
- BMI does not distinguish muscle from fat — high BMI in muscular people is not necessarily unhealthy
- Body fat formulas are estimates (±3-5%) — recommend DEXA scans for precision
- 1RM formulas lose accuracy above 10 reps — use sets of 3-5 for best estimates
- wger's
exercise/searchendpoint usestermnotqueryas the parameter name
---
Verification
After running exercise search: confirm results include exercise names, muscle groups, and equipment.
After nutrition lookup: confirm per-100g macros are returned with kcal, protein, fat, carbs.
After calculators: sanity-check outputs (e.g. TDEE should be 1500-3500 for most adults).
---
Quick Reference
| Task | Source | Endpoint |
|------|--------|----------|
| Search exercises by name | wger | GET /api/v2/exercise/search/?term=&language=english |
| Exercise details | wger | GET /api/v2/exerciseinfo/{id}/ |
| Filter by muscle | wger | GET /api/v2/exercise/?muscles={id}&language=2&status=2 |
| Filter by equipment | wger | GET /api/v2/exercise/?equipment={id}&language=2&status=2 |
| List categories | wger | GET /api/v2/exercisecategory/ |
| List muscles | wger | GET /api/v2/muscle/ |
| Search foods | USDA | GET /fdc/v1/foods/search?query=&dataType=Foundation,SR Legacy |
| Food details | USDA | GET /fdc/v1/food/{fdcId} |
| BMI / TDEE / 1RM / macros | offline |
… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- axiom – Kiểm toán giả định từ nguyên lý đầu tiên. Phân loại từng giả định ẩn (sự thật / quy ước…
- gif-search – Tìm kiếm và tải GIF từ Tenor bằng curl + jq.
- company-os – Khung siêu tổng thể về cách công ty vận hành, là mắt xích kết nối mọi vai trò C-suite…
- grill-me – Phỏng vấn lập kế hoạch theo kiểu phản biện trước khi triển khai.
- matchms – Xử lý, làm sạch, so sánh và tìm kiếm phổ khối tandem bằng matchms. Dùng cho I/O file…
- heartmula – HeartMuLa: tạo bài hát kiểu Suno từ lời và thẻ (tags).
- here-now – Xuất bản trang web lên {slug}.here.now và lưu tệp trong Drives.
- public-relations – Khi người dùng cần hỗ trợ quan hệ công chúng, truyền thông earned, đưa tin báo chí, tiếp…