Scan Report
8 /100
whoop-guru
WHOOP AI Fitness Coach - LLM-powered personalized training plans for running, strength, and recovery
WHOOP Guru is a legitimate fitness/health management AI skill with proper credential handling, documented behavior, and no evidence of malicious activity.
Safe to install
The skill is safe to use. Users should ensure LLM API keys are from trusted providers and verify WHOOP OAuth credentials are properly secured.
Findings 2 items
| Severity | Finding | Location |
|---|---|---|
| Low | Python packages without version pinning Supply Chain | SKILL.md:198 |
| Low | Hardcoded paths in push scripts Doc Mismatch | scripts/push-morning.py:12 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Network | READ | READ | ✓ Aligned | SKILL.md declares WHOOP API access for health data |
| Filesystem | WRITE | WRITE | ✓ Aligned | SKILL.md declares local data storage in data/ directory |
| Shell | WRITE | WRITE | ✓ Aligned | SKILL.md declares subprocess usage for data sync and reporting |
| Environment | READ | READ | ✓ Aligned | SKILL.md declares OPENCLAW_WORKSPACE, WHOOP_DATA_DIR env vars |
| Skill Invoke | READ | READ | ✓ Aligned | SKILL.md declares cron-based push scheduling |
21 findings
Medium External URL 外部 URL
https://developer.whoop.com SKILL.md:147 Medium External URL 外部 URL
https://clawhub.com/skills/whoop-guru _meta.json:8 Medium External URL 外部 URL
https://api.prod.whoop.com/oauth/oauth2/auth?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=https://localhost:... docs/whoop_api_guide.md:17 Medium External URL 外部 URL
https://api.prod.whoop.com/oauth/oauth2/token docs/whoop_api_guide.md:32 Medium External URL 外部 URL
https://api.minimax.chat/v1/text/chatcompletion_pro lib/llm.py:41 Medium External URL 外部 URL
https://platform.minimaxi.com lib/llm.py:48 Medium External URL 外部 URL
https://platform.openai.com lib/llm.py:61 Medium External URL 外部 URL
https://console.anthropic.com lib/llm.py:74 Medium External URL 外部 URL
https://open.bigmodel.cn/api/paas/v4/chat/completions lib/llm.py:80 Medium External URL 外部 URL
https://open.bigmodel.cn lib/llm.py:87 Medium External URL 外部 URL
https://api.moonshot.cn/v1/chat/completions lib/llm.py:93 Medium External URL 外部 URL
https://platform.moonshot.cn lib/llm.py:100 Medium External URL 外部 URL
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation lib/llm.py:106 Medium External URL 外部 URL
https://dashscope.console.aliyun.com lib/llm.py:113 Medium External URL 外部 URL
https://api.deepseek.com/v1/chat/completions lib/llm.py:119 Medium External URL 外部 URL
https://platform.deepseek.com lib/llm.py:125 Medium External URL 外部 URL
https://api.siliconflow.cn/v1/chat/completions lib/llm.py:131 Medium External URL 外部 URL
https://cloud.siliconflow.cn lib/llm.py:138 Medium External URL 外部 URL
https://api.prod.whoop.com/developer/v2/$ lib/whoop-fetcher.sh:55 Medium External URL 外部 URL
https://api.prod.whoop.com/developer/v2 references/api.md:3 Medium External URL 外部 URL
https://api.prod.whoop.com/oauth/oauth2/auth references/api.md:10 File Tree
236 files · 572.5 KB · 17244 lines Python 46f · 13270L
JSON 179f · 2470L
Markdown 7f · 901L
Shell 4f · 603L
├─
▾
data
│ ├─
▾
config
│ │ ├─
llm_config.json
JSON
│ │ └─
README.md
Markdown
│ ├─
▾
logs
│ │ ├─
checkin_push.json
JSON
│ │ ├─
checkins_default.json
JSON
│ │ ├─
checkins_dongyi.json
JSON
│ │ ├─
checkins_sim_1775235937.json
JSON
│ │ ├─
checkins_test_df_1775235571.json
JSON
│ │ ├─
checkins_test_df_1775235657.json
JSON
│ │ ├─
checkins_test_df_1775235709.json
JSON
│ │ ├─
checkins_test_df_1775235737.json
JSON
│ │ ├─
checkins_test_df_1775236098.json
JSON
│ │ ├─
checkins_test_df_1775236441.json
JSON
│ │ ├─
checkins_test_df_1775236747.json
JSON
│ │ ├─
checkins_test_quick_1775235571.json
JSON
│ │ ├─
checkins_test_quick_1775235657.json
JSON
│ │ ├─
checkins_test_quick_1775235709.json
JSON
│ │ ├─
checkins_test_quick_1775235737.json
JSON
│ │ ├─
checkins_test_quick_1775236098.json
JSON
│ │ ├─
checkins_test_quick_1775236441.json
JSON
│ │ ├─
checkins_test_quick_1775236747.json
JSON
│ │ ├─
checkins_test_rest_1775235571.json
JSON
│ │ ├─
checkins_test_rest_1775235657.json
JSON
│ │ ├─
checkins_test_rest_1775235709.json
JSON
│ │ ├─
checkins_test_rest_1775235737.json
JSON
│ │ ├─
checkins_test_rest_1775236098.json
JSON
│ │ ├─
checkins_test_rest_1775236441.json
JSON
│ │ ├─
checkins_test_rest_1775236747.json
JSON
│ │ ├─
evening_push.json
JSON
│ │ ├─
morning_push.json
JSON
│ │ └─
running_default.json
JSON
│ ├─
▾
processed
│ │ ├─
health_advisor.json
JSON
│ │ └─
latest.json
JSON
│ └─
▾
profiles
│ ├─
goals_sim_1775235937.json
JSON
│ ├─
goals_simulation_test_1775224228.json
JSON
│ ├─
goals_test_user_1775190014.871542.json
JSON
│ ├─
goals_test_user_1775190014.873303.json
JSON
│ ├─
goals_test_user_1775190020.593088.json
JSON
│ ├─
goals_test_user_1775190020.594723.json
JSON
│ ├─
goals_test_user_1775190026.709988.json
JSON
│ ├─
goals_test_user_1775190026.711578.json
JSON
│ ├─
goals_test_user_1775190094.688879.json
JSON
│ ├─
goals_test_user_1775190094.690484.json
JSON
│ ├─
goals_test_user_1775190128.971156.json
JSON
│ ├─
goals_test_user_1775190128.972612.json
JSON
│ ├─
goals_test_user_1775223612.535238.json
JSON
│ ├─
goals_test_user_1775223612.540519.json
JSON
│ ├─
goals_test_user_1775223850.417576.json
JSON
│ ├─
goals_test_user_1775223850.422325.json
JSON
│ ├─
goals_test_user_1775223861.873993.json
JSON
│ ├─
goals_test_user_1775223861.878493.json
JSON
│ ├─
goals_test_user_1775224412.545972.json
JSON
│ ├─
goals_test_user_1775224412.550118.json
JSON
│ ├─
goals_test_user_1775224436.293886.json
JSON
│ ├─
goals_test_user_1775224436.29769.json
JSON
│ ├─
goals_test_user_1775224990.821541.json
JSON
│ ├─
goals_test_user_1775224990.826086.json
JSON
│ ├─
goals_test_user_1775225488.269679.json
JSON
│ ├─
goals_test_user_1775225488.273868.json
JSON
│ ├─
goals_test_user_1775228915.998868.json
JSON
│ ├─
goals_test_user_1775228916.004058.json
JSON
│ ├─
goals_test_user_1775235563.652806.json
JSON
│ ├─
goals_test_user_1775235563.656738.json
JSON
│ ├─
goals_test_user_1775235649.973712.json
JSON
│ ├─
goals_test_user_1775235649.977721.json
JSON
│ ├─
goals_test_user_1775235701.322221.json
JSON
│ ├─
goals_test_user_1775235701.326287.json
JSON
│ ├─
goals_test_user_1775235729.903555.json
JSON
│ ├─
goals_test_user_1775235729.907678.json
JSON
│ ├─
goals_test_user_1775236091.711606.json
JSON
│ ├─
goals_test_user_1775236091.715939.json
JSON
│ ├─
goals_test_user_1775236433.394682.json
JSON
│ ├─
goals_test_user_1775236433.398979.json
JSON
│ ├─
goals_test_user_1775236739.883587.json
JSON
│ ├─
goals_test_user_1775236739.887548.json
JSON
│ ├─
marathon_goals_dongyi.json
JSON
│ ├─
marathon_goals_sim_1775235937.json
JSON
│ ├─
marathon_goals_sim_report.json
JSON
│ ├─
marathon_goals_simulation_test_1775224228.json
JSON
│ ├─
marathon_goals_test_marathon_user.json
JSON
│ ├─
marathon_goals_test_user_1775223612.77021.json
JSON
│ ├─
marathon_goals_test_user_1775223612.794712.json
JSON
│ ├─
marathon_goals_test_user_1775223850.425143.json
JSON
│ ├─
marathon_goals_test_user_1775223850.449259.json
JSON
│ ├─
marathon_goals_test_user_1775223850.4524.json
JSON
│ ├─
marathon_goals_test_user_1775223850.454387.json
JSON
│ ├─
marathon_goals_test_user_1775223850.456401.json
JSON
│ ├─
marathon_goals_test_user_1775223850.603095.json
JSON
│ ├─
marathon_goals_test_user_1775223850.620433.json
JSON
│ ├─
marathon_goals_test_user_1775223861.881167.json
JSON
│ ├─
marathon_goals_test_user_1775223861.883149.json
JSON
│ ├─
marathon_goals_test_user_1775223861.885892.json
JSON
│ ├─
marathon_goals_test_user_1775223861.887832.json
JSON
│ ├─
marathon_goals_test_user_1775223861.88967.json
JSON
│ ├─
marathon_goals_test_user_1775223862.019138.json
JSON
│ ├─
marathon_goals_test_user_1775223862.033213.json
JSON
│ ├─
marathon_goals_test_user_1775224412.55296.json
JSON
│ ├─
marathon_goals_test_user_1775224412.554829.json
JSON
│ ├─
marathon_goals_test_user_1775224412.557506.json
JSON
│ ├─
marathon_goals_test_user_1775224412.559284.json
JSON
│ ├─
marathon_goals_test_user_1775224412.561096.json
JSON
│ ├─
marathon_goals_test_user_1775224412.687668.json
JSON
│ ├─
marathon_goals_test_user_1775224412.701859.json
JSON
│ ├─
marathon_goals_test_user_1775224436.30032.json
JSON
│ ├─
marathon_goals_test_user_1775224436.302031.json
JSON
│ ├─
marathon_goals_test_user_1775224436.304375.json
JSON
│ ├─
marathon_goals_test_user_1775224436.306063.json
JSON
│ ├─
marathon_goals_test_user_1775224436.309536.json
JSON
│ ├─
marathon_goals_test_user_1775224436.431787.json
JSON
│ ├─
marathon_goals_test_user_1775224436.444663.json
JSON
│ ├─
marathon_goals_test_user_1775224990.829856.json
JSON
│ ├─
marathon_goals_test_user_1775224990.83249.json
JSON
│ ├─
marathon_goals_test_user_1775224990.834953.json
JSON
│ ├─
marathon_goals_test_user_1775224990.836773.json
JSON
│ ├─
marathon_goals_test_user_1775224990.838613.json
JSON
│ ├─
marathon_goals_test_user_1775224990.965365.json
JSON
│ ├─
marathon_goals_test_user_1775224990.98028.json
JSON
│ ├─
marathon_goals_test_user_1775225488.276726.json
JSON
│ ├─
marathon_goals_test_user_1775225488.278449.json
JSON
│ ├─
marathon_goals_test_user_1775225488.281118.json
JSON
│ ├─
marathon_goals_test_user_1775225488.282935.json
JSON
│ ├─
marathon_goals_test_user_1775225488.284771.json
JSON
│ ├─
marathon_goals_test_user_1775225488.417398.json
JSON
│ ├─
marathon_goals_test_user_1775225488.436721.json
JSON
│ ├─
marathon_goals_test_user_1775228916.007649.json
JSON
│ ├─
marathon_goals_test_user_1775228916.00947.json
JSON
│ ├─
marathon_goals_test_user_1775228916.011914.json
JSON
│ ├─
marathon_goals_test_user_1775228916.01393.json
JSON
│ ├─
marathon_goals_test_user_1775228916.015983.json
JSON
│ ├─
marathon_goals_test_user_1775228916.741909.json
JSON
│ ├─
marathon_goals_test_user_1775228916.75809.json
JSON
│ ├─
marathon_goals_test_user_1775235563.659245.json
JSON
│ ├─
marathon_goals_test_user_1775235563.66086.json
JSON
│ ├─
marathon_goals_test_user_1775235563.663222.json
JSON
│ ├─
marathon_goals_test_user_1775235563.664927.json
JSON
│ ├─
marathon_goals_test_user_1775235563.666586.json
JSON
│ ├─
marathon_goals_test_user_1775235571.609469.json
JSON
│ ├─
marathon_goals_test_user_1775235571.62292.json
JSON
│ ├─
marathon_goals_test_user_1775235649.98016.json
JSON
│ ├─
marathon_goals_test_user_1775235649.981811.json
JSON
│ ├─
marathon_goals_test_user_1775235649.984217.json
JSON
│ ├─
marathon_goals_test_user_1775235649.985935.json
JSON
│ ├─
marathon_goals_test_user_1775235649.987605.json
JSON
│ ├─
marathon_goals_test_user_1775235657.853257.json
JSON
│ ├─
marathon_goals_test_user_1775235657.865517.json
JSON
│ ├─
marathon_goals_test_user_1775235701.328894.json
JSON
│ ├─
marathon_goals_test_user_1775235701.330562.json
JSON
│ ├─
marathon_goals_test_user_1775235701.333065.json
JSON
│ ├─
marathon_goals_test_user_1775235701.334847.json
JSON
│ ├─
marathon_goals_test_user_1775235701.336563.json
JSON
│ ├─
marathon_goals_test_user_1775235709.03311.json
JSON
│ ├─
marathon_goals_test_user_1775235709.045647.json
JSON
│ ├─
marathon_goals_test_user_1775235729.910301.json
JSON
│ ├─
marathon_goals_test_user_1775235729.911989.json
JSON
│ ├─
marathon_goals_test_user_1775235729.914506.json
JSON
│ ├─
marathon_goals_test_user_1775235729.91627.json
JSON
│ ├─
marathon_goals_test_user_1775235729.918016.json
JSON
│ ├─
marathon_goals_test_user_1775235737.519864.json
JSON
│ ├─
marathon_goals_test_user_1775235737.532806.json
JSON
│ ├─
marathon_goals_test_user_1775236091.719539.json
JSON
│ ├─
marathon_goals_test_user_1775236091.721291.json
JSON
│ ├─
marathon_goals_test_user_1775236091.72487.json
JSON
│ ├─
marathon_goals_test_user_1775236091.727523.json
JSON
│ ├─
marathon_goals_test_user_1775236091.729372.json
JSON
│ ├─
marathon_goals_test_user_1775236098.720422.json
JSON
│ ├─
marathon_goals_test_user_1775236098.733048.json
JSON
│ ├─
marathon_goals_test_user_1775236433.401645.json
JSON
│ ├─
marathon_goals_test_user_1775236433.403319.json
JSON
│ ├─
marathon_goals_test_user_1775236433.405917.json
JSON
│ ├─
marathon_goals_test_user_1775236433.40767.json
JSON
│ ├─
marathon_goals_test_user_1775236433.409459.json
JSON
│ ├─
marathon_goals_test_user_1775236441.04986.json
JSON
│ ├─
marathon_goals_test_user_1775236441.062876.json
JSON
│ ├─
marathon_goals_test_user_1775236739.890085.json
JSON
│ ├─
marathon_goals_test_user_1775236739.891664.json
JSON
│ ├─
marathon_goals_test_user_1775236739.894057.json
JSON
│ ├─
marathon_goals_test_user_1775236739.895713.json
JSON
│ ├─
marathon_goals_test_user_1775236739.897318.json
JSON
│ ├─
marathon_goals_test_user_1775236747.717868.json
JSON
│ └─
marathon_goals_test_user_1775236747.730483.json
JSON
├─
▾
docs
│ └─
whoop_api_guide.md
Markdown
├─
▾
lib
│ ├─
▾
coach
│ │ ├─
__init__.py
Python
│ │ └─
core.py
Python
│ ├─
▾
ml
│ │ ├─
__init__.py
Python
│ │ ├─
predictor.py
Python
│ │ └─
recovery_model.py
Python
│ ├─
▾
prompts
│ │ ├─
__init__.py
Python
│ │ ├─
injury.py
Python
│ │ ├─
recovery.py
Python
│ │ ├─
training.py
Python
│ │ └─
weekly.py
Python
│ ├─
▾
reports
│ │ └─
weekly.py
Python
│ ├─
__init__.py
Python
│ ├─
checkin_auto.py
Python
│ ├─
cli.py
Python
│ ├─
coach_interface.py
Python
│ ├─
comprehensive_analysis.py
Python
│ ├─
daily-report.sh
Shell
│ ├─
data_cleaner.py
Python
│ ├─
data_processor.py
Python
│ ├─
detailed-report.sh
Shell
│ ├─
dynamic_planner.py
Python
│ ├─
enhanced_report.py
Python
│ ├─
enhanced_reports.py
Python
│ ├─
feedback_learning.py
Python
│ ├─
goals_marathon.py
Python
│ ├─
goals.py
Python
│ ├─
health_advisor.py
Python
│ ├─
health_score.py
Python
│ ├─
llm.py
Python
│ ├─
marathon_analyzer.py
Python
│ ├─
marathon_commands.py
Python
│ ├─
ml_predictor.py
Python
│ ├─
needs_analyzer.py
Python
│ ├─
notifications.py
Python
│ ├─
plan_generator.py
Python
│ ├─
pusher.py
Python
│ ├─
sync.py
Python
│ ├─
tracker.py
Python
│ ├─
tz.py
Python
│ ├─
user_profile.py
Python
│ └─
whoop-fetcher.sh
Shell
├─
▾
references
│ ├─
api.md
Markdown
│ └─
health_analysis.md
Markdown
├─
▾
scripts
│ ├─
coach-push.sh
Shell
│ ├─
push-checkin.py
Python
│ ├─
push-evening.py
Python
│ ├─
push-morning.py
Python
│ ├─
whoop_auth.py
Python
│ ├─
whoop_chart.py
Python
│ └─
whoop_data.py
Python
├─
▾
tests
│ └─
test_all.py
Python
├─
_meta.json
JSON
├─
CLAWHUB.md
Markdown
├─
icon_prompt.md
Markdown
├─
SKILL.md
Markdown
└─
whoop-guru.py
Python
Dependencies 3 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
requests | * | pip | No | Version not pinned - recommend minimum version constraint |
pandas | * | pip | No | Version not pinned - recommend minimum version constraint |
matplotlib | * | pip | No | Version not pinned - recommend minimum version constraint |
Security Positives
✓ Comprehensive SKILL.md documentation with clear feature declarations
✓ Proper credential storage with file permissions (chmod 0o600) for whoop-tokens.json
✓ Security fix noted in v8.2.4 for shell injection vulnerability
✓ No base64-encoded commands or obfuscation detected
✓ No access to sensitive paths like ~/.ssh, ~/.aws, or .env files
✓ No reverse shell or C2 communication patterns
✓ No credential harvesting beyond declared WHOOP OAuth tokens
✓ Subprocess usage is legitimate for data sync (declared and documented)
✓ Network requests limited to WHOOP API and user-configured LLM endpoints
✓ Version history shows active security maintenance