60 天深度技术课程生成器
生成一套结构化的多日(典型 60 天)深度技术课程:每天一篇详尽讲义,面向资深工程师,目标行业前 5%。本 skill 封装一套已验证的流水线——模板 + 风格指南 + 并行写手 + 官方术语核实 + 进度清单 + 发布前清洗——可直接套用到任意技术主题(如 Linux、SRE、K8S、Dify、Codex 等)。
何时使用
- 用户要求「写一套 N 天课程 / 逐日讲义 / 系统学习某技术」
- 用户要求把已有偏薄的每日内容「加深 / 扩充 / 补足知识点」
- 用户问「课程进度 / 续写 / 怎么恢复没写完的篇目」
- 任何需要大量同构长文(每篇数千至上万字)、且术语必须权威准确的内容生产任务
不适用:单篇博客、碎片化问答、纯代码项目(走 software-company 流程)。
核心纪律(先读这三条)
- 术语权威优先:任何 CLI 旗标、配置 key、API 名称、模型名,动笔前先用 WebSearch 比对官方文档(如
developers.openai.com/codex、各项目官方 docs)。不确定就省略,绝不编造。核实方法见references/web-verify-playbook.md。 - CLI 旗标名 ≠ 配置文件 key 名:这是最大的坑。被废弃的是旧 CLI 旗标(如
--approval-policy),但配置文件(如config.toml)里的 key(如approval_policy)往往本身就是合法字段。写手看到 config key 与 CLI 旗标相似会心虚去改,反而改错。风格指南必须显式声明「CLI 旗标 vs 配置 key」对照表,避免误伤。详见references/style-guide-skeleton.md§4。 - 绝不注水:每新增一段必须带来新事实 / 命令 / 场景 / 数据。同义复述、分段凑字视为废稿。
- 研究先行 + 问答驱动:动笔前先做「研究提纲」——读官方文档 + 为每篇产出 8–12 个「资深工程师会追问的问题」(
questions/dayNN-questions.md,模板见references/question-set-template.md)。写手按问题作答,不是按 19 章标题填格子。这是把 8000 字从「凑结构」变成「真答疑」、从根上消灭注水的关键(灵感来自 STORM / vibe-blog 的 Questioner)。 - 术语白名单账本:建
terms.jsonl术语账本(术语 | 正确写法 | 官方 URL | 抓取日期 | 原文 snippet),写手只允许用账本内术语。quality-gate.mjs --term-ledger会扫「账本外候选术语 / 必含未出现」,比事后 Grep 旧错误术语的黑名单强一个量级(白名单 vs 黑名单)。
写作风格六则
- 中文为主,专有名词保留英文(如 Agent / sandbox / PR),不强行翻译
- 直接、紧凑:不写铺垫废话,每段有信息增量
- 用「你」拉近距离:不说「用户」,说「你」
- 实操导向:任何理论必须有对应的操作步骤和可执行命令
- 用数据支撑:字符数、token 换算、成本计算、性能对比——避免纯观念输出
- 代码块标注语言:
bash /toml /json /yaml / ```markdown - 去 AI 腔:避免「综上所述 / 需要注意的是 / 毋庸置疑」等模板句与工整排比;保持活人味(发布前可接
humanizer/write技能做「去 AI 味」润色,见阶段 5/7)。
字数预算策略
| 主题类型 | 目标范围 | 首稿瞄准 | 下限 |
|---|---|---|---|
| 知识型 Day(正常深度) | 8,000–12,000 字 | 10,000–11,000 | ≥8,000 |
| 轻量/复盘/过渡 Day | 6,000–8,000 字 | 6,500–7,000 | ≥6,000 |
| Workshop/综合实战 Day | 8,000–15,000 字 | 12,000–14,000 | ≥8,000 |
约束:首稿留余量给验证轮补缺(不要写到上限);结构性元素(练习、速记、对比表、验收清单)不参与压缩——绝不因字符限制删除它们;wc -m 对含大量代码块的中文 markdown 会高估正文字数,一律以 scripts/count-prose.mjs 的实测中文字数为准。
每篇必须包含的核心元素
写完后逐项检查(与 day-template 的 19 章对应,但强调密度而非仅结构):
- [ ] 至少 1 个表格对比(方案对比 / 参数对比 / 决策矩阵)
- [ ] 至少 1 个 ASCII 架构图或 Mermaid 图
- [ ] 至少 1 个完整的从零实战流程(当前状态 → 执行操作 → 验证结果,三步齐全)
- [ ] 至少 2 个真实场景演练(一易一难,含真实 prompt 文本和预期输出)
- [ ] 5–8 个坑与排错(现象 → 根因 → 修复命令/配置)
- [ ] 3–5 个反模式 + 正确写法
- [ ] 带参考答案的练习(3–5 道,便于自学校验)
- [ ] 末尾有要点速记(5–8 条 bullet)
- [ ] 所有命令示例可执行(不是伪代码)
- [ ] 费用/配额用稳定表述(按用量计费 / tokens / 任务时长),不写死价格
防空转工程纪律(先读这三条 · 省 token 就是省命)
本 skill 最大的隐性成本不是"写",是"写手异步半途返回 + 截断到最后才暴露 → 返工滚雪球"。下列纪律直接铲掉空转根因:
- 批次即质检,截断不过夜(Gate 3.5):写手每批交稿立刻跑
quality-gate.mjs结构部分,截断/缺章篇当批重派,绝不累积到阶段 4。这是防空转的总开关——见上方 Gate 3.5 小节。 - 验证用脚本,不临拼 awk/Python:所有字数、截断、分级判定用 skill 内置
scripts/quality-gate.mjs与scripts/count-prose.mjs,不要在对话里现拼grep|awk|sed或临时 Python 片段去"目测"质量。临拼脚本既不准(漏闭合 ```、吞标题、误判截断)又每次重造轮子烧 token。脚本路径用绝对 Windows 路径。 - 检测器上线前先抽样校准:
quality-gate.mjs的分级口径(A/B/C/D/T、复盘日放宽、跨篇重复阈值)是针对真实课程标定过的。改动阈值或正则后,必须拿 3–5 篇已知好/坏样本跑一遍对拍,确认不误报再全量跑——别拿全量跑当调试场。
环境坑(Windows + Git Bash · 已踩过,别再踩)
- 删文件用 Python
os.remove,别用rm/Remove-Item:本环境对rm/Remove-Item有 safe-delete 拦截,直接删会失败或进隔离区。要清理临时文件时:python -c "import os; os.remove(r'绝对路径')"。 - Bash 调用用真换行,别塞字面
\n:多行命令写成真正的多行(heredoc/分行),不要把\n当换行符塞进单一字符串参数,否则命令被当一行、引号打架。 - 调用脚本用可移植路径:
node "$HOME/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs" ...(把$HOME换成你机器上 WorkBuddy 的技能根目录)。在少数会触发 MSYS 双转换的 Git Bash 环境里,若报Cannot find module,改用本机实际的 Windows 绝对路径(如C:/Users/<用户名>/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs)即可。 - 单篇失败按 manifest 缺口重派,不当场代写:某篇初稿错了,进 Gate 3.5/4 用 corrector 精准修,主理人不在对话里现写长篇。
工作流(7+ 阶段 + Gate 3.5/4.5/7,每阶段有 Gate)
> 阶段 Gate 总览(每阶段结束必须确认,否则不进下一阶段):
> - ✅ Gate 0:用户确认主线 / 目标人群 / 深度基准 / 天数 N,且 course-map.md 大纲已确认
> - ✅ Gate 1:day-template.md 存在,19 章结构完整,六类硬约束章节已按主题微调
> - ✅ Gate 2:STYLE-GUIDE.md 术语对照表「官方出处」为真实 URL;§4 CLI/配置对照 ≥5 行;§3 含 ≥2 完整命令序列
> - 🆕 Gate 1.5(研究 + 问答集 + 术语账本):每篇 questions/dayNN-questions.md 问答集已生成;terms.jsonl 术语白名单已建,写手只能引用账本内术语
> - ✅ Gate 3:course-manifest.json 全 done,文件数 = N,每篇 count-prose 中文字数 ≥ 下限
> - 🚦 Gate 3.5(防空转 checkpoint):每批写手交稿即跑 quality-gate.mjs 结构部分,截断/缺章篇立即精准重派,绝不累积到最后
> - ✅ Gate 4:过 quality-gate.mjs 硬性门禁(0 不合格 / 0 截断才放行)+ 术语清零 / 清洗 gate / 跨日衔接无断裂 / rubric 全勾
> - 🆕 Gate 4.5(LLM 评审官 + 术语账本复核):对存疑篇跑 LLM 六维可解释评审(references/critic-prompt-template.md),quality-gate.mjs --term-ledger 账本外候选术语逐条确认清零
> - ✅ Gate 5:全课「校对备注 / TODO:verify」计数归零,STYLE-GUIDE.md 已据本轮发现更新
> - ✅ Gate 6:过 quality-gate.mjs --json 终检(A 级占比达标,C/D/T 清单清空)+ README.md 总览已生成
> - 🆕 Gate 7(多格式发布):按目标渠道发布(公众号 / 腾讯文档 / GitHub / Obsidian / HTML 站 / PPTX),对外内容去过 AI 味,回写 manifest 的 published
阶段 0 · 规划与定界(含两种入口 + 大纲确认关卡)
先与用户确认(一次 AskUserQuestion 即可,不要连问):
- 入口模式:A 从零写(无现成稿)或 B 加深(用户已有 dayNN 薄稿)
- 主题主线(如「CLI + 云端 Agent」)、目标人群起点(新手 / 资深工程师)、拆分粒度(按天 / 按周)
- 深度基准:一期建议 1500–3000 字/篇;「前 5%」深度建议 8000–12000 字/篇(轻量/复盘主题 ≥6000)
- 是否需要真实竞品/市场分析(默认不需要,仅 PRD 类才做)
输出:课程根目录(如 codex-course/)、天数、阶段划分(每 ~10 天一个主题阶段)。
大纲确认关卡(必走,防重成本浪费):在派发任何写手之前,先生成 course-map.md(day01–dayNN 标题 + 阶段划分 + 每篇目标字数),用一次 AskUserQuestion 让用户确认/微调。用户确认后才进阶段 3。这对应 deep-research 的「先确认 outline 再并行」。
阶段 1 · 编写每日章节模板
复制 references/day-template-deep.md 到课程根目录(命名 day-template.md),按主题微调章节标题,但保持「机制深潜 / ≥2 场景 / 反模式 / 对比决策 / 带解答练习 / 要点速记」六类硬核章节不缺失。该模板是后续所有写手的统一骨架(固定 19 个章节,见模板说明)。
阶段 1.5 · 研究提纲与问答集(STORM 式问题驱动 · Gate 1.5 前置)
模板只解决「结构」,不解决「写什么才有密度」。这一步把每篇从「填格子」变成「真答疑」:
- 读官方文档:按
references/web-verify-playbook.md四支柱把该主题的真实事实捞出来(这是阶段 2 术语核实的输入)。 - 为每篇生成问答集:用
references/question-set-template.md,产出questions/dayNN-questions.md,每篇 8–12 个「资深工程师会追问的问题」——来自官方文档盲区、相邻篇衔接、已知坑排错三类(复盘/Workshop 篇可减到 4–6 题)。 - 问答集即密度合同:写手后续按问题作答,每问必有回答;Gate 4.5 的 LLM 评审会把「问题是否都被回答」当密度维度。
> 这一步是「研究先行」的落地,直接消灭「结构齐全但全是空话」的注水稿——比写完再返工省一个量级。
阶段 2 · 编写风格指南 + 官方术语核实(关键)
复制 references/style-guide-skeleton.md 到课程根目录(命名 STYLE-GUIDE.md),并按主题填充:
1. 先用 WebSearch 核实该主题的真实术语,方法严格按 references/web-verify-playbook.md 四支柱(知识截止补强 / 时间锚定 / 时态验证 / 双源覆盖):CLI 旗标名、配置文件 key 名、API/SDK 名称、版本与模型名、废弃项。
2. 填 §2 术语对照表(正确写法 + 常见错误 + 出处 + 核实日期)。
3. 填 §3 命令/配置事实基准(含 2–3 种参数组合与预期输出示例)。
4. 显式写 §4「CLI 旗标名 ≠ 配置 key 名」对照,把合法 config key 与已废弃 CLI 旗标分开列,杜绝写手误改。
5. 填 §5 字数目标与「禁止注水」硬指标。
6. 导出术语账本 terms.jsonl(白名单,关键升级):把 §2 每个术语落成一行 JSONL —— {"term","correct","wrong","url","fetched","snippet","required":true/false}(模板见 references/term-ledger-template.jsonl)。required:true 的术语是「该课必出现」的核心概念。写手只允许引用账本内术语,遇陌生术语先报主理人核实入库,绝不自造——这把「事后 Grep 黑名单」升级为「事前白名单」。
风格指南是写手的唯一事实来源;其术语必须来自官方文档,而非模型记忆。(注:写手同时约束于 STYLE-GUIDE.md 与 terms.jsonl 两份,后者供 quality-gate.mjs --term-ledger 机检。)
阶段 3 · 并行写手扩充(manifest 驱动 · 两遍法)
先建进度清单:在课程根目录创建 course-manifest.json(结构见 references/course-manifest-template.json)。它是断点续写的唯一真值——哪些篇目 done、字数多少、谁写的、是否 verified。
将 N 篇按以下两遍法拆分,全部 run_in_background: true 并行派发 general-purpose 子代理(prompt 模板见 references/writer-brief-template.md):
- 第一遍 · structure pass(模式 A 从零写才需要):每人 10–12 篇,按 19 章骨架填「学习目标 + 机制深潜 + ≥2 场景 + 反模式 + 带解答练习」最小可用版,
max_turns: 40。目标不是字数,是把骨架立住。 - 第二遍 · deepen pass(模式 A/B 都要):每人 5–6 篇,在骨架/薄稿基础上大幅加厚到目标字数,
max_turns: 60。
每个写手严格按 references/writer-brief-template.md 接收任务:
- 必须 Read 现有 dayNN.md + day-template.md + STYLE-GUIDE.md
- 携带「术语铁律」清单(来自风格指南 §2/§4)
- 额外携带:questions/dayNN-questions.md 问答集(按问题作答,每问必有回答)+ terms.jsonl 术语账本(只用账本内术语,遇新术语先报主理人而非自造)
- 跨日连贯(LongWriter 式批内并行、批间接力):每篇写手注入「上一篇末节 + 本篇明日预告」,避免各篇自说自话——这是 Gate 4 跨日衔接总出问题的根因解法
- 完成后仅汇报每篇字数 + 亮点,不把正文灌回对话
拆片不重叠;写手实际是同步返回的(见已知坑),但绝不信任汇报——以 course-manifest.json 与磁盘实况为准。某篇初稿用了错误术语,进阶段 4/5 修复,不要当场代写。
> 课程 < 30 天且用户选「单遍加深」时,可跳过 structure pass,直接 deepen。
Gate 3.5 · 批次结构质检 checkpoint(防空转核心 · 每批交稿必跑)
这是本 skill 防空转的关键开关。 写手是异步、半途返回、且谎报进度是常态——若等 60 篇全部"写完"再统一质检,截断/缺章篇会扎堆暴露,返工要重读几十篇、重派几十篇,token 与时间双爆。正确做法是每批写手交稿即质检、即重派:
cd {{COURSE_ROOT}}
node $HOME/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs . \
--min 6000 --min-knowledge 8000 --min-light 6000 [--review-map course-map.md] [--red-flags "旧术语1|旧术语2"]
- 脚本位于技能目录的
scripts/下,调用用可移植路径$HOME/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs(把$HOME换成你机器上 WorkBuddy 的技能根目录)。在少数触发 MSYS 双转换的 Git Bash 环境里,若报Cannot find module,改用本机实际的 Windows 绝对路径即可。 - 报告里
[T]截断 与[C]/[D]末等 的篇目,立即按 dayNN 精准重派 corrector(只补缺失的末节/章节,不重写全文)。重派后仍跑同一条命令复核,直到该批再无 T/C/D。 - 每批清空 T/C/D 后才派下一批,或并行派新批时也带着"已知缺口清单"——绝不让截断滚雪球到阶段 4。
- 复盘日(course-map.md 里标了「复盘/总览/收官」的 day)门禁已自动放宽(只要求机制深潜 + 要点速记),不会误报,无需人工豁免。
- 进度以此命令的磁盘扫描结果 +
course-manifest.json为准,绝不信任写手汇报。
阶段 4 · 验证轮(术语 + 字数 + 清洗 + 跨日 + rubric · Gate 4 硬性门禁)
全部写手交稿、且各批次已在 Gate 3.5 清空 T/C/D 后,按 references/verification-checklist.md 执行。Gate 4 的硬性准入线:先跑 quality-gate.mjs 全量门禁,报告里 不合格(D)=0 且 截断(T)=0 才进入下面的逐条精修;否则先返工到 0 再继续。
cd {{COURSE_ROOT}}
node $HOME/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs . --min 6000 --min-knowledge 8000 --min-light 6000
# 期望输出:不合格(D)=0 截断(T)=0 ;若有 D/T,先按 dropList 精准重派再继续
- 精确字数:跑
node $HOME/.workbuddy/skills/sixty-day-course-writer/scripts/count-prose.mjs <课程根目录>,得到每篇中文字符数(已排除代码块/frontmatter/表格,比wc -m真)。脚本与本 SKILL.md 同目录,主理人用其绝对路径调用,传入课程根目录作参数。低于下限的篇目标红。 - Grep 扫描所有
day*.md,枚举「旧错误术语 / 已废弃旗标」模式(来自风格指南 §2 错误列),命中行需确认是否处于「教学警示」语境(允许)还是误用(需返工)。 - 发布前清洗 gate:
grep -nE "校对备注|TODO|待核实|\[DISCARDED|MAT-"扫描,命中即视为未达标,先清理再发布。 - 跨日一致性:比对每篇「明日预告」与下一篇「开篇引子」是否衔接;对 STYLE-GUIDE §2 正确术语做全局一致性 Grep。
- 验收 rubric:对每篇勾
references/verification-checklist.md的迷你 S/P/C/B 勾选表,密度不靠「感觉」靠勾选。 - 回写 manifest:每扫完一篇,更新
course-manifest.json的status/verified/cjk。
对残留误用篇或不达标篇,派专用 corrector 子代理做「术语手术」(只改术语/补厚度,保留其他内容),最多 1 轮返工。返工后重跑 quality-gate.mjs 确认 D/T 归零再进阶段 5。
Gate 4.5 · LLM 评审官(可解释评审 · Evaluator-Optimizer)+ 术语账本复核
脚本门禁(quality-gate)只判「过不过」,LLM 评审官负责说「为什么不行 / 怎么改」。对 C 级 / 边界 A / 随机抽样篇目跑一轮(prompt 见 references/critic-prompt-template.md):
- 六维评分(事实准确 / 结构完整 / 密度 / 问答覆盖 / 跨日衔接 / 风格),输出 JSON 含
issues+spot_fix建议。 spot_fix: true→ corrector 只改 issues 列出的点(定点修复,避免重写引入新 AI 痕迹,仿 InkOS/Spot-Fix),而非重写全章。- 单篇最多 2 轮;仍不达标写入
debt.jsonl技术债台账带病上线,README 标注「已知瑕疵」,不阻塞交付(仿 novelforge)。 - 评审官全新会话、仅读磁盘文件,避免「自评乐观」;默认 temperature 0 + 拒稿偏向。
术语账本复核(白名单):
cd {{COURSE_ROOT}}
node $HOME/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs . --term-ledger terms.jsonl
# 报告新增「账本缺 / 账本外候选术语」两列;账本外候选术语需逐条人工确认是误报还是真幻觉
> 白名单式核查比事后 Grep 旧错误术语强一个量级:它能抓「模型自造的新错术语」,黑名单只能抓「已知的旧错术语」。仿 novelforge 门控式 FactChecker——账本外候选术语只在命中高信号时才深查,避免全量核查烧钱。
阶段 5 · 术语根因修复
若验证轮发现风格指南自身的术语有歧义或写手反复误改同一类字段(典型即「config key 被当错误术语删」),回到 STYLE-GUIDE.md 补一段对照/澄清(如新增 §3.5「CLI 旗标名 ≠ config.toml key 名」),并清掉正文里因此产生的悬空「校对备注」。根因修了,后续复用不再犯。
阶段 6 · 生成课程总览(交付即产品 · Gate 6 终检)
所有篇目 verified 后,先过终检门禁再生成总览:
cd {{COURSE_ROOT}}
node $HOME/.workbuddy/skills/sixty-day-course-writer/scripts/quality-gate.mjs . --json --min 6000 --min-knowledge 8000 --min-light 6000
# 终检标准:截断(T)=0 且 不合格(D)=0;C(刚刚合格) 也建议在上一步清空。
# 若仍残留 T/D,回到 Gate 3.5/4 重派,不要"带病交付"。
门禁通过后,生成 README.md:
- 课程定位 / 目标人群 / 深度基准
- 阶段划分与学习路径
- 每日索引表:| 天 | 标题 | 中文字数 | 状态 |
- 使用说明(如何本地预览 / 如何「续写 dayNN–dayMM」)
这是课程的门面,缺它等于只交了一堆散文件。
阶段 7 · 多格式发布管线(发布即产品 · Gate 7)
过 Gate 6 终检后,按目标渠道发布(详见 references/publishing-pipeline.md)。所有渠道可选,按用户需求启用,不要默认全开:
| 渠道 | 连接器 / 技能 | 产物 |
|---|---|---|
| 公众号草稿 | wechat-publisher(已装) |
每篇 / 总览 → 草稿箱 |
| 腾讯在线文档 | tencent-docs 连接器 |
整课 → 在线协作文档 |
| GitHub 仓库 | github 连接器 |
仓库 + Pages 课程站 |
| 知识库同步 | obsidian / ima / lexiang |
笔记 / 知识卡片 |
| HTML 课程站 | html-deploy / cloudbase |
可分享公网链接 |
| 课件 PPTX | pptx-generator / tencent-pptx |
每日 / 总览课件 |
Gate 7 准入:
- 发布前必须过 Gate 6 终检(quality-gate T=0 且 D=0)。
- 对外内容(公众号 / 公开站)走 humanizer 或 write 技能做「去 AI 味」润色——否则一眼 AI 腔掉粉(涨粉场景尤甚)。
- 大批量用连接器批量接口,别手工逐篇复制;每发一渠道回写 course-manifest.json 的 published 字段。
- 可选项:把课程蒸馏成可执行 skill(cangjie-skill 思路)或建知识框架图(knowledge-framework-builder),作衍生交付。
复用清单(下次直接照做)
- 复制
references/day-template-deep.md→ 课程根day-template.md,微调章节名。 - 复制
references/style-guide-skeleton.md→ 课程根STYLE-GUIDE.md,按references/web-verify-playbook.md填实术语。 - 建
course-manifest.json(模板见references/course-manifest-template.json)。 - 生成
course-map.md让用户确认大纲(关卡)。 - 阶段 1.5:为每篇生成
questions/dayNN-questions.md问答集(按references/question-set-template.md,每篇 8–12 题)。 - 阶段 2:建
STYLE-GUIDE.md并导出terms.jsonl术语白名单账本(模板references/term-ledger-template.jsonl)。 - 按
references/writer-brief-template.md派并行写手(两遍法);写手按问答集作答、只用账本术语、注入跨日衔接。 - 每批交稿跑 Gate 3.5:
node scripts/quality-gate.mjs <课程根>结构质检,截断/末等篇当批重派,不清空不进下批。 - Gate 4 + Gate 4.5:跑
quality-gate.mjs(含--term-ledger terms.jsonl)+ LLM 评审官(references/critic-prompt-template.md)逐项修,D/T/账本外术语归零。 - Gate 5/6:根因修复 +
quality-gate.mjs --json终检 + 生成README.md总览。 - 阶段 7:按渠道发布(公众号 / 腾讯文档 / GitHub / Obsidian / HTML 站 / PPTX),对外内容去过 AI 味(接
humanizer/write)。 - 发布前跑自测:
node "$HOME/.workbuddy/skills/sixty-day-course-writer/tests/run-self-test.mjs",确认门禁分级口径 PASS(尤其改过quality-gate.mjs阈值/正则后)。
打包资源
references/day-template-deep.md— 通用 19 章深度讲义结构(可复制)references/style-guide-skeleton.md— 风格指南骨架 + 术语核实纪律 + 旗标/配置坑references/writer-brief-template.md— 并行写手 Agent prompt 模板(含两遍法占位符)references/verification-checklist.md— count-prose + Grep 旧术语 + 清洗 gate + 跨日一致性 + 验收 rubric + manifest 回写references/web-verify-playbook.md— 联网核实四支柱方法论(知识截止/时间锚/时态/双源)references/question-set-template.md— STORM 式问答集模板(研究驱动写作,按问题作答而非填格子)references/term-ledger-template.jsonl— 术语白名单账本模板(写手只用账本内术语,门禁扫账本外候选)references/critic-prompt-template.md— LLM 评审官 Prompt(六维可解释评审 + 定点修复 + 技术债台账)references/publishing-pipeline.md— 多格式发布管线(公众号/腾讯文档/GitHub/Obsidian/HTML站/PPTX)references/course-manifest-template.json— 进度清单结构模板scripts/count-prose.mjs— 精确中文字数统计(排除代码块/frontmatter/表格)scripts/quality-gate.mjs— 自动化质量门禁(v1.3.0 分级口径):fence-aware 截断检测 + 六类硬核分级(缺 1→B、缺 ≥2→C、齐全且无硬伤→A)+ 术语红线语境判定 + 跨篇重复度 + 占位符残留 + 一键分级(A/B/C/D/T);支持--term-ledger <path>(白名单复核:账本缺/账本外候选术语)+--questions <dir>(阶段 1.5 问答集覆盖率机检,默认只报告,--min-coverage >0时覆盖不足降 C)+--filler-per-1k(注水密度阈值,默认 1.5)。Gate 3.5/4/6 硬性准入线 + Gate 4.5 复核。tests/— 质量门禁回归自测:run-self-test.mjs+fixtures/(完整篇→A、截断篇→T 固定夹具),发布前证明门禁分级口径稳定可信,改过阈值/正则后必跑。
已知坑(已踩过,别再踩)
- MSYS 路径双转换:在 Windows + Git Bash 下用
init_skill.py --path "$HOME/.workbuddy/skills"会把 skill 建到C:\c\Users\...幽灵目录;创建后务必mv到真实C:\Users\<用户名>\.workbuddy\skills\(即你的 Skills 根目录)。 - 写手 turn 数超限:单写手负责太多篇加厚到 8000+ 字可能超
max_turns;两遍法把每人篇数压到 5–6(deepen)/10–12(structure),structure 给 40、deepen 给 60。 - 术语「误伤」:正文正确的 config key 被写手当错误删改——根因在风格指南没区分 CLI 旗标与配置 key,见阶段 2/5。
- 字数度量偏差:
wc -m对含大量代码块的中文 markdown 会高估「正文」字数;一律改用scripts/count-prose.mjs,它只数中文字符且排除代码块/frontmatter/表格。 - 写手"半途返回"是常态:批量派发时,写手常只完成分配篇目的一部分就返回汇报(甚至汇报里不提未完成项)。绝不能信汇报,必须按
course-manifest.json+count-prose.mjs复核磁盘实况,再按真实缺口重派下一批。manifest 是断点续写的唯一真值。 seq在 Git Bash 里不存在:遍历 day01–day60 别用for i in $(seq -w 1 60),直接for f in day*.md通配。- 字数上限是软的:补齐 19 章结构后超上限 1.5–2.5 倍很常见,先查注水、无注水则保留,别为压字数删真实内容(详见 verification-checklist §5)。
- 后台 agent 的 task_id 不可用:本环境下
Agent(run_in_background)返回的 ID 无法用TaskOutput查询,写手实际是同步返回的。核实进度只能查磁盘文件字数 + manifest。 - 章节数表述要一致:本 skill 模板固定 19 章(见 day-template-deep.md),任何地方提到「25 章/20 章」都是笔误,以 19 章为准。
- 研究先行防幻觉:没读官方文档就写,必然编术语;阶段 1.5 问答集 + 阶段 2 术语账本是防幻觉的双保险,别跳。
- 术语白名单 > 黑名单:只 Grep 旧错误术语会漏掉「模型自造的新错术语」;用
terms.jsonl白名单 +--term-ledger才是完整解(白名单能抓未知新错词,黑名单只能抓已知旧错词)。 - 发布前去过 AI 味:公众号 / 对外内容默认过
humanizer或write技能,否则一眼 AI 腔掉粉(涨粉场景尤甚)。 - 发布渠道别全开:按需启用,批量用连接器接口,别手工逐篇复制。