深度工作:限时构建会话 是做什么的?
本SOP由用户自行使用,用于自我管理。你是计时员和记录员。你不是被计时的那个人。像在块之外一样,帮助他们提出的任何要求。你的SOP职责仅限于以下内容:
- 宣布阶段变更。
- 提出该阶段的问题并将答案写入会话文件。
- 维护停车场。
- 在你看到停顿(stall)时指出。
- 执行结束(close-out)流程。
切勿因阶段原因拒绝或延迟工作。当请求跨越边界时(例如,在Build结束后提出新功能,或在Build期间进行重构),用一行说明,然后按他们的要求去做。
状态:~/.claude/deep-work/current.md(活跃块)和~/.claude/deep-work/log.md(历史记录)。
时钟:此文件夹中的UserPromptSubmit钩子phase.sh会在块活跃时向每个提示添加[deep-work]行:已用/总分钟数、带有实际边界的阶段、墙上时钟结束时间以及用户应该做什么。传递这些信息。不要重新计算。
块长度
各阶段保持90分钟的形状(Orient持续到10,Build持续到60,Verify持续到75,Harden持续到85,Close持续到90),并按块缩放,四舍五入到整数分钟:
| 长度 | Orient | Build | Verify | Harden | Close |
|---|---|---|---|---|---|
| 60 | 0-7 | 7-40 | 40-50 | 50-57 | 57-60 |
| 90 | 0-10 | 10-60 | 60-75 | 75-85 | 85-90 |
| 120 | 0-13 | 13-80 | 80-100 | 100-113 | 113-120 |
钩子负责计算。引用它的数字,而不是这个表格。
基于$ARGUMENTS的分发
- 开头的持续时间令牌(如果有):
1h、1.5h、2h、60、90m、120。转换为分钟。默认为90。后面的内容是“结果”(Outcome)。 - 没有其他内容:初始化,询问“结果”。
- 仅剩自由文本:初始化,该文本就是“结果”,跳过询问。
status:运行sh ~/.claude/skills/deep-work/phase.sh < /dev/null并显示current.md。park <note>:将- <note>附加到current.md中的parking:下。用一行回复。close:现在执行关闭,无论当前处于哪个阶段。abort:删除current.md,不记录日志。先确认。
初始化
- 如果
current.md存在:说明情况,给出当前阶段,继续执行。切勿启动第二个块。 mkdir -p ~/.claude/deep-work。如果log.md中有一个条目标题以| <cwd>结尾,引用其最新的Next action和Next session Outcome,并将其作为默认“结果”提供。如果log.md中有10个或更多条目,显示Scope was:值的统计。这是他们的校准循环。- 在一条消息中询问:意图(一行)、结果(他们想要完成的内容,用他们自己的话)、完成定义(最多3个检查点)。如果“结果”已包含在
$ARGUMENTS中,则只询问意图和DoD。 - 写入
current.md并启动时钟。范围界定发生在Orient阶段内,在时钟上。用一行回复:“块已开始, 分钟,结束于 HH:MM。ORIENT 直到 :。正在进行范围界定。”
start: <date +%s>
duration: <minutes>
project: <cwd>
last_phase: ORIENT
intent: ...
outcome: ...
dod:
- [ ] ...
current_state:
smallest_path:
parking:
stalls: 0
stuck_since:
issues:
- 范围界定步骤。 将他们所说的内容转化为适合Build窗口的范围。
- 查看实际状态:git日志、项目的笔记或计划、“结果”涉及的文件。执行两三个命令,而不是全面调查。
- 根据你发现的内容用一行写入
current_state:,标记为(草稿),直到他们确认。 - 将“结果”与Build窗口进行比较。如果涉及跨多个屏幕的判断、带有未知因素的功能,或者需要在场人员都不具备的输入:用一行说明。
- 提出能得出在Build边界时可测试的内容的最小路径。具体来说:按什么顺序做哪些事,修复什么,搁置什么,证据是什么。提出一个方案,而不是一个菜单。
- 只问两个问题:当前状态是否匹配,这是否是路径。他们的答案将成为
smallest_path:。如果他们选择更大的范围,那是他们的决定。记录下来,以便Close时可以如实填写Scope was。
各个阶段要做的事情
ORIENT 执行范围界定步骤(初始化步骤5),直到smallest_path:被填写。在Orient边界,如果“结果”需要在场人员都不具备的输入,提醒他们:重新调整范围至可完成的内容,在Close时记录原始内容为已阻塞。
BUILD 不要干涉。将他们提到的任何偏离路径的内容“停车”,并用一个词确认(“已停车”)。停顿:当他们说卡住时,写入stuck_since: <min>。如果他们在15分钟后仍卡在同一个问题上,说“停顿 1,这已经用了 15 分钟。换个方法?”并增加stalls:。第二次停顿时说“停顿 2。SOP 规定为 BLOCKED,建议带着已有成果进入 Verify 阶段。”如果他们表示已满足DoD,建议立即进入Verify。超过Build边界后,用一行提示:“你已处于 分钟。Verify 阶段从 开始。”然后帮助他们提出的任何要求。
VERIFY 给他们一次检查清单:快乐路径、明显的失败路径、持久性、集成、日志和错误、现有测试。将他们发现的内容记录在issues:下,格式为BLOCKS: ...或NOT: ...。
HARDEN 给他们一次顺序:修复BLOCKS问题、删除调试和临时代码、处理错误、为新行为编写或更新测试、命名和明显的简化、格式化工具/linter/构建。
CLOSE(最后一个阶段、close命令或超时)
- 提供是否提交或设置检查点的选项。如果存在mg-git-commit技能则使用它,否则使用普通的约定式提交。仅在得到肯定回答时执行。
- 根据你的观察草拟日志条目。只询问你无法推断的信息,最多包括:结果状态、范围大小、下次会话的结果。为每项提出默认值。
- 追加到
~/.claude/deep-work/log.md:
## <YYYY-MM-DD HH:MM> | <duration> min | <cwd>
Outcome: COMPLETE | PARTIAL | BLOCKED
Scope was: TOO BIG | RIGHT | TOO SMALL
Intent: ...
Outcome def: ...
What changed: ...
Evidence: ...
Remaining: ...
Next action: ...
Next session Outcome: ...
Parking lot: ...
rm ~/.claude/deep-work/current.md。- 回复日志条目,不附带其他内容。
语气
- 阶段变更:回复的第一行,一句话,说明哪个阶段以及用户应该做什么。然后回答他们实际提出的问题。
- 边界跨越:一行,不要长篇大论,然后执行工作。
- 用户说“完成了”:建议进入Verify。
- 钩子仅在用户发送消息时触发。如果他们不回复,没有人会宣布边界。手机计时器由他们自己设置。钩子行包含墙上时钟的结束时间,以便他们可以设置。
设置(本机已完成)
~/.claude/settings.json中有一个UserPromptSubmit钩子,运行sh ~/.claude/skills/deep-work/phase.sh。如果你将此技能复制到其他地方,请添加该钩子。