simbajigege/harness-step2-fill-docs
| Harness Engineering 第一阶段第二步:深度分析项目代码,填充业务解决方案、架构、约定、技术决策和质量标准等 docs/ 知识库内容。 在 harness-step1-create-agents-md 创建好目录骨架之后使用。当用户说"填充文档内容"、 "完善 docs/ 文件"、"让文档有实质内容"、"分析项目写架构文档"、"写 ARCHITECTURE.md"、 "写技术决策文档"、"从业务视角理解项目"、"完善 business-solution.md"时,立即使用此 skill。 前置条件:项目中已有 AGENTS.md 和 docs/ 目录骨架(由 harness-step1 创建)。
npx skills add https://github.com/simbajigege/book2skills --skill harness-step2-fill-docs
通过深度阅读项目代码,将隐藏在代码里的业务能力、用户流程、架构知识、命名约定、技术决策,
显式地写入 docs/ 各文件。让 agent 在任何 session 都能快速理解项目全貌。
核心原则:推断出来的内容要标注来源,无法确定的内容标注「待补充」,
不要用模糊的占位符糊弄过去。
在写任何文档之前,先充分读懂项目。按顺序执行:
# 1. 确认 docs/ 骨架已存在
ls docs/
# 2. 读懂目录结构(3层)
find . -maxdepth 3 \
-not -path '*/node_modules/*' -not -path '*/.git/*' \
-not -path '*/__pycache__/*' -not -path '*/dist/*' \
-not -path '*/.next/*' -not -path '*/build/*' | sort
# 3. 读主要入口文件
# (根据技术栈判断:main.ts / main.py / app.go / index.js 等)
# 4. 读模块边界(各主要目录的 index 文件或第一个文件)
# 目标:搞清楚每个目录的职责
# 5. 读依赖声明
cat package.json 2>/dev/null || cat pyproject.toml 2>/dev/null || \
cat go.mod 2>/dev/null || cat Cargo.toml 2>/dev/null
# 6. 读已有文档(复用,不重复)
cat README.md 2>/dev/null
cat AGENTS.md 2>/dev/null
扫描目标——在写文档前,必须能回答这些问题:
docs/business-solution.md写什么:从业务和需求视角说明项目服务谁、解决什么问题、如何产生价值,以及能力边界。不要把技术组件清单改写成业务价值,也不要把路线图或设想当成现有功能。
⚠️ 强制要求:业务能力必须验证可见入口或执行链路
README 可以用于发现候选能力,但在写“系统可以完成 X”之前,至少找到以下一种证据:
推荐搜索方法:
# 从路由和页面验证用户可见能力
rg -n "path:|Register.*Routes|\.GET\(|\.POST\(" frontend/src/router internal/router
# 从业务对象和服务验证执行能力
rg -n "type .*Service|func New.*Service|Create|Search|Import|Sync|Evaluate" internal/application
# 区分已实现、路线图和待办
rg -n "Roadmap|TODO|planned|coming soon|路线图|规划" README.md docs/ frontend/ internal/
每项能力标记证据状态:
格式模板:
# 业务解决方案
## 一句话定位
[服务谁,用什么方式,解决什么核心问题]
## 目标用户与核心任务
| 用户/角色 | 核心任务 | 当前痛点 |
|---|---|---|
## 问题—能力—价值映射
| 业务问题 | 已验证能力 | 产生的价值 | 证据 |
|---|---|---|---|
## 典型业务场景
[3-8 个由代码/产品文档支持的场景,每个说明参与者、输入、过程和结果]
## 核心业务流程
[从用户输入到获得结果的端到端流程]
## 能力边界
- [不适用场景、依赖条件、安全/人工审核要求]
## 二次开发机会
[明确标注为建议,不得混入现有能力]
## 待补充
- [ ] [目标行业、指标、商业规则等需业务负责人确认的内容]
写作要求:
docs/ARCHITECTURE.md写什么:模块划分、依赖方向、主要数据流。写"是什么结构"和"为什么这样分",不写具体实现。
⚠️ 强制要求:描述组件/模块关系前,必须验证 import
写任何"A 被 B 使用"、"A 内嵌了 B"、"A 页面包含 C 组件"这类断言之前,
必须用 Grep 确认实际 import,不得根据文件名或目录位置猜测。
# 验证某组件是否被某页面实际引用
grep -r "ChatInterface" frontend/src/app/[locale]/book/[bookCode]/ 2>/dev/null
# 验证某组件被哪些文件实际引用
grep -rl "ComponentName" src/ 2>/dev/null
如果 grep 无结果,说明没有引用关系——即使组件在同一目录下也不能断言它被使用。
未经验证的关系统一标注「待验证:未找到 import,请人工确认」。
格式模板:
# 架构说明
## 整体结构
[用文字描述整体分层,再用目录树辅助说明]
[目录树,只到关键层级,不要穷举所有文件]
## 依赖方向规则
[用箭头图或列表说明哪层可以引用哪层]
关键约束:
- [约束1,说明原因]
- [约束2,说明原因]
## 主要数据流
[描述最核心的 1-2 条请求/数据流,从入口到数据库]
## 待补充
- [ ] [扫描时无法确定的内容]
写作要求:
docs/CONVENTIONS.md写什么:从代码里归纳出来的命名规律和文件组织规律。
扫描方法:
# 看文件命名规律
find src -name "*.ts" -o -name "*.py" -o -name "*.go" 2>/dev/null | head -30
# 看函数/变量命名(随机抽几个文件)
head -50 [主要源文件路径]
格式模板:
# 代码约定
## 文件命名
- [规律1]:示例 `XxxYyy.tsx`
- [规律2]:示例 `xxx-yyy.ts`
## 变量和函数命名
- 变量/函数:[规律 + 示例]
- 类/组件:[规律 + 示例]
- 常量:[规律 + 示例]
## 目录组织
[每个主要目录放什么类型的文件]
## Git Commit 格式
[从 git log 里归纳,或写推荐格式]
`type(scope): 描述`
type 可选:feat / fix / docs / refactor / test
## 待补充
- [ ] [无法从代码推断的约定]
写作要求:
docs/TECH_DECISIONS.md写什么:技术选型的原因。这是最难写的一份,因为原因往往不在代码里。
扫描方法:
# 看所有直接依赖
cat package.json | grep '"dependencies"' -A 50 2>/dev/null
# 或
cat pyproject.toml | grep -A 30 '\[tool.poetry.dependencies\]' 2>/dev/null
格式模板:
# 技术决策记录
## [框架/库名]
**用途**:[这个库/框架用来做什么]
**选择原因**:[能推断出的原因,或标注「待补充」]
**替代方案**:[如果明显有替代品,列出并说明为何不选]
**注意事项**:[使用时需要特别注意的地方]
## 待补充
- [ ] [无法从代码推断选型原因的库,需要人工说明]
写作要求:
docs/QUALITY.md写什么:什么叫"完成",以及代码审查的检查清单。
扫描方法:
# 看测试文件的模式
find . -name "*.test.*" -o -name "*.spec.*" -o -name "*_test.*" 2>/dev/null | head -10
# 看 CI 配置(如果有)
cat .github/workflows/*.yml 2>/dev/null | head -60
格式模板:
# 质量标准
## Definition of Done(完成的定义)
一个任务算完成,必须满足:
- [ ] 功能在本地运行正常
- [ ] 写了对应测试(覆盖正常路径 + 至少一个异常路径)
- [ ] [根据项目实际情况补充,如:类型检查通过、lint 无报错]
- [ ] git commit 信息清晰
- [ ] 如修改了架构或约定,docs/ 已同步更新
## 代码审查检查清单
**正确性**
- [ ] [项目特有的正确性检查,如:多租户隔离、权限验证]
**可维护性**
- [ ] 命名是否符合 CONVENTIONS.md?
- [ ] 有无重复代码可提取?
- [ ] 业务逻辑是否在正确的层?(见 ARCHITECTURE.md)
## 测试要求
[从现有测试文件归纳出的测试约定,或写推荐标准]
## 待补充
- [ ] [无法从代码推断的验收标准]
docs/exec-plans/tech-debt-tracker.md写什么:扫描过程中发现的潜在问题和技术债务。
格式:
# 技术债务追踪
每条格式:`[优先级: 高/中/低] 问题描述 — 影响范围`
## 当前债务
[扫描时发现的问题,诚实地写]
## 已解决
(空)
判断债务的线索:
每个文件写完后,逐一自检:
输出摘要,包含三部分:
已写入的内容:列出每个文件写了什么
业务解决方案摘要:列出目标用户、核心业务问题、已验证场景和能力边界
需要人工确认的「待补充」清单:
汇总所有文件里标注了「待补充」的条目,这是用户最需要关注的部分
下一步:
harness-step3-session-management skill,建立跨 session 的状态管理(progress 文件 + tasks.json)Take simbajigege/harness-step2-fill-docs from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.