Harness retro
找出过去会话中出错的地方,并调整配置,防止同样的问题再次发生。每个发现都必须指向会话记录中的证据。未经用户批准,绝不应用任何更改。
1. 挖掘会话记录
挖掘器是一个仅使用标准库的脚本,位于此文件旁边。使用 -I 参数运行它。将其输出写入会话暂存区,如果没有暂存区则写入临时目录:
python3 -I <此技能的基础目录>/scripts/mine.py [PATH] [--since 30d] --out <scratchpad>/retro.json
- 不提供 PATH 时,它将挖掘当前工作目录的项目。要挖掘不同项目,请提供其工作目录路径,或使用
--project=<key>指定~/.claude/projects下的文件夹名称。使用=形式,因为键以-开头。 - 如果用户指定了时间窗口,请使用
--since。仅在输出被截断且需要更多数据时,才提高--max-bytes(默认 40000)。 - 如果用户询问所有项目,请针对
~/.claude/projects下的每个文件夹运行一次,然后查看摩擦最多的项目。
脚本会打印一行摘要。如果扫描到的会话很少或没有,请告知用户。Claude Code 会在 cleanupPeriodDays(默认 30)后删除记录,因此较早的历史可能已丢失。如果用户未来希望进行更深入的回顾,建议提高该设置。
2. 阅读命中结果
JSON 文件列出了按摩擦分数排序的会话。每个命中包含 signal、score、ts、prior_prompt(用户请求)、recent_actions(Claude 在命中前的最后一次工具调用)以及 user_reaction 或 detail。
信号类型(大致按价值排序):
user_correction:用户进行了纠正。分数为 5 或更高表示强烈挫败感或重复(“仍然”、“又来了”、“我说过”、咒骂)。edit_revert和edit_churn:Claude 在同一文件上来回编辑。tool_error_streak:Claude 不断遇到相同的失败。interrupted:用户中途停止了 Claude。这通常意味着它走错了方向。permission_denied:Claude 尝试了用户或分类器阻止的操作。self_retraction:Claude 承认了错误。此信号噪声较大,仅作为辅助证据。
正则表达式很粗糙。请排除误报,例如正常指令中的“不要”或网络错误后的“重试”。当命中结果有歧义时,请打开相关会话记录。文件位于 ~/.claude/projects/<key>/<session>.jsonl;使用时间戳进行 grep,并读取前后几行。不要阅读整个会话记录。
3. 归类为模式
将真实命中结果归类为重复模式。一个模式是一个根本原因,描述为 Claude 做错了什么。例如:“生成新图像而非使用已批准的资产库”、“编辑当前版本而非创建新版本”、“声称更改可见但未检查构建输出”。对于每个模式,记录:
- 发生的频率,以及在多少会话中出现。
- 2 到 3 条来自用户的简短引用,附带会话标题和日期。
- 根本原因。选择一个:缺少知识、存在但被忽略的规则、不良默认工作流、缺少验证、或工具或权限缺口。
单个事件仅在用户明显生气或成本很高(例如破坏性或丢失工作)时才计入。
4. 检查现有配置
在提出任何建议之前,请阅读现有配置:
~/.claude/CLAUDE.md,以及项目CLAUDE.md和任何嵌套的。~/.claude/settings.json,以及项目的.claude/settings.json和.claude/settings.local.json(钩子、权限)。- 项目记忆目录
~/.claude/projects/<key>/memory/及其MEMORY.md。 ~/.claude/skills/和项目的.claude/skills/中的技能。
如果某个模式已被 Claude 忽略的规则覆盖,再次添加相同的规则将无济于事。请使规则更具体并将其放置在可见的位置,或改用更强的机制。
5. 选择修复方案
对于每个模式,使用最轻量且能有效工作的机制:
| 根本原因 | 修复方案 |
|---|---|
| Claude 不知道的项目事实 | 在项目记忆目录中创建一个记忆文件,包含前件 name、description、metadata.type,正文包含 Why: 和 How to apply:,并在 MEMORY.md 中添加一行指针。更新现有记忆而非重复。 |
| 此仓库的固定规则 | 项目 CLAUDE.md |
| 适用于所有项目的规则 | ~/.claude/CLAUDE.md |
| 经常被违反且可由脚本检查的规则(格式化、禁止的字符串、提交前必需的命令) | 在 settings.json 中设置钩子。如果可用,请使用 update-config 技能。 |
| 针对安全命令的重复权限提示或拒绝 | 建议添加白名单条目,或如果可用,建议使用 fewer-permission-prompts 技能。不要为破坏性命令放宽权限。 |
| 经常出错的多步骤工作流 | 新建或编辑技能(如果可用,使用 skill-creator)。 |
| Claude Code 产品错误 | 在报告中注明。没有配置修复方案。 |
将规则编写为具体、可检查的指令,并命名具体内容,例如文件、资产路径、命令或版本命名。“小心处理图像”过于模糊,无法执行。
6. 报告并获得批准
按每个模式一个部分呈现,成本最高的优先。每个部分包含:
- 模式,一行描述。
- 证据:次数、会话,以及 2 到 3 条带日期的简短引用。
- 根本原因。
- 提议的更改:目标文件以及确切的文本或差异。
然后询问要应用哪些更改。一个带有每个模式一个选项的 multiSelect AskUserQuestion 效果很好。仅应用已批准的更改,然后列出更改的内容和位置。
编写规则
写入 CLAUDE.md、记忆或技能的任何内容都必须遵循用户自己的 CLAUDE.md 文件中的任何编写规则,例如语气、禁用词或署名规则。保持简短和具体。会话记录中的引用可能包含用户粘贴的秘密。挖掘器会编辑常见的密钥格式,但在将文本复制到任何文件之前,请进行检查。