Files
VibeEngineering/README.md
闫旭隆 c484cafb45 Initial commit: VibeEngineering V2
- 两阶段分离:设计阶段人工确认,执行阶段全自动化
- 子代理驱动:Implementer → Spec Reviewer → Quality Reviewer
- 原生 Task 系统:使用 Claude Code Task 替代自定义状态管理
- 跨 Compact 恢复:PreCompact + SessionStart Hook(内联命令实现)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:00:55 +08:00

242 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VibeEngineering V2
在 Claude Code CLI 上实现自动化开发系统,融合 Superpowers 专家方法论 + 跨 Compact 恢复机制,实现"人工把关设计,自动执行任务"的工作流程。
## 核心特性
- **两阶段分离**:设计阶段需人工确认,执行阶段全自动化
- **子代理驱动**Implementer → Spec Reviewer → Quality Reviewer 三阶段审查
- **原生 Task 系统**:使用 Claude Code 原生 Task 替代自定义状态管理
- **跨 Compact 恢复**PreCompact 保存上下文 → SessionStart 引导恢复
- **降级检测**:校验 Task 对比 design.md + metadata 检测实现降级
## 工作流程
```
设计阶段(需人工确认):
/vibe-brainstorming "需求描述" → design.md
↓ 用户审核
/vibe-plan → plan.md
↓ 用户审核
执行阶段(全自动化):
/vibe-execute → 创建 Task 系统 → 协调者循环执行
```
## 文件结构
```
项目根目录/
├── README.md # 本文件
├── DESIGN.md # 详细设计文档
├── docs/plans/
│ ├── {timestamp}-design.md # 需求和架构(设计阶段产出)
│ └── {timestamp}-plan.md # 实现计划(设计阶段产出)
├── .vibe/
│ ├── session.yml # 会话元信息
│ ├── session-start-prompt.txt # SessionStart 恢复提示词
│ ├── last_task_context.jsonl # 当前任务执行上下文PreCompact 生成)
│ └── task-snapshot.md # Task 快照(校验通过后保存)
├── .claude/
│ ├── commands/
│ │ ├── vibe-brainstorming.md # 需求探索命令
│ │ ├── vibe-plan.md # 创建计划命令
│ │ └── vibe-execute.md # 执行命令
│ ├── hooks/
│ │ └── extract-last-context.js # 上下文提取脚本
│ ├── skills/
│ │ ├── brainstorming/ # 需求探索方法论
│ │ ├── writing-plans/ # 计划编写方法论
│ │ ├── test-driven-development/ # TDD 方法论
│ │ └── subagent-driven-development/ # 子代理驱动执行
│ ├── settings.local.json # Hook 配置(内联命令)
│ └── CLAUDE.md # 项目级提示词
```
## Hook 实现说明
### 设计 vs 实现
原设计文档中 Hook 配置为调用外部 `.sh` 脚本:
```json
{
"hooks": {
"SessionStart": [{"command": "bash .claude/hooks/session-start.sh"}],
"PreCompact": [{"command": "bash .claude/hooks/pre-compact.sh"}]
}
}
```
**由于 Windows 环境下 Claude Code 执行外部 `.sh` 脚本存在兼容性问题**,当前实现改为**内联命令**方式:
```json
{
"hooks": {
"SessionStart": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "test -f .vibe/last_task_context.jsonl && cat .vibe/session-start-prompt.txt || exit 0"
}]
}],
"PreCompact": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "mkdir -p .vibe && read input && echo \"$input\" | jq -r '.transcript_path' > .vibe/debug-transcript-path.txt && sleep 1 && node .claude/hooks/extract-last-context.js $(cat .vibe/debug-transcript-path.txt) > .vibe/last_task_context.jsonl 2> .vibe/debug-error.txt; exit 0"
}]
}]
}
}
```
### 内联命令 vs 外部脚本
| 方面 | 外部脚本 | 内联命令 |
|------|----------|----------|
| 可读性 | 好(独立文件) | 差(一行挤在 JSON |
| 维护性 | 易修改 | 复杂命令难改 |
| Windows 兼容 | ❌ 有问题 | ✅ 正常工作 |
| 功能 | 完整 | 完整 |
**结论**:功能完全一致,内联命令只是把脚本逻辑写成一行。
### Hook 工作原理
```
┌─────────────────────────────────────────────────────────┐
│ Claude Code │
│ │
│ Hook 事件触发 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Shell 环境 (Git Bash) │ │
│ │ │ │
│ │ stdin ← Claude Code 传入的 JSON 数据 │ │
│ │ stdout → 输出注入到 Claude 上下文 │ │
│ │ │ │
│ └─────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Claude 收到 stdout 输出 │
└─────────────────────────────────────────────────────────┘
```
### SessionStart Hook
**触发时机**:每次打开 Claude Code 会话
**逻辑**
```bash
test -f .vibe/last_task_context.jsonl # 检查是否存在恢复上下文
&& cat .vibe/session-start-prompt.txt # 存在则输出恢复提示词
|| exit 0 # 不存在则静默退出
```
**作用**:只有在 Compact 后(存在 `last_task_context.jsonl`)才注入恢复提示词,引导 Claude 读取必要文件恢复执行。
### PreCompact Hook
**触发时机**:上下文即将满,执行 `/compact` 之前
**逻辑**
```bash
mkdir -p .vibe # 确保目录存在
&& read input # 从 stdin 读取 Claude Code 传入的 JSON
&& echo "$input" | jq -r '.transcript_path' # 提取 transcript 文件路径
&& sleep 1 # 等待 transcript 写入完成
&& node extract-last-context.js ... # 调用 Node 脚本提取上下文
```
**作用**:从 `transcript.jsonl` 提取最后一次 `TaskUpdate completed` 之后的内容,保存到 `last_task_context.jsonl`,供恢复时使用。
## 环境要求
### 依赖
- Node.js用于运行 `extract-last-context.js`
- jq用于解析 JSON
- Git BashWindows 用户)
### Windows 用户注意
Claude Code 在 Windows 上默认使用 cmd.exe 执行 Hook 命令,无法识别 bash 语法。需要设置环境变量指定 Git Bash 路径:
```batch
set CLAUDE_CODE_GIT_BASH_PATH=<你的Git安装路径>\bin\bash.exe
```
例如,如果 Git 安装在 `C:\Program Files\Git`
```batch
set CLAUDE_CODE_GIT_BASH_PATH=C:\Program Files\Git\bin\bash.exe
```
建议将此变量添加到系统环境变量中永久生效。
## 跨 Compact 恢复机制
```
执行中...
▼ 上下文即将满
┌─────────────────────────────────┐
│ PreCompact Hook 触发 │
│ 提取 transcript → last_task_context.jsonl
└─────────────────────────────────┘
▼ Compact 发生(上下文被压缩)
┌─────────────────────────────────┐
│ SessionStart Hook 触发 │
│ 检测到 last_task_context.jsonl │
│ 输出恢复提示词给 Claude │
└─────────────────────────────────┘
Claude 按提示读取:
1. vibe-execute.md执行流程
2. subagent-driven-development skill子代理模板
3. session.yml → design.md需求
4. TaskList任务状态
5. last_task_context.jsonl中断点上下文
从中断点继续执行
```
## 快速开始
1. 克隆项目到本地
2. Windows 用户设置环境变量(参见上方"环境要求"
3. 进入项目目录,启动 Claude Code
```batch
cd your-project
claude
```
4. 开始设计阶段:
```
/vibe-brainstorming "你的需求描述"
```
5. 审核 design.md 后,创建计划:
```
/vibe-plan
```
6. 审核 plan.md 后,开始执行:
```
/vibe-execute
```
## 参考
- [DESIGN.md](./DESIGN.md) - 完整设计文档
- [Claude Code 官方文档](https://docs.anthropic.com/en/docs/claude-code)