AI 编程项目工作流:知识库与需求文件夹全流程规范
工作流概述
这套工作流由三份规则文档组成,协同覆盖一个 AI 编程项目从立项到上线的全过程:
- 需求内容维护规则:六个 Phase 的执行流程与 Claude 操作规范
- 文件夹维护规则:文件命名、frontmatter 模板、目录结构约定
- 知识库内容维护规则:知识库分类结构与各阶段写入规则
三者配合使用,把 AI 的”对话记忆”外置到 Obsidian 文件系统,使每次新建会话都能通过读取文件恢复完整上下文。
如何激活工作流
每次新对话开始时,将以下内容粘贴给 Claude:
1 | |
Claude 启动后将自动:
- 读取工作流规则文档
- 扫描需求文件夹下所有 MOC 文件的
taskStatus - 按以下逻辑判断当前 Phase:
- 有且仅有一个
taskStatus=2→ 直接进入该 Phase - 有多个
taskStatus=2→ 按 Phase 编号取最小的,并告知用户 - 没有
taskStatus=2,有taskStatus=1→ 列出待投入的 Phase,询问用户从哪个启动 - 全部为 0 或 4 → 提示用户说明当前阶段或从 Phase 1 重新开始
- 有且仅有一个
- 输出当前状态摘要(进行中 Phase、已完成 Phase 数量、功能点列表),等待用户确认后进入执行
一、文件夹与文件规范
1.1 文件 frontmatter 模板
普通文件模板(所有新建文件默认使用,title 填文件名,layer_id 填所在位置编号):
1 | |
外部素材文件模板(x.x.x.1.0/ 目录专用,用于 skills 产物或用户手动提供的原始文档):
1 | |
外部素材模板字段说明:
| 字段 | 说明 |
|---|---|
is_raw |
固定为 "true",标记该文件是原始素材而非工作流产出,便于 dataview/base 过滤 |
source_url |
原始链接,便于后续重新抓取或核对最新版本;本地文件提供时留空 |
source_type |
来源类型:sdoc(公司文档)/ skill(工具输出)/ axure(原型)/ swagger(接口文档)/ manual(用户手动提供) |
fetched_at |
抓取或接收时间,标记本地版本的时间点,提示内容可能已过期 |
1.2 文件夹核心规则
- 每篇笔记通过 frontmatter 的
layer_id(自身编号)和parent_id(父级编号)构建虚拟树形结构 - 每个数字编号文件夹下有一个语义化命名的 MOC(Map of Content)入口文件,文件夹名与 MOC 文件名相互独立,两者通过 frontmatter 中的
layer_id建立关联,MOC 文件通过双链串联子主题 - 数字编号文件夹用于定位层级,Claude 新建子文件夹时应按当前最大编号 +1 续号
- 阶段产出文件统一以需求名为前缀命名,格式:
<需求名>-<文件用途>.md,避免不同需求间的同名文件在 Obsidian 双链中产生歧义
1.3 需求文件夹完整结构
以「需求-用户登录优化」为例:
1 | |
层级说明:
| 层级 | 命名规则 | 用途 |
|---|---|---|
| 一级(根) | 数字编号目录 + 语义化 MOC 文件 | 需求入口 |
| 二级(素材) | 数字编号目录(根编号.0) | 外部输入/skills 产物 |
| 二级(Phase) | 数字编号目录(根编号.1~.6)+ 语义化 MOC 文件 | 阶段划分 |
| 三级(细分) | 数字编号目录(Phase编号.1~.n)+ 语义化内容文件 | 功能点/模块拆分 |
1.4 MOC 入口文件内容示例
1 | |
1.5 Claude 新建文件操作规范
- 新建文件夹:在父目录下创建数字编号子目录(续当前最大编号 +1)
- 新建文件:套用对应 frontmatter 模板(普通文件 / 外部素材),填写
layer_id和parent_id - 文件命名:阶段产出文件统一加需求名前缀,格式
<需求名>-<文件用途>.md - 外部素材:统一存入
x.x.x.1.0/并套用外部素材模板:- 用户提供链接 → Claude 直接抓取内容转为本地文件,
source_url填写链接,fetched_at填写抓取时间 - 用户直接放入文件夹 → Claude 扫描到后补全 frontmatter,
source_url留空,source_type填manual
- 用户提供链接 → Claude 直接抓取内容转为本地文件,
- 新建完成后:在父级 MOC 文件中追加双链引用
- 阶段文档生成后:更新 MOC 中「当前状态」字段
二、需求内容维护规则
2.1 启动流程
Claude 收到需求文件夹路径后,执行以下步骤:
- 读取需求文件夹下的 MOC 文件(文件名与文件夹名一致或唯一的 md 文件)
- 扫描 MOC 中双链引用的所有子文件,找出
taskStatus: "2"(进行中)的条目 - 根据 taskStatus 值判断当前所处 Phase(见下方映射表),若用户已明确说明 Phase 则直接使用
- 输出当前状态摘要,询问用户确认后进入对应 Phase 执行流程
taskStatus 与 Phase 映射:
| taskStatus | 含义 | 对应 Phase |
|---|---|---|
| 0 | 默认/未开始 | 等待用户指示 |
| 1 | 待投入 | 等待用户启动 |
| 2 | 进行中 | 按 Phase 文档执行 |
| 3 | 冻结中 | 提示用户当前已冻结 |
| 4 | 已归档 | 提示用户已归档 |
2.2 taskStatus 更新责任
Claude 在以下时机主动更新 taskStatus:
- 新 Phase 启动时:将当前 Phase 子文件夹 MOC 的 taskStatus 改为
"2"(进行中) - Phase 结束时:将该 Phase 子文件夹 MOC 的 taskStatus 改为
"4"(已归档) - 用户说「冻结」时:将当前 Phase 子文件夹 MOC 的 taskStatus 改为
"3" - 需求根 MOC:整个需求进行中保持
"2",仅在 Phase 6 验收上线完成后才改为"4"
2.3 触发词速查
| Phase | 进入触发词 | 子步骤触发词 |
|---|---|---|
| Phase 1 | 用户提供 PRD 内容 | — |
| Phase 2 | 「开始技术方案」 | 「我们来看 <功能点>」/ 「汇总技术方案」 |
| Phase 3 | 「开始开发」 | 「开始开发 <功能点>」 |
| Phase 4 | 「开始联调自测」 | 「Review」/ 「自测」/ 用户描述联调问题 |
| Phase 5 | 「提测」 | 用户反馈 Bug |
| Phase 6 | 「验收上线」 | — |
2.4 返工处理
当某个 Phase 已完成(taskStatus=4)但需要回头修改时:
轻微修改(不影响后续 Phase):直接修改对应文件,在开发记录中注明变更,taskStatus 保持 "4" 不变
重大修改(影响后续 Phase 的内容):
- 将该 Phase MOC 的 taskStatus 改回
"2"(进行中) - 执行修改,同步更新受影响的后续 Phase 文件
- 修改完成后重新归档(改回
"4") - 在需求根 MOC「当前状态」中记录返工原因
2.5 知识库协作规则
若用户提供了知识库文件夹,各 Phase 按以下规则与知识库交互:
| Phase | 知识库操作 | 说明 |
|---|---|---|
| Phase 1 | 查阅参考 | 优先查阅 概念/ 了解业务术语 |
| Phase 2 | 查阅参考 | 查阅 架构决策/、模式沉淀/ 作为技术选型依据 |
| Phase 3 | 不参考 | 严格按技术方案执行,不参考知识库,避免偏离方案 |
| Phase 4 | 写入积累 | Code Review 后识别可复用模式,写入 模式沉淀/ |
| Phase 5 | 写入积累 | Bug 根因分析完成后,询问是否写入 踩坑记录/ |
| Phase 6 | 无操作 | 验收上线阶段无知识库操作 |
未提供知识库文件夹则跳过所有知识库相关步骤。
三、各 Phase 执行规则
Phase 1 — PRD 评审和分析
触发条件
用户提供 PRD 内容(文本粘贴 / 文件路径 / 口述描述均可)。
若用户尚未提供 PRD 内容,提示:
请提供 PRD 文档内容,可以直接粘贴文本、提供文件路径,或分段描述功能需求。
执行步骤
Step 1 — 功能点识别
- 从 PRD 中提取所有功能点,整理为列表
- 按「复杂度 × 依赖关系」排序(高复杂度、被依赖多的排前)
Step 2 — 功能点卡片输出
每个功能点输出一张卡片,格式如下:
1 | |
Step 3 — 领域概念识别
- 扫描 PRD 中出现的新领域概念(业务术语、专有名词)
- 列出发现的概念,询问用户:「以下概念是否需要写入知识库?」
Step 4 — 生成 Phase 1 子文件夹和文件
- 在需求根目录下新建数字编号子文件夹(根编号.1),例如
x.x.x.1.1/ - 在该子文件夹下生成
<需求名>-PRD分析.md(功能点卡片汇总) - 在需求根 MOC 的「阶段文档」下追加双链:
<需求名>-PRD分析
Step 5 — Phase 结束
- 将 Phase 1 产出文件(
<需求名>-PRD分析.md)的 taskStatus 更新为"4"(已归档) - 更新需求根 MOC 的「当前状态」字段:
1
2当前状态:Phase 1 已完成,进入 Phase 2 — 技术方案输出
功能点数量:<n> 个 - 输出功能点列表摘要,提示用户:「可以说『开始技术方案』进入 Phase 2,或『我们来看 <功能点名称>』直接开始击穿」
Phase 2 — 技术方案输出
本阶段分三步:初版技术文档 → 功能点逐一击穿 → 汇总为完整技术方案。
灵活流程说明:根据需求规模可按需裁剪:
- 完整流程(推荐):2.0 初版 → 2.1 功能点击穿 → 2.2 汇总
- 快速流程(简单需求):跳过 2.0,直接 2.1 击穿 → 2.2 汇总
- 初版流程(外部已有完整方案):2.0 初版 → 直接 2.2 汇总,跳过逐一击穿
Phase 2 启动
触发:用户说「开始技术方案」或从 Phase 1 切换进入
进入 Phase 2 时,第一步先建立 MOC,后续所有子步骤基于此 MOC 展开:
- 在需求根目录下新建 Phase 2 子文件夹(根编号.2)
- 在子文件夹下创建
<需求名>-技术方案输出.md作为 Phase 2 MOC,taskStatus 设为"2" - 在需求根 MOC 追加双链:
<需求名>-技术方案输出,并更新「当前状态」字段
2.0 初版技术文档
触发:进入 Phase 2 时自动执行
本步骤有两种来源,优先使用用户提供的版本:
来源 A — 用户通过 skills 提供(优先)
用户通过外部 skill(如公司技术方案生成工具)生成了初版技术文档,以链接或本地文件形式提供:
- 链接:Claude 直接抓取内容读取,无需存文件;在根 MOC 的「外部资料」区块记录链接
- 本地文件:存入需求根目录下的
x.x.x.1.0/素材文件夹,文件名格式<需求名>-技术方案初稿.md
Claude 读取后执行:
- 对照
<需求名>-PRD分析.md中的功能点卡片,检查文档是否覆盖所有功能点 - 指出遗漏或不清晰的部分,询问用户是否需要补充
- 以此为基础生成
<需求名>-技术方案初版.md,存入 Phase 2 子文件夹(x.x.x.1.2/) - 在 Phase 2 MOC(
<需求名>-技术方案输出.md)中追加双链:<需求名>-技术方案初版
来源 B — Claude 自主生成
若用户未提供外部技术文档,Claude 基于以下内容自动生成初版:
<需求名>-PRD分析.md中的功能点卡片- 项目相关代码上下文(架构、已有实现、接口规范)
- 知识库中
架构决策/、模式沉淀/的相关内容(若提供了知识库)
生成文档结构:
1 | |
保存为 <需求名>-技术方案初版.md,在 Phase 2 MOC 中追加双链:<需求名>-技术方案初版
初版完成后:
- 在 Phase 2 MOC 中追加双链:
<需求名>-技术方案初版 - 更新需求根 MOC「当前状态」字段
- 提示用户:「初版技术方案已就绪,可说『我们来看 <功能点名称>』逐一深化」
2.1 功能点击穿
触发:用户说「我们来看 <功能点名称>」
Step 1 — 调取功能点信息
- 读取
<需求名>-PRD分析.md中该功能点的卡片(目标 / 边界 / 关键逻辑 / 风险点) - 读取
<需求名>-技术方案初版.md中该功能点的初步方案,作为深化的起点
Step 2 — 结合代码上下文输出技术方案
- 读取项目相关代码,确认当前架构与约定
- 若提供了知识库,查阅
架构决策/、模式沉淀/、工具使用/作为参考 - 给出针对项目规范的技术实现方案
Step 3 — 架构决策(有需要时)
若存在多个可行方案,提供对比表格并给出推荐理由,用户确认后记录决策结论。
Step 4 — 生成功能点子文件夹和文件
- 在 Phase 2 子文件夹下新建功能点三级子文件夹(根编号.2.n,按已有功能点数量续号)
- 在三级子文件夹下生成
<需求名>-feature-<功能点名称>.md,文档结构:- 功能背景(来自 PRD 卡片)
- 技术方案(实现思路、接口设计、数据结构)
- 架构决策(若有)
- 边界与排除项
- 风险与注意事项
Step 5 — 更新 MOC
在 Phase 2 MOC 中追加双链:<需求名>-feature-<功能点名称>
提示下一步:「可继续『我们来看 <下一个功能点>』,或说『汇总技术方案』」
2.2 技术方案汇总
触发:用户说「汇总技术方案」,或所有功能点均已完成击穿
Step 1 — 收集所有功能点文档
- 读取 Phase 2 子文件夹下所有
feature-xxx.md - 检查是否有 PRD 中的功能点尚未击穿,若有则提示用户
Step 2 — 生成 <需求名>-技术方案汇总.md
文档结构:
1 | |
若体量较大,可在 Phase 2 子文件夹下按模块新建三级子文件夹,在 技术方案汇总.md 中通过双链引用。
Step 3 — 更新 MOC
在 Phase 2 MOC 中追加双链:<需求名>-技术方案汇总
Step 4 — 自动写入知识库(若提供了知识库)
从「架构决策记录」提取决策内容,自动写入知识库 架构决策/,文件名:ADR-<需求名>-<决策主题>.md
Step 5 — Phase 结束
将 Phase 2 MOC 的 taskStatus 更新为 "4"(已归档),提示:「技术方案已生成,可说『开始开发』进入 Phase 3 — 开发阶段」
Phase 3 — 开发阶段
触发条件
用户说「开始开发 <功能点>」
执行步骤
Step 1 — 回顾方案
- 读取该功能点的
<需求名>-feature-<名称>.md - 简要输出:实现要点 / 关键接口 / 注意事项
Step 2 — 代码对照检查
用户提交代码后(粘贴代码片段 / 提交 diff / 描述实现),对照 feature 文档逐项核查:
- 接口名称、参数、返回值与技术方案一致
- 数据结构字段与技术方案一致
- 边界条件处理(空值、越界、异常场景)
- 错误码定义与技术方案一致
- 权限控制与技术方案一致
- 风险点中标注的注意事项已处理
发现实现偏差时,区分根因并按以下流程处理:
| 偏差类型 | 处理方式 |
|---|---|
| 代码理解错误 | 指出问题,给出修正建议,修复后记录偏差原因到开发记录 |
| 技术方案描述不清 | 与用户确认正确实现方式,更新 feature 文档,记录修改理由 |
| 影响其他功能点 | 同步更新技术方案汇总相关章节,并提示用户 |
Step 3 — 踩坑识别
两种情况分开处理:
- 实现偏差:代码与 feature 文档不一致 → 记录到开发记录,Step 5 自动写入知识库
- 非显然实现:代码与方案一致但用了特殊手段 → 询问:「这个处理方式值得写入知识库踩坑记录吗?」
Step 4 — 更新开发记录
若 Phase 3 子文件夹(根编号.3)不存在,先新建,并在其中创建:
<需求名>-开发阶段.md作为 Phase 3 MOC(在需求根 MOC 追加双链:<需求名>-开发阶段)<需求名>-开发记录.md用于记录开发过程(在 Phase 3 MOC 追加双链:<需求名>-开发记录)
将以下内容追加到 <需求名>-开发记录.md:
1 | |
Step 5 — 自动写入知识库(若提供了知识库)
- 实现偏差(与技术方案不一致):自动写入知识库
踩坑记录/,无需询问 - 非显然实现(特殊手段、绕过限制):询问用户后写入
踩坑记录/
Step 6 — 提示下一步
输出:「『<功能点>』开发完成。可继续『开始开发 <下一个功能点>』,或说『联调自测』进入 Phase 4」
所有功能点开发完毕后,将 Phase 3 MOC 的 taskStatus 更新为 "4"(已归档)。
Phase 4 — 联调自测
本阶段包含:Code Review → 自测 → 联调记录,可按实际顺序灵活触发。
Phase 4 启动
触发:用户说「开始联调自测」或从 Phase 3 切换进入
进入 Phase 4 时,第一步先建立 MOC:
- 在需求根目录下新建 Phase 4 子文件夹(根编号.4)
- 在子文件夹下创建
<需求名>-联调自测.md作为 Phase 4 MOC,taskStatus 设为"2" - 在需求根 MOC 追加双链:
<需求名>-联调自测,并更新「当前状态」字段
4.1 Code Review
触发:用户说「Review」或「帮我看一下代码」
Step 1 — 建立 Code Review 文档
- 在 Phase 4 子文件夹下新建
<需求名>-CodeReview.md - 在 Phase 4 MOC 中追加双链:
<需求名>-CodeReview
Step 2 — 读取 diff 并逐文件检查
读取当前分支 git diff,对照 <需求名>-技术方案汇总.md 逐文件检查:
- 实现是否符合技术方案设计
- 是否存在安全隐患(SQL 注入、XSS、越权等)
- 是否有未处理的异常或边界情况
- 代码可读性与命名规范
输出格式:
1 | |
Step 3 — 模式沉淀识别
归纳 Review 中发现的可复用模式,询问用户是否写入知识库 模式沉淀/。
4.2 自测
触发:用户说「自测」或「生成自测清单」
Step 1 — 生成自测清单
- 在 Phase 4 子文件夹下生成
<需求名>-自测清单.md - 在 Phase 4 MOC 中追加双链:
<需求名>-自测清单
1 | |
4.3 联调记录
触发:用户描述联调过程或联调发现的问题
- 在 Phase 4 子文件夹下新建或追加
<需求名>-联调记录.md - 在 Phase 4 MOC 中追加双链(首次):
<需求名>-联调记录 - 记录内容:联调对象(前端/其他服务)、发现的问题及解决方案、遗留事项
Phase 4 结束
将 Phase 4 MOC 的 taskStatus 更新为 "4"(已归档),提示:「可说『提测』进入 Phase 5 — 测试阶段」
Phase 5 — 测试阶段
触发条件
用户说「提测」或「测试阶段」
Phase 5 启动
进入 Phase 5 时,第一步先建立 MOC:
- 在需求根目录下新建 Phase 5 子文件夹(根编号.5)
- 在子文件夹下创建
<需求名>-测试阶段.md作为 Phase 5 MOC,taskStatus 设为"2" - 在需求根 MOC 追加双链:
<需求名>-测试阶段,并更新「当前状态」字段
执行步骤
Step 1 — 建立 Bug 跟踪文档
- 在 Phase 5 子文件夹下新建
<需求名>-Bug跟踪.md - 在 Phase 5 MOC 中追加双链:
<需求名>-Bug跟踪
Step 2 — Bug 跟踪记录
用户反馈测试发现的 Bug 时,追加到 <需求名>-Bug跟踪.md:
1 | |
Step 3 — 协助 Bug 分析
- 用户提交 Bug 时,Claude 协助:定位原因、对照技术方案分析根因、给出修复建议
- 若 Bug 根因涉及设计问题,标记并更新
<需求名>-技术方案汇总.md对应章节
Step 4 — 踩坑沉淀
Bug 修复后,询问用户是否将根因分析写入知识库 踩坑记录/。
Phase 5 结束
所有 Bug 修复完毕、测试通过后:
- 将 Phase 5 MOC 的 taskStatus 更新为
"4"(已归档) - 提示:「可说『验收上线』进入 Phase 6」
Phase 6 — 验收上线
触发条件
用户说「验收上线」或「准备上线」
Phase 6 启动
进入 Phase 6 时,第一步先建立 MOC:
- 在需求根目录下新建 Phase 6 子文件夹(根编号.6)
- 在子文件夹下创建
<需求名>-验收上线.md作为 Phase 6 MOC,taskStatus 设为"2" - 在需求根 MOC 追加双链:
<需求名>-验收上线,并更新「当前状态」字段
执行步骤
Step 1 — 生成上线 Checklist
- 在 Phase 6 子文件夹下生成
<需求名>-上线Checklist.md - 在 Phase 6 MOC 中追加双链:
<需求名>-上线Checklist
基于技术方案和开发记录,生成上线前确认清单:
1 | |
Step 2 — 验收记录
用户验收完成后,在 Phase 6 子文件夹下新建 <需求名>-验收记录.md,在 Phase 6 MOC 中追加双链:<需求名>-验收记录,记录:
- 验收时间
- 验收结论
- 遗留事项(若有)
Phase 6 结束 — 需求归档
- 将 Phase 6 MOC 的 taskStatus 更新为
"4"(已归档) - 将需求根 MOC 的 taskStatus 更新为
"4"(已归档) - 提示:「需求『<需求名称>』已完成,建议将需求文件夹归档」
四、知识库内容维护规则
4.1 知识库分类结构
知识库文件夹下应包含以下一级分类子目录:
| 分类目录 | 收录内容 |
|---|---|
概念/ |
领域概念、名词解释、业务术语 |
架构决策/ |
架构选型理由、技术方案关键决策(ADR 格式) |
踩坑记录/ |
具体错误现象 + 根因分析 + 解法 |
模式沉淀/ |
可复用的代码模式、设计模式、最佳实践 |
工具使用/ |
框架、库、工具的使用技巧与注意事项 |
4.2 知识库更新规则
自动写入(无需询问用户):
- Phase 2 技术方案汇总完成后:将架构决策自动写入
架构决策/,文件名格式:ADR-<需求名>-<决策主题>.md - Phase 3 结束后:若开发记录中存在实现偏差(代码与技术方案不一致,如接口调整、数据结构变更、边界处理差异),自动追加到
踩坑记录/
询问后写入:
- 新领域概念(Phase 1 发现)→ 写入
概念/ - 非显然实现(Phase 3 发现):特殊技巧、绕过框架限制、非常规处理方式 → 询问后写入
踩坑记录/ - Bug 根因(Phase 5 发现):测试暴露的缺陷根因,尤其是设计层面的问题 → 询问后写入
踩坑记录/ - 模式沉淀(Phase 4 Code Review 后归纳)→ 写入
模式沉淀/
踩坑记录三类边界:
| 类型 | 写入方式 | 定义 |
|---|---|---|
| 实现偏差 | 自动 | 做了但做偏了,代码与方案文档不一致 |
| 非显然实现 | 询问 | 做到了但用了特殊手段,别人不一定知道怎么做 |
| Bug 根因 | 询问 | 测试才暴露,属于方案或实现的漏洞 |
不写入知识库的内容:
- 需求过程性文档(PRD 分析、开发记录等)
- 代码本身能直接表达的内容
- 临时性的实现细节
4.3 知识库文件模板
写入知识库的文件统一使用以下 frontmatter:
1 | |