扫描报告
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.
可以安装
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:198 |
| 低危 | Hardcoded paths in push scripts 文档欺骗 | 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
│ │ └─
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
依赖分析 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