关于 rigour
rigour 是面向复杂、不确定或上下文负担较重任务的 Agent 技能,可叠加在具体工作阶段技能之上。它通过证据记录、诊断、验证、风险排序和状态留存减少依赖即兴判断。
主要功能
- 01区分已验证、推断和假设
- 02用多个假设诊断异常
- 03变更前定义成功检查
- 04规划上下文预算并记录笔记
- 05优先处理基础性风险
- 06用停止条件触发策略调整
适用场景
- 01调查与预期不符的系统行为
- 02规划难以撤销的变更
- 03拆解含有重大未知项的工作
- 04在上下文丢失后恢复长期任务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ davidlee/ doctrine --skill rigour安装后在 Claude Code 中输入/rigour确认已加载。
附带文件reference.md
详细介绍
严谨
一种适用于能力边缘工作的行为姿态:面对复杂性、不确定性或上下文成本超出流畅即兴应对能力的问题时采用。将其叠加在起主导作用的阶段技能(设计、执行、审计等)之上,就像叠加结对或演练一样——它不会取代路由,也不是一个阶段。
在能力边缘,特定的失败模式占主导:捏造出自信的结论、锚定在第一个假设上、贪多求快地阅读、没有证据就宣布成功、只是一味加大力度重试而不换方法,以及在上下文压力下丢失状态。下面的每项规范都用明确流程取代原本必须完美无缺的判断。规范比能力更省成本;用流程换取正确性。
开始前校准
严谨需要消耗 token 和时间。根据风险 × 可逆性调节力度:
| 可逆 | 难以逆转 | |
|---|---|---|
| 低风险 | 无需采用特殊姿态——直接处理 | 仅进行预先登记的验证 |
| 高风险 | 记录清单 + 验证 | 采用完整姿态,启用所有规范 |
明确说出任务属于哪个象限,以及要启用哪些规范。范围变化时重新评估——任务过程中可能转移到其他象限。
路由:症状 → 规范
根据你注意到的症状进行路由,而不是根据生命周期阶段:
| 症状 | 规范 |
|---|---|
| 自信的结论却缺乏有力证据 | 认知记录清单 |
| 行为与对系统的模型相矛盾 | 差异诊断 |
| 即将提交难以逆转的更改 | 预先登记验证 + 审计记录清单 |
| 问题无法纳入上下文;阅读似乎没有尽头 | 上下文节约 |
| 问题太大 / 太复杂,难以着手 | 按风险排序拆解 |
| 对同一件事的第二次或第三次尝试失败 | 触发条件 |
| 有个无法自行解决的未知事项 | 认知记录清单 → 升级处理 |
| 任务耗时较长;可能丢失上下文或需要交接 | 外部化状态 |
症状可能叠加;符合条件的规范都要启用。如果没有任何症状符合,但工作仍让你感到力有不逮,这本身就是一个触发条件——停下来重新评估。
各项规范
认知记录清单
分别记录你实际知道的内容和你相信的内容。
- 为每项重要主张标记状态:已验证(你观察到的)、推断得出(由已验证的主张推导而来)或假设(你需要它为真)。
- 不要基于
假设主张做出不可逆的操作。将其升级——通过验证或推导——或在继续之前明确提出。 - 明确登记未知事项,并分类为:可通过研究解决(在上下文预算内去解决)与 需要人工决策(尽早提出,提供选项和建议——绝不默默猜测)。
- 表达流畅并非证据。如果一段话读起来信心十足,就审查其中哪些主张确实是
已验证。
退出条件:结论所依据的每项主张都已验证或推断得出,或者已向用户说明其假设状态。
差异诊断
适用于故障、异常,以及任何系统行为与现有模型相矛盾的时刻。
- 停止推进。异常说明你的模型可能有误;基于错误模型开展的工作都是浪费。不要为异常找借口。
- 列出至少两个仍然成立的假设。只有一个假设就是锚定。
- 选择能够区分这些假设的最廉价观察——而不是最容易尝试的修复方法。先预测每个假设会产生什么结果。
- 观察、更新、删减,然后重复。如果证据与所有假设都不符,就添加新的假设。
- 不要修复无法解释的问题。因未知原因奏效的补丁,在记录清单中属于
假设主张。
退出条件:有一个假设能解释所有观察结果,包括最初的意外情况——或者在征得用户同意后,明确暂缓处理该异常。
预先注册验证
在采取行动之前决定什么样的证据才算数,这样结果就不会诱使你降低标准。
- 做出更改前,写下什么观察结果能证明成功,以及什么结果会推翻这一判断。
- 优先选择在你错了时会明确失败的检查——无法失败的测试什么也验证不了。
- 更改后,运行预先注册的检查。“运行了”/“能编译”/“通过了原本就能通过的检查”都不算。
- 报告证据,而非感受:说明观察到了什么,或者说明跳过了验证及其原因。绝不要因为急于完成而降低检查标准。
退出条件:已观察到预先注册的结果,且结果符合预期;或者将不符合之处报告为发现,而不是掩盖过去。
上下文预算
上下文是最稀缺的预算;有计划地使用,并设定停止条件。
- 阅读任何内容之前,先写下你要回答的问题,以及具体的停止条件——即使答案不完整,满足什么条件就足够。
- 以目标为先阅读:先浏览结构,再深入阅读与问题相关的内容。把旁支记在列表里,不要追着它们跑。
- 边读边提炼:每读完一个来源,就用一两行持久笔记概括其贡献。笔记才是你要保留的内容;对上下文中段细节的原始记忆会逐渐衰退。
- 在你的执行环境允许时,委派批量阅读;在自己的上下文中保留结论,而不是整份文件内容。
- 当上下文压力增大时,在质量下降之前先把信息外化(见下文),不要等到之后再做。
退出条件:预先提出的问题已按停止条件得到解答,且答案保留在笔记中,而非仅靠未经辅助的回忆。
按风险排序拆解
安排工作时,要优先消除不确定性,而不是追求进展感。
- 列出各项决策和未知因素;标记出其中的基础性因素——如果它们发生变化,其他工作就得围绕它们重做。
- 首先处理风险最高的基础性未知因素,用能消除它的最小探查手段(技术验证、存根实现或精简的端到端路径)。
- 推迟可逆的决策;推迟成本低时,尽量保留选择空间。
- 拆分工作,确保每个部分都可独立验证——在大爆发式组装中,集成风险会悄然累积。
- 先做最简单的事是一种反模式:它制造了显而易见的进展,却让致命的未知因素一直拖到最后,而那时解决成本最高。
退出条件:剩余工作的不确定性很低——不存在会使已完成工作失效的未知因素。
触发条件
预先设定机械式停止条件——因为到了当下,你会为继续下去找理由。
- 同一修复失败两次 → 停止。第三次尝试必须采用不同的策略,而不是加大力度;通常应进行诊断(见差异诊断)或升级处理。
- 循环修改——第三次因相同原因修改同一文件 → 停止,从头重新阐述实际问题。
- 范围偏移——当前操作很难与既定目标建立联系 → 停止,重新推导从目标到操作的逻辑链;删减或重新规划。
- 意外情况——任何与记录相矛盾的观察结果 → 在继续下一步之前进行差异诊断。
- 沉没成本——“已经投入太多,不能改变做法”本身就是触发条件,不是继续下去的理由。
触发条件被触发,意味着获得了信息,而非遭遇失败。真正可贵的做法,是在出现信号时尽早改变策略,而不是等到精疲力尽后才改变。
状态外置
假设上下文随时可能丢失;工作的方式应让这几乎无关紧要。
- 将持久状态——计划、有理由支撑的决策、台账、待解问题、下一步——保存在产物中,而不是脑海里。持续记录:状态一有变化就更新产物,不要等到最后才一次性整理。
- 记录“为什么”,而不只是“是什么”:缺少理由的决策会被接手的人反复审议,代价高昂——包括未来的你。
- 在每个自然的暂停点,问问自己:一个新接手的 Agent 能否仅凭产物继续工作?如果不能,就把缺失的信息作为下一项记录下来。
- 将持久知识存放在任务结束后仍会留存的地方(项目记忆、设计文档、笔记),不要把它留在对话中。
退出条件:一个从零开始的读者仅凭产物就能继续工作。
防护原则
- 不要为了严谨而严谨。台账、假设和检查的作用是改变你的行动;如果某种流程从未影响决策,那就是浪费——改用更轻量的象限。
- 不要让这种工作方式取代阶段技能自身的流程;它只是补充。
- 不要在任务中途悄悄降低标准。如果因时间或上下文压力而放弃某项规范,请明确说明。
- 如实报告不确定性,绝不粉饰:标记为
assumed的说法,在最终总结中仍须清楚标明是假设。
预期成果
- 结论可追溯到已验证的观察;假设清晰可见,而不是藏在流畅的表述中。
- 对故障作出解释,而不是绕过问题打补丁。
- 趁改变方向仍然代价低廉时,优先消除风险最高的未知因素。
- 一旦出现信号,立即调整策略,及早应对失败。
- 在任何阶段,即使上下文丢失,也能继续工作;接手者仅凭产物就能接续工作。