Build integrated IS/BS/CF financial workbooks in Excel.
中文简介正在准备中。当前显示原文说明。
Gym workout planner and nutrition tracker. Search 690+ exercises by muscle, equipment, or category via wger. Look up macros and calories for 380,000+ foods via USDA FoodData Central. Compute BMI, TDEE, one-rep max, macro splits, and body fat — pure Python, no pip installs. Built for anyone chasing gains, cutting weight, or just trying to eat better.
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法安装前可以查看交给 AI 代理的指令内容。
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):
DEMO_KEY works instantly; free signup for higher limits.Offline calculators (pure stdlib Python):
Trigger this skill when the user asks about:
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:
/api/v2/exercise/?muscles={id}&language=2&status=2&format=json/api/v2/exercise/?category={id}&language=2&status=2&format=json/api/v2/exercise/?equipment={id}&language=2&status=2&format=json/api/v2/exercise/search/?term={query}&language=english&format=json/api/v2/exerciseinfo/{exercise_id}/?format=jsonStep 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=$(python3 -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" \
| python3 -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" \
| python3 -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" \
| python3 -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',[])}\")
"
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=$(python3 -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" \
| python3 -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}" \
| python3 -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','')}\")
"
Use the helper scripts in scripts/ for batch operations,
or run inline for single calculations:
python3 scripts/body_calc.py bmi <weight_kg> <height_cm>python3 scripts/body_calc.py tdee <weight_kg> <height_cm> <age> <M|F> <activity 1-5>python3 scripts/body_calc.py 1rm <weight> <reps>python3 scripts/body_calc.py macros <tdee_kcal> <cut|maintain|bulk>python3 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.
language=2 for Englishstatus=2 to only get approved exercisesDEMO_KEY has 30 req/hour — add sleep 2 between batch requests or get a free keyexercise/search endpoint uses term not query as the parameter nameAfter 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).
| 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 | python3 scripts/body_calc.py |
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Build integrated IS/BS/CF financial workbooks in Excel.
中文简介正在准备中。当前显示原文说明。
Run and grow the OpenAmer Agent-to-Agent swarm: identity, trust, node-to-node ask, signed skill/insight sharing, and the autonomous self-learning loop.
中文简介正在准备中。当前显示原文说明。
Use for A/B experiments on OpenAmer configs and skills.
中文简介正在准备中。当前显示原文说明。
Roleplay a hostile user to find and triage UX pain points.
中文简介正在准备中。当前显示原文说明。
Agent mesh: master/worker nodes, HTTP delegation, heartbeat.
中文简介正在准备中。当前显示原文说明。
Use for agentic commerce payments tasks. Candidate synthesized from trend radar; awaiting trial promotion.
中文简介正在准备中。当前显示原文说明。