内容
<p align="center">
<img src="public/logo.svg" width="88" alt="Recover logo">
</p>
<h1 align="center">Recover</h1>
<p align="center"><b>您的训练和恢复,尽在一处宁静之地 — 自主托管,免费。</b></p>
<p align="center">
<a href="https://github.com/crunchynapkin404/Recover/actions/workflows/ci.yml"><img src="https://github.com/crunchynapkin404/Recover/actions/workflows/ci.yml/badge.svg" alt="持续集成"></a>
<a href="https://github.com/crunchynapkin404/Recover/releases"><img src="https://img.shields.io/github/v/release/crunchynapkin404/Recover" alt="发布版本"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue" alt="许可证:AGPL-3.0"></a>
</p>
<p align="center">
<img src="docs/screenshots/dashboard.png" width="24%" alt="带有准备度评分的仪表盘">
<img src="docs/screenshots/coach.png" width="24%" alt="AI教练聊天,引用实际指标">
<img src="docs/screenshots/log.png" width="24%" alt="具有训练压力平衡的性能日志">
<img src="docs/screenshots/journal.png" width="24%" alt="行为日记,带有健康滑块">
</p>
Recover是一款健康和训练伴侣,您可以在自己的硬件上运行:准备度评分、训练负荷、行为日记和AI教练 — 无需订阅、无需可穿戴设备锁定,也无需其他人持有您的数据。它从intervals.icu拉取健康数据(心率变异性、静息心率、睡眠)和活动数据到您自己的Postgres中,根据您的个人基线计算每日准备度评分 — 而不是人群规范 — 并在一個宁静的仪表盘上显示。
## 您的Claude,您的训练数据
我们最关心的部分:Recover自带一个**内置MCP服务器**,因此claude.ai、Claude Code或任何MCP客户端都可以使用范围限定、可撤销的令牌读取您的准备度、健康状况和训练负荷。
> **您:** 本周过得怎么样?明天我还应该进行间歇训练吗?
>
> **Claude** _(通过您的Recover MCP连接器)_: 您的准备度为66(琥珀色)— 心率变异性为63.8毫秒,基准值为65毫秒,TSB在周六的长途骑行后为-1.9…
应用内的教练使用相同的工具和您自己的LLM密钥 — Anthropic 或任何兼容OpenAI的端点,包括一个完全本地的Ollama。密钥在数据库中加密(AES-256-GCM);没有任何数据会发送到服务器。
## 功能
- **准备度评分**,基于60天的滚动个人基线:心率变异性(40%)、静息心率(25%)、睡眠(20%)、表单/TSB(15%)— 具有诚实的“校准”状态,直到有足够的历史数据,并有组件分解解释每个评分。
- **intervals.icu同步** — 健康数据、活动和训练负荷,通过进程内调度器保持更新。**Strava OAuth** 作为第二个数据源,具有溯源跟踪(默认情况下,Strava数据不包含在AI上下文中,符合Strava的API条款)。
- **分析深度** — 打开任意活动以查看流图表(心率、功率、配速、海拔)和圈数;使用CTL/ATL/TSB在30-365天范围内跟踪健身;查看心率变异性、静息心率和睡眠趋势与个人基线对比。
- **AI教练** — 基于证据的耐力教练角色,引用您的数据中的实际数字,根据您的准备度带调整语气,拒绝在受伤或生病时编程。 自带密钥:Anthropic 或任何兼容OpenAI的端点(包括 Ollama)。 功能:
- **教练记忆** — 持久的知识存储(目标、伤害、赛程)注入每个对话
- **思考模式** — 快速(俳句/闪电)或深入(作品/十四行诗)每条消息
- **主动洞察** — 根据夜间同步数据生成的早晨消息,在仪表盘上可见
- **幽灵模式** — 短暂的线程,在24小时后自动清除
- **个性** — 分析型、鼓励型或直接型语气预设
- **过度训练警告** — 持续心率变异性抑制或静息心率激增的自动警报
- **MCP服务器** — 无状态的可流式HTTP端点,位于`/api/mcp`,具有哈希、范围限定(`读取` / `写入:健康`)、可撤销的承载令牌和速率限制。 14种工具:准备度、健康状况、健身摘要、训练负荷(每周负荷/持续时间/趋势 + CTL/ATL/TSB)、功率曲线、配速曲线、最佳表现、活动详情、活动列表、运动员资料、日志健康、记住/忘记(教练记忆)。
- **可安装的PWA** — 将其添加到手机的主屏幕;推送通知每天早上为您提供准备度评分,根据需求拉取或刷新数据。
- **行为日记** — 情绪、能量、酸痛、压力、标签和笔记,伴随同步生命体征。
- **多用户,邀请制** — 为一个所有者和少数朋友构建,具有完全的数据隔离。
- **无聊的操作** — 一个应用容器加上Postgres。 无Redis,无队列,幂等同步作业,健康端点,迁移在启动时自动应用。
## 快速入门
```bash
git clone https://github.com/crunchynapkin404/Recover.git
cd Recover
cp .env.example .env # 然后设置ENCRYPTION_KEY、BETTER_AUTH_SECRET、OWNER_EMAIL、OWNER_PASSWORD
docker compose up -d
```
打开 http://localhost:3000,使用所有者凭证登录,并在 **设置 → intervals.icu** 下粘贴您的intervals.icu API密钥。详细信息、隧道设置、升级和故障排除:[docs/SELF-HOSTING.md](docs/SELF-HOSTING.md)。
想在没有真实数据的情况下探索?`SEED_DEMO=1 npm run db:seed-demo` 填充了一个演示账户,包含90天的合理训练历史(参见 [CONTRIBUTING.md](CONTRIBUTING.md))。
## 连接Claude
1. **设置 → MCP API令牌** → 创建一个令牌(显示一次)。
2. 暴露您的实例(内置Cloudflare隧道配置文件)或在局域网中使用。
3. 在claude.ai(或 `claude mcp add --transport http` )中添加一个自定义连接器,指向您的实例的`/api/mcp`端点,使用令牌作为承载令牌。
**实时演示实例:** [recover.bartabraas.nl](https://recover.bartabraas.nl/) 4. 向Claude询问您的训练情况。
## 状态和路线图
**当前版本:v0.4.0** — 教练智能。 完整的堆栈:同步、准备度、仪表盘、日记、分析深度、可安装的PWA,带有晨间推送通知、AI教练,具备记忆/个性/主动洞察,14个MCP工具,包括功率/配速曲线和最佳表现。接下来是:训练智能(v0.5)— AI生成的分期计划、日历集成和内联图表神器。完整计划位于 [docs/ROADMAP.md](docs/ROADMAP.md)。
一个诚实的爱好者项目,为一个所有者和大约十个朋友打造。 如果它对您有用,请自行托管并使其成为您自己的。 问题和PR欢迎 — 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 技术栈
Next.js 16 · TypeScript · Postgres + Drizzle · Better Auth · Tailwind + shadcn · Recharts · Vercel AI SDK · @modelcontextprotocol/sdk
## 许可证
AGPL-3.0 — 请参阅 [LICENSE](LICENSE)。