Low Risk — Risk Score 8/100
Last scan:1 day ago Rescan
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.
Skill Namewhoop-guru
Duration57.2s
Enginepi
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 declares 'requests, pandas, matplotlib' without version constraints. Using wildcard versions could introduce unexpected behavior if dependencies are updated.
pip install requests pandas matplotlib
→ Consider pinning versions: requests>=2.28.0, pandas>=1.5.0, matplotlib>=3.5.0
SKILL.md:198
Low
Hardcoded paths in push scripts Doc Mismatch
scripts/push-morning.py and scripts/push-checkin.py contain hardcoded absolute paths instead of using relative paths or environment variables.
sys.path.insert(0, '/root/.openclaw/workspace-healthgao/skill/whoop-guru')
→ Use dynamic path resolution based on environment variables or script directory
scripts/push-morning.py:12
ResourceDeclaredInferredStatusEvidence
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 1L · 3 B
│ │ └─ 📝 README.md Markdown 7L · 448 B
│ ├─ 📁 logs
│ │ ├─ 📋 checkin_push.json JSON 4L · 2.6 KB
│ │ ├─ 📋 checkins_default.json JSON 363L · 10.2 KB
│ │ ├─ 📋 checkins_dongyi.json JSON 12L · 284 B
│ │ ├─ 📋 checkins_sim_1775235937.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775235571.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775235657.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775235709.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775235737.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775236098.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775236441.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_df_1775236747.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775235571.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775235657.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775235709.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775235737.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775236098.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775236441.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_quick_1775236747.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775235571.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775235657.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775235709.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775235737.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775236098.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775236441.json JSON 2L · 20 B
│ │ ├─ 📋 checkins_test_rest_1775236747.json JSON 2L · 20 B
│ │ ├─ 📋 evening_push.json JSON 4L · 2.0 KB
│ │ ├─ 📋 morning_push.json JSON 4L · 2.2 KB
│ │ └─ 📋 running_default.json JSON 283L · 7.5 KB
│ ├─ 📁 processed
│ │ ├─ 📋 health_advisor.json JSON 35L · 801 B
│ │ └─ 📋 latest.json JSON 7L · 126 B
│ └─ 📁 profiles
│ ├─ 📋 goals_sim_1775235937.json JSON 14L · 336 B
│ ├─ 📋 goals_simulation_test_1775224228.json JSON 14L · 347 B
│ ├─ 📋 goals_test_user_1775190014.871542.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775190014.873303.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775190020.593088.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775190020.594723.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775190026.709988.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775190026.711578.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775190094.688879.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775190094.690484.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775190128.971156.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775190128.972612.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775223612.535238.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775223612.540519.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775223850.417576.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775223850.422325.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775223861.873993.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775223861.878493.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775224412.545972.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775224412.550118.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775224436.293886.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775224436.29769.json JSON 14L · 373 B
│ ├─ 📋 goals_test_user_1775224990.821541.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775224990.826086.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775225488.269679.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775225488.273868.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775228915.998868.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775228916.004058.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775235563.652806.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775235563.656738.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775235649.973712.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775235649.977721.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775235701.322221.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775235701.326287.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775235729.903555.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775235729.907678.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775236091.711606.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775236091.715939.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775236433.394682.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775236433.398979.json JSON 14L · 374 B
│ ├─ 📋 goals_test_user_1775236739.883587.json JSON 1L · 2 B
│ ├─ 📋 goals_test_user_1775236739.887548.json JSON 14L · 374 B
│ ├─ 📋 marathon_goals_dongyi.json JSON 22L · 536 B
│ ├─ 📋 marathon_goals_sim_1775235937.json JSON 22L · 544 B
│ ├─ 📋 marathon_goals_sim_report.json JSON 22L · 540 B
│ ├─ 📋 marathon_goals_simulation_test_1775224228.json JSON 22L · 556 B
│ ├─ 📋 marathon_goals_test_marathon_user.json JSON 22L · 548 B
│ ├─ 📋 marathon_goals_test_user_1775223612.77021.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223612.794712.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223850.425143.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775223850.449259.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223850.4524.json JSON 19L · 485 B
│ ├─ 📋 marathon_goals_test_user_1775223850.454387.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775223850.456401.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775223850.603095.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223850.620433.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223861.881167.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775223861.883149.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223861.885892.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775223861.887832.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775223861.88967.json JSON 19L · 486 B
│ ├─ 📋 marathon_goals_test_user_1775223862.019138.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775223862.033213.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224412.55296.json JSON 22L · 556 B
│ ├─ 📋 marathon_goals_test_user_1775224412.554829.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224412.557506.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775224412.559284.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775224412.561096.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775224412.687668.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224412.701859.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224436.30032.json JSON 22L · 556 B
│ ├─ 📋 marathon_goals_test_user_1775224436.302031.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224436.304375.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775224436.306063.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775224436.309536.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775224436.431787.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224436.444663.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224990.829856.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775224990.83249.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224990.834953.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775224990.836773.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775224990.838613.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775224990.965365.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775224990.98028.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775225488.276726.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775225488.278449.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775225488.281118.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775225488.282935.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775225488.284771.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775225488.417398.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775225488.436721.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775228916.007649.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775228916.00947.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775228916.011914.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775228916.01393.json JSON 22L · 552 B
│ ├─ 📋 marathon_goals_test_user_1775228916.015983.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775228916.741909.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775228916.75809.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235563.659245.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775235563.66086.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235563.663222.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235563.664927.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775235563.666586.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235571.609469.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235571.62292.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235649.98016.json JSON 22L · 556 B
│ ├─ 📋 marathon_goals_test_user_1775235649.981811.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235649.984217.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235649.985935.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775235649.987605.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235657.853257.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235657.865517.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235701.328894.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775235701.330562.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235701.333065.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235701.334847.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775235701.336563.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235709.03311.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235709.045647.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235729.910301.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775235729.911989.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235729.914506.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235729.91627.json JSON 22L · 552 B
│ ├─ 📋 marathon_goals_test_user_1775235729.918016.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775235737.519864.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775235737.532806.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236091.719539.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775236091.721291.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236091.72487.json JSON 19L · 486 B
│ ├─ 📋 marathon_goals_test_user_1775236091.727523.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775236091.729372.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775236098.720422.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236098.733048.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236433.401645.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775236433.403319.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236433.405917.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775236433.40767.json JSON 22L · 552 B
│ ├─ 📋 marathon_goals_test_user_1775236433.409459.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775236441.04986.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236441.062876.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236739.890085.json JSON 22L · 557 B
│ ├─ 📋 marathon_goals_test_user_1775236739.891664.json JSON 1L · 2 B
│ ├─ 📋 marathon_goals_test_user_1775236739.894057.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775236739.895713.json JSON 22L · 553 B
│ ├─ 📋 marathon_goals_test_user_1775236739.897318.json JSON 19L · 487 B
│ ├─ 📋 marathon_goals_test_user_1775236747.717868.json JSON 1L · 2 B
│ └─ 📋 marathon_goals_test_user_1775236747.730483.json JSON 1L · 2 B
├─ 📁 docs
│ └─ 📝 whoop_api_guide.md Markdown 66L · 1.3 KB
├─ 📁 lib
│ ├─ 📁 coach
│ │ ├─ 🐍 __init__.py Python 0 B
│ │ └─ 🐍 core.py Python 261L · 10.0 KB
│ ├─ 📁 ml
│ │ ├─ 🐍 __init__.py Python 22L · 446 B
│ │ ├─ 🐍 predictor.py Python 335L · 10.9 KB
│ │ └─ 🐍 recovery_model.py Python 312L · 9.6 KB
│ ├─ 📁 prompts
│ │ ├─ 🐍 __init__.py Python 67L · 1.6 KB
│ │ ├─ 🐍 injury.py Python 72L · 1.7 KB
│ │ ├─ 🐍 recovery.py Python 73L · 1.6 KB
│ │ ├─ 🐍 training.py Python 163L · 4.2 KB
│ │ └─ 🐍 weekly.py Python 85L · 1.6 KB
│ ├─ 📁 reports
│ │ └─ 🐍 weekly.py Python 175L · 6.1 KB
│ ├─ 🐍 __init__.py Python 0 B
│ ├─ 🐍 checkin_auto.py Python 388L · 12.5 KB
│ ├─ 🐍 cli.py Python 96L · 3.0 KB
│ ├─ 🐍 coach_interface.py Python 370L · 10.2 KB
│ ├─ 🐍 comprehensive_analysis.py Python 133L · 4.3 KB
│ ├─ 🔧 daily-report.sh Shell 239L · 10.7 KB
│ ├─ 🐍 data_cleaner.py Python 146L · 4.7 KB
│ ├─ 🐍 data_processor.py Python 157L · 4.8 KB
│ ├─ 🔧 detailed-report.sh Shell 249L · 11.5 KB
│ ├─ 🐍 dynamic_planner.py Python 274L · 8.9 KB
│ ├─ 🐍 enhanced_report.py Python 215L · 7.2 KB
│ ├─ 🐍 enhanced_reports.py Python 711L · 27.1 KB
│ ├─ 🐍 feedback_learning.py Python 422L · 14.1 KB
│ ├─ 🐍 goals_marathon.py Python 260L · 8.1 KB
│ ├─ 🐍 goals.py Python 702L · 24.0 KB
│ ├─ 🐍 health_advisor.py Python 232L · 7.9 KB
│ ├─ 🐍 health_score.py Python 77L · 2.7 KB
│ ├─ 🐍 llm.py Python 793L · 27.7 KB
│ ├─ 🐍 marathon_analyzer.py Python 637L · 22.3 KB
│ ├─ 🐍 marathon_commands.py Python 527L · 16.9 KB
│ ├─ 🐍 ml_predictor.py Python 136L · 4.3 KB
│ ├─ 🐍 needs_analyzer.py Python 699L · 24.8 KB
│ ├─ 🐍 notifications.py Python 89L · 2.7 KB
│ ├─ 🐍 plan_generator.py Python 318L · 8.9 KB
│ ├─ 🐍 pusher.py Python 652L · 28.7 KB
│ ├─ 🐍 sync.py Python 177L · 5.8 KB
│ ├─ 🐍 tracker.py Python 768L · 25.3 KB
│ ├─ 🐍 tz.py Python 80L · 2.3 KB
│ ├─ 🐍 user_profile.py Python 133L · 4.0 KB
│ └─ 🔧 whoop-fetcher.sh Shell 75L · 2.2 KB
├─ 📁 references
│ ├─ 📝 api.md Markdown 47L · 2.1 KB
│ └─ 📝 health_analysis.md Markdown 212L · 7.8 KB
├─ 📁 scripts
│ ├─ 🔧 coach-push.sh Shell 40L · 965 B
│ ├─ 🐍 push-checkin.py Python 48L · 1.0 KB
│ ├─ 🐍 push-evening.py Python 49L · 1.0 KB
│ ├─ 🐍 push-morning.py Python 49L · 1.1 KB
│ ├─ 🐍 whoop_auth.py Python 303L · 9.5 KB
│ ├─ 🐍 whoop_chart.py Python 890L · 33.1 KB
│ └─ 🐍 whoop_data.py Python 294L · 9.3 KB
├─ 📁 tests
│ └─ 🐍 test_all.py Python 827L · 31.1 KB
├─ 📋 _meta.json JSON 83L · 3.9 KB
├─ 📝 CLAWHUB.md Markdown 166L · 4.9 KB
├─ 📝 icon_prompt.md Markdown 37L · 1.1 KB
├─ 📝 SKILL.md Markdown 366L · 11.6 KB
└─ 🐍 whoop-guru.py Python 53L · 1.8 KB

Dependencies 3 items

PackageVersionSourceKnown VulnsNotes
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