低风险 — 风险评分 8/100
上次扫描:1 天前 重新扫描
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.
技能名称whoop-guru
分析耗时57.2s
引擎pi
可以安装
The skill is safe to use. Users should ensure LLM API keys are from trusted providers and verify WHOOP OAuth credentials are properly secured.

安全发现 2 项

严重性 安全发现 位置
低危
Python packages without version pinning 供应链
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
低危
Hardcoded paths in push scripts 文档欺骗
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
资源类型声明权限推断权限状态证据
网络访问 READ READ ✓ 一致 SKILL.md declares WHOOP API access for health data
文件系统 WRITE WRITE ✓ 一致 SKILL.md declares local data storage in data/ directory
命令执行 WRITE WRITE ✓ 一致 SKILL.md declares subprocess usage for data sync and reporting
环境变量 READ READ ✓ 一致 SKILL.md declares OPENCLAW_WORKSPACE, WHOOP_DATA_DIR env vars
技能调用 READ READ ✓ 一致 SKILL.md declares cron-based push scheduling
21 项发现
🔗
中危 外部 URL 外部 URL
https://developer.whoop.com
SKILL.md:147
🔗
中危 外部 URL 外部 URL
https://clawhub.com/skills/whoop-guru
_meta.json:8
🔗
中危 外部 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
🔗
中危 外部 URL 外部 URL
https://api.prod.whoop.com/oauth/oauth2/token
docs/whoop_api_guide.md:32
🔗
中危 外部 URL 外部 URL
https://api.minimax.chat/v1/text/chatcompletion_pro
lib/llm.py:41
🔗
中危 外部 URL 外部 URL
https://platform.minimaxi.com
lib/llm.py:48
🔗
中危 外部 URL 外部 URL
https://platform.openai.com
lib/llm.py:61
🔗
中危 外部 URL 外部 URL
https://console.anthropic.com
lib/llm.py:74
🔗
中危 外部 URL 外部 URL
https://open.bigmodel.cn/api/paas/v4/chat/completions
lib/llm.py:80
🔗
中危 外部 URL 外部 URL
https://open.bigmodel.cn
lib/llm.py:87
🔗
中危 外部 URL 外部 URL
https://api.moonshot.cn/v1/chat/completions
lib/llm.py:93
🔗
中危 外部 URL 外部 URL
https://platform.moonshot.cn
lib/llm.py:100
🔗
中危 外部 URL 外部 URL
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
lib/llm.py:106
🔗
中危 外部 URL 外部 URL
https://dashscope.console.aliyun.com
lib/llm.py:113
🔗
中危 外部 URL 外部 URL
https://api.deepseek.com/v1/chat/completions
lib/llm.py:119
🔗
中危 外部 URL 外部 URL
https://platform.deepseek.com
lib/llm.py:125
🔗
中危 外部 URL 外部 URL
https://api.siliconflow.cn/v1/chat/completions
lib/llm.py:131
🔗
中危 外部 URL 外部 URL
https://cloud.siliconflow.cn
lib/llm.py:138
🔗
中危 外部 URL 外部 URL
https://api.prod.whoop.com/developer/v2/$
lib/whoop-fetcher.sh:55
🔗
中危 外部 URL 外部 URL
https://api.prod.whoop.com/developer/v2
references/api.md:3
🔗
中危 外部 URL 外部 URL
https://api.prod.whoop.com/oauth/oauth2/auth
references/api.md:10

目录结构

236 文件 · 572.5 KB · 17244 行
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

依赖分析 3 项

包名版本来源已知漏洞备注
requests * pip Version not pinned - recommend minimum version constraint
pandas * pip Version not pinned - recommend minimum version constraint
matplotlib * pip Version not pinned - recommend minimum version constraint

安全亮点

✓ 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