内容
# VibeLearning
**边写代码边学习** - 面向 AI 编程代理的间隔重复学习系统
将你的编码过程变成学习机会。VibeLearning 会自动向你提问关于你正在使用的概念,帮助你真正理解你写的代码,并得到 AI 的辅助。
## 目录
- [功能](#功能)
- [工作原理](#工作原理)
- [架构](#架构)
- [支持的平台](#支持的平台)
- [安装](#安装)
- [使用](#使用)
- [命令](#学习命令)
- [学习模式](#学习模式)
- [学习等级](#学习等级)
- [常见问题](#常见问题)
- [开发](#开发)
- [卸载](#卸载)
- [许可证](#许可证)
## 功能
- **自动学习触发**: 只需安装,它就会在所有会话中自动工作
- **SM-2 算法**: 科学的间隔重复(类似 Anki)
- **5 级系统**: 识别 → 理解 → 比较 → 边缘情况 → 架构
- **疲劳管理**: 15 分钟冷却时间,连续跳过后自动暂停
- **未知未知**: 跟踪你不知道自己不知道的概念
- **报告导出**: 将学习报告保存为 Markdown 文件
## 工作原理
1. **请求任务** 从你的 AI 编程代理
2. **AI 提出 2-3 个问题** 关于你的方法(高级模式)
3. **解释你的理由** - 为什么选择这种方法?有哪些替代方案?
4. **AI 实现** 在你展示理解后
5. **任务后问题** 加强学习(任务后模式)
6. **进度跟踪** 使用间隔重复以实现最佳保留
## 架构
```
┌───────────────────────────────────────────────────────────┐
│ VibeLearning │
├───────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ OpenCode │ │ Claude Code │ │ Cursor │ │
│ │ (插件) │ │(插件+钩子)│ │ (MCP) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ MCP 服务器(核心) │ │
│ │ - SM-2 算法 │ │
│ │ - SQLite 数据库 │ │
│ │ - 14 个工具 │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────┘
```
## 支持的平台
| 平台 | 自动安装 | 功能 |
|----------|--------------|----------|
| **OpenCode** | ✅ | 插件 + MCP + /learn 命令 |
| **Claude Code** | ✅ | 插件 + 钩子 + MCP + /learn 命令 |
| Cursor | 📋 手动 | 仅 MCP 服务器 |
| Cline | 📋 手动 | 仅 MCP 服务器 |
## 安装
### OpenCode
```bash
# 为 OpenCode 安装 VibeLearning
npx vibe-learning install opencode
# 重启 OpenCode 以应用更改
```
**安装内容:**
- MCP 服务器在 `~/.config/opencode/opencode.json`
- 插件:`vibe-learning-opencode`(通过 npm 自动安装)
- 命令:`~/.config/opencode/command/learn.md`(用于自动补全)
- 插件通过 chat.message 钩子处理所有 `/learn` 命令
### Claude Code
1. 打开 Claude Code 并运行 `/plugins`
2. 进入 **市场** 选项卡
3. 点击 **+ 添加市场**
4. 输入:`12OneTwo12/vibe-learning`
5. 进入 **发现** 选项卡
6. 选择 **vibe-learning** 并输入 **安装**
7. 重启 Claude Code
**安装内容:**
- MCP 服务器(通过 `.mcp.json`)
- 钩子:SessionStart, PostToolUse, Stop
- 命令:`/vibe-learning:learn`
**自动批准 MCP 权限(推荐):**
Claude Code 在每个新会话中都会请求 MCP 工具权限。要跳过此步骤,请在 `~/.claude/settings.json` 中添加:
```json
{
"permissions": {
"allow": ["mcp__vibe-learning"]
}
}
```
### 手动安装(Cursor, Cline 等)
将以下内容添加到你的 MCP 配置中:
```json
{
"mcpServers": {
"vibe-learning": {
"command": "npx",
"args": ["-y", "vibe-learning", "serve"]
}
}
}
```
### 检查状态
```bash
npx vibe-learning status
```
## 使用
### /learn 命令
<img alt="VibeLearning 命令" src="https://github.com/user-attachments/assets/57d329f4-812b-405f-89ab-de27b720e419" />
OpenCode 和 Claude Code 都支持 `/learn` 命令:
#### 状态和控制
| 命令 | 描述 |
|---------|-------------|
| `/learn` | 显示当前状态 |
| `/learn on` | 完整学习模式(高级 + 任务后,默认) |
| `/learn off` | 关闭学习(继续记录) |
| `/learn senior` | 启用高级模式(实施前问题) |
| `/learn senior off` | 禁用高级模式 |
| `/learn after` | 启用任务后模式(实施后问题) |
| `/learn after off` | 禁用任务后模式 |
| `/learn pause` | 暂停 1 小时 |
| `/learn focus [area]` | 将问题集中在特定区域 |
#### 统计和报告
| 命令 | 描述 |
|---------|-------------|
| `/learn stats` | 学习统计仪表盘 |
| `/learn report` | 每周学习报告 |
| `/learn report month` | 每月学习报告 |
| `/learn report --save` | 将报告保存为 Markdown 文件 |
| `/learn unknowns` | 未知未知仪表盘 |
| `/learn unknowns --save` | 将未知未知保存为 Markdown 文件 |
| `/learn review` | 开始复习到期概念 |
| `/learn interview` | 面试练习模式 |
### 学习模式
VibeLearning 使用两个独立的开关:
| 开关 | 默认值 | 行为 |
|--------|---------|----------|
| **高级模式** | ✅ 开启 | 实施前提问(2-3 轮) |
| **任务后模式** | ✅ 开启 | 任务完成后间隔重复提问 |
**模式组合:**
| 高级模式 | 任务后模式 | 结果 |
|--------|-------|--------|
| ✅ | ✅ | 完整学习(默认)- 实施前和实施后都有问题 |
| ✅ | ❌ | 仅高级模式 - 深入实施前审查 |
| ❌ | ✅ | 仅任务后模式 - 快速任务后问题 |
| ❌ | ❌ | 关闭 - 无问题(继续记录) |
#### 高级模式
模拟严格的高级开发人员审查你的决策:
```
**[VibeLearning 高级模式]**
[第 1/3 轮] 为什么选择这种方法?
[第 2/3 轮] 你考虑了哪些替代方案?权衡利弊?
[第 3/3 轮] (如有必要)提示:... 你怎么认为?
思考得很好! [总结]。现在实施。
```
<img alt="高级模式示例" src="https://github.com/user-attachments/assets/4f73617b-9a82-4cfa-a6b9-3788a152e0b0" />
- **至少 2 轮** - 不会在第一个答案上跳过实施
- **严格评估** - 只有在你展示理解时才会继续
- **教育总结** - 在实施前提供简要解释
- **然后实施** - 完成轮次后,AI 继续实施
#### 任务后模式
在任务完成后提出间隔重复问题:
```
**[VibeLearning]**
_学习问题(第 3 级)_
JWT 和基于会话的身份验证之间有什么区别?
```
<img alt="任务后模式示例" src="https://github.com/user-attachments/assets/e0dcaaf0-18e4-4d75-837f-edd822327d27" />
- **SM-2 调度** - 根据你的答案安排复习
- **复习链接** - 可能会在回答后提出一个到期复习问题
- **疲劳管理** - 15 分钟冷却时间,连续跳过 2 次后自动暂停
### 学习等级
| 等级 | 名称 | 问题样式 |
|-------|------|---------------|
| 1 | 识别 | “你知道 X 是什么吗?” |
| 2 | 理解 | “你能解释 X 是如何工作的吗?” |
| 3 | 比较 | “什么时候使用 X 而不是 Y?” |
| 4 | 边缘情况 | “X 有哪些陷阱?” |
| 5 | 架构 | “你如何在规模上设计 X?” |
**新概念从 3 级开始** 以尊重经验丰富的开发人员。
### 回答问题
当被提出学习问题时,自然地回答。AI 会评估:
- **正确** - 理解得很好 → 可能升级
- **部分正确** - 部分理解 → 保持当前等级
- **错误** - 错误答案 → 降级以找到真实等级
- **跳过** - 太忙 → 稍后再次提问
## 常见问题
### 我真的需要一个插件来做这件事吗?
老实说,不需要。VibeLearning 的大多数功能都可以通过提示或 CLAUDE.md 指令来实现。你可以通过精心设计的系统提示自己设置间隔重复问题。
然而,我们为那些:
- 不想为每个项目手动配置系统提示的人
- 更喜欢一键安装而不是复制粘贴 CLAUDE.md 指令的人
- 需要只有 MCP/插件才能提供的额外功能的人而构建了这个插件:
- **持久的 SQLite 数据库** 用于跟踪跨会话的进度
- **SM-2 算法计算** 带有自动审查调度
- **跨项目统计** 和报告
如果你喜欢自己配置事物,请随意从我们的 [CLAUDE.md](./CLAUDE.md) 中获取想法并将它们适应到你的工作流程中。
## 开发
```bash
# 克隆仓库
git clone https://github.com/jeongjeong-il/vibe-learning.git
cd vibe-learning
# 安装依赖
npm install
# 构建
npm run build
# 运行测试
npm test
# 校验
npm run lint
```
### 数据存储
- **数据库**: `~/.vibe-learning/learning.db` (SQLite)
- **报告**: `~/.vibe-learning/*.md`
### MCP 工具参考
用于直接 MCP 集成或自定义实现:
| 工具 | 描述 |
|------|-------------|
| `should_ask_question` | 检查是否是提问的好时机 |
| `get_concept_level` | 获取概念的当前等级(1-5) |
| `record_learning` | 记录学习结果 |
| `record_unknown_unknown` | 注册用户可能不知道的概念 |
| `get_stats` | 获取学习统计数据 |
| `get_report_data` | 获取综合报告数据 |
| `get_unknown_unknowns` | 获取未探索的概念列表 |
| `mark_explored` | 将概念标记为已探索 |
| `get_due_reviews` | 获取到期复习的概念 |
| `get_mode` / `set_mode` | 管理学习模式 |
| `save_report` | 将报告保存到 Markdown 文件 |
| `save_unknowns` | 将未知内容保存到 Markdown 文件 |
| `get_interview_data` | 获取具有掌握等级的面试准备数据 |
## 卸载
### 自动
```bash
npx vibe-learning uninstall
```
### Claude Code
运行 `/plugins` → 找到 **vibe-learning** → 点击 **卸载**
### 完整数据删除
```bash
rm -rf ~/.vibe-learning/
```
## 许可证
MIT