☰
get-shit-done 的 Continue-Here 模板:跨会话无缝续作的状态交接机制实战
2026/10/11 15:40:18 网站建设 项目流程

get-shit-done 的 Continue-Here 模板:跨会话无缝续作的状态交接机制实战

【免费下载链接】get-shit-doneA light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done

导读

在 Claude Code 驱动的 spec-driven 开发流程中,一个 phase 往往横跨多个会话,而每次会话的上下文窗口都会清空。get-shit-done(GSD)通过.continue-here.md状态交接文件解决"从哪里继续"的问题:它在暂停时把当前位置、已完成/未完成任务、关键决策、阻塞项与心理上下文固化为一套结构化模板,在恢复时由 resume 流程消费,让全新的 Claude 实例无需阅读任何历史记录即可精准续作。本文以仓库内 continue-here.md 模板为骨架,结合 pause-work / resume-project 工作流与 SDK 查询层的源码实现,完整讲解该模板的字段语义、编写规范、生成与消费链路,让你能直接套用此格式编写高质量交接文件。

模板定位:GSD 工件分类学中的"暂停态"核心工件

在 GSD 的工件分类学(artifact-types.md)中,HANDOFF.json / .continue-here.md与 ROADMAP、STATE、PLAN、SUMMARY 并列为核心工件(Core Artifacts):

  • 形态(Shape):结构化暂停状态 —— JSON 机器可读 + Markdown 人可读;
  • 生命周期(Lifecycle):暂停时创建 → 恢复时消费 → 下次暂停时替换,属于一次性(one-shot)工件;
  • 位置(Location):.planning/HANDOFF.json与.planning/phases/XX-name/.continue-here.md(或 spike / deliberation 路径);
  • 消费方(Consumed by):resume-project工作流。

其中.continue-here.md承担"人可读"部分:它的读者是下一个会话的 LLM Agent,因此模板设计的核心原则是"具体到让一个全新的 Claude 实例立即理解"。

文件位置约定:写入.planning/phases/XX-name/.continue-here.md

模板开篇明确其目标位置:

.planning/phases/XX-name/.continue-here.md

即该文件不是放在仓库根目录,而是放在当前正在进行的 phase 目录内部。此约定由 pause-work.md 工作流的上下文检测步骤(detect step)确定目标路径:

  • Phase 工作:存在活跃 phase 目录 → 写入.planning/phases/XX-name/.continue-here.md;
  • Spike 工作:存在活跃 spike 目录(且无活跃 phase)→ 写入.planning/spikes/SPIKE-NNN/.continue-here.md;
  • Sketch 工作:写入.planning/sketches/.continue-here.md;
  • Deliberation 工作:写入.planning/deliberations/.continue-here.md;
  • Research 工作:写入.planning/.continue-here.md;
  • 默认兜底:无任何可检测上下文 → 写入.planning/.continue-here.md,并在<current_state>中注明歧义。

检测命令通过ls -lt按修改时间排序,取最近修改的 PLAN.md / SPIKE.md 等文件来确定上下文类型:

phase=$(( ls -lt .planning/phases/*/PLAN.md 2>/dev/null || true ) | head -1 | grep -oP 'phases/\K[^/]+' || true) spike=$(( ls -lt .planning/spikes/*/SPIKE.md .planning/spikes/*/DESIGN.md .planning/spikes/*/README.md 2>/dev/null || true ) | head -1 | grep -oP 'spikes/\K[^/]+' || true)

YAML Frontmatter:机器可读的定位元数据

.continue-here.md顶部必须包含 YAML frontmatter,用于让恢复流程快速判断"我在哪个 phase、哪个任务、进行到哪一步":

--- phase: XX-name task: 3 total_tasks: 7 status: in_progress last_updated: 2025-01-15T14:30:00Z ---

各字段语义(来自模板的<yaml_fields>区块):

字段含义取值说明
phase当前阶段名使用目录名,例如02-authentication
task当前任务编号整数,例如3
total_tasks本 phase 的任务总数整数,例如7
status状态in_progress、blocked、almost_done三选一
last_updated更新时间戳ISO 8601 格式,例如2025-01-15T14:30:00Z

last_updated在真实工作流中并非手写,而是由 SDK 查询命令生成(见 pause-work.md):

timestamp=$(gsd-sdk query current-timestamp full --raw)

实战要点:frontmatter 是恢复流程的第一层判断依据 —— 恢复时先读task/total_tasks判断进度比例,读status判断是否受阻。status: blocked时恢复流程会优先把<blockers>区块中的内容推送给用户。

八大内容区块:人可读续作上下文的完整结构

模板的 Markdown 正文由 8 个 XML 风格标签区块组成,每个区块解决续作上下文的一个具体维度。以下按模板顺序逐一解析其写作要求:

1.<current_state>—— 精确定位

回答"我们究竟在哪里、即时上下文是什么"。写作要求是具体到路径级别,例如"位于 Phase 302-authentication的第 3 个任务,正在实现 JWT 刷新令牌端点POST /auth/refresh",而不是笼统写"正在做认证模块"。

2.<completed_work>—— 本会话已完成

记录本会话实际完成的工作,要求具体、可验证,建议按任务编号列出:

- Task 1: [name] - Done - Task 2: [name] - Done - Task 3: [name] - In progress, [what's done on it]

注意模板允许一个任务处于"进行中"并记录其已完成部分,这与前文的status: in_progress形成呼应。pause-work 工作流还会额外检查 SUMMARY 文件是否存在占位内容(grep -l "To be filled\|placeholder\|TBD"),防止把假完成当作真完成写入交接。

3.<remaining_work>—— 本 phase 剩余任务

列出本 phase 剩余的全部任务及各自状态,让恢复会话一眼看到全景:

- Task 3: [name] - [what's left to do] - Task 4: [name] - Not started - Task 5: [name] - Not started

4.<decisions_made>—— 决策与理由(WHY 优先)

这是模板反复强调的核心:不仅要写"做了什么决策",更要写"为什么",否则恢复会话可能重新争论已被否定的方案:

- Decided to use [X] because [reason] - Chose [approach] over [alternative] because [reason]

模板的<guidelines>区块专门指出:"Include WHY decisions were made, not just what"(包含决策的 WHY,而不只是 WHAT)。这是防止跨会话"重复辩论同一问题"的结构化手段。

5.<blockers>—— 阻塞项与规避方案

记录任何卡住或等待外部因素的事项,并附带状态或 workaround:

- [Blocker 1]: [status/workaround]

pause-work 工作流在收集状态时会额外细分human_actions_pending(需人工干预的事项:MCP 配置、API Key、审批、手动测试)与blockers(技术 / 人工 / 外部类型),恢复时这些内容会被立即展示给用户。

6.<context>—— 心理状态与思维脉络

模板将其定义为 "Mental state, 'vibe', anything that helps resume smoothly"(心理状态、氛围、任何有助于平滑恢复的内容)。写作建议:你在想什么?计划是什么?——这是"精确地从上次停下的地方继续"所需的软上下文。它和 frontmatter 的last_updated配合,让恢复会话能还原当时的思考角度。

7.<next_action>—— 恢复后第一个动作

必须具体到可立即执行、无需再读任何其他文件(模板原话:"should be actionable without reading anything else"):

Start with: [specific action]

例如 "Start with: 打开src/auth/refresh.ts,实现第 42 行 TODO 处的刷新令牌校验逻辑,然后运行npm test中auth.test.ts的相关用例"。这是恢复流程 routing 的依据 —— 恢复后直接执行该动作,实现零摩擦续作。

8. 额外区块(真实工作流扩展)

pause-work 工作流在模板 8 区块之外,还会写入四个强化上下文区块:

  • BLOCKING CONSTRAINTS:本会话通过实际失败发现的反模式约束,带severity(blocking/advisory),blocking级别的约束要求恢复会话在继续前必须显式确认理解(由 discuss-phase / execute-phase 工作流解析并强制检查);
  • Required Reading:按顺序列出恢复会话必须先阅读的文档(含.planning/METHODOLOGY.md,使恢复会话继承项目的方法论分析视角,见 artifact-types.md 对 METHODOLOGY.md 消费方的说明);
  • Infrastructure State:运行中的服务、外部状态、环境特殊性;
  • Pre-Execution Critique Required:仅在设计与执行之间暂停时填写(例如 spike 设计已完成但尚未运行),用于把关"批判未完成不得开始执行"。

编写指南(Guidelines)速记

模板末尾的<guidelines>是写作纪律的浓缩,四条缺一不可:

  1. 具体到新实例立即理解("Be specific enough that a fresh Claude instance understands immediately")——避免依赖任何会话内的隐性记忆;
  2. 决策必须带 WHY——不只是做了什么,还有为什么,阻断跨会话的重复辩论;
  3. <next_action>必须独立可执行——不读其他任何文件也能直接开工;
  4. 文件是一次性的("This file gets DELETED after resume - it's not permanent storage")——它不是长期存储,恢复完成后即被删除,因此内容应聚焦"当前交接"而非沉淀历史。

第 4 点非常重要:.continue-here.md是 checkpoint 性质的短期工件,长期决策与项目状态应沉淀到 STATE.md / PROJECT.md / SUMMARY.md 等正式工件中。

消费链路:resume 流程如何读取并处理该文件

恢复优先级:HANDOFF.json > .continue-here.md > 未完成 PLAN

resume-project.md 的check_incomplete_work步骤定义了三级恢复优先级:

  1. .planning/HANDOFF.json(首选,机器可读):由/gsd:pause-work生成的 JSON,解析status、phase、plan、task、total_tasks、next_action,检查blockers与human_actions_pending并立即展示,用context_notes还原思维模型;成功恢复后删除 HANDOFF.json(一次性工件);
  2. .continue-here.md(中间检查点):phase / 非 phase / 遗留回退路径均会被发现,读取后标记 "Found mid-plan checkpoint";
  3. PLAN 而无 SUMMARY(未完成执行):标记 "Found incomplete plan execution"。

发现命令使用find而非ls通配符链 —— 工作流中的注释专门解释了原因:在 macOS 默认的 zsh NOMATCH 选项下,一个不匹配的 glob 会在词展开阶段使整个命令静默失败,而find不做 shell glob 展开,在 bash 与 zsh 下都能容忍缺失目录:

find .planning -maxdepth 3 -name '.continue-here*.md' -print 2>/dev/null || true find . -maxdepth 1 -name '.continue-here*.md' -print 2>/dev/null || true

恢复路径决策

determine_next_action步骤按状态路由:

  • 存在.continue-here.md→Fallback: 从 checkpoint 恢复(备选:放弃 checkpoint 从当前 plan 重新开始);
  • 存在 HANDOFF.json →Primary: 从结构化交接恢复(优先级最高,含具体任务/阻塞上下文);
  • 存在中断的 subagent → Primary: 用 Task 工具 resume 参数恢复该 agent。

门禁语义:.continue-here.md的存在是安全门禁

值得注意的反直觉行为:.continue-here.md的存在不仅用于恢复,还被 SDK 查询层用作执行门禁(blocker gate)。在 check-gates.ts 中:

// Gate 1: .continue-here.md in project root const continueHerePath = join(projectDir, '.continue-here.md'); ... gate: 'continue-here', file: '.continue-here.md', anti_patterns: ['continue-here.md present — another session may be in progress'],

即当项目根目录或.planning/下存在.continue-here.md时,check gates查询会返回 blocker,提示"另一个会话可能正在进行中"——防止并行会话互相踩踏。route-next-action.ts同样在.planning/.continue-here.md存在时返回'Blocked: .planning/.continue-here.md exists'。对应测试见 check-gates.test.ts 与 route-next-action.test.ts。

从源码结构可以推断:这一门禁设计把.continue-here.md从单纯的"恢复提示"升级为"互斥锁"——它既告诉下一个会话从哪里继续,也阻止其他会话在当前交接未消费时启动新工作,是跨会话并发安全的关键机制。

端到端实战:一次完整的暂停—恢复循环

结合上述全部机制,一次标准循环如下:

暂停时(/gsd:pause-work,见 pause-work.md):

  1. 检测上下文类型并确定目标路径(phase / spike / sketch / deliberation / research / default);
  2. 收集完整状态:当前位置、已完成、剩余、决策、阻塞项、待人工动作、后台进程、未提交文件、阻塞约束;
  3. 写入.planning/HANDOFF.json(机器可读,version: "1.0",含completed_tasks、remaining_tasks、blockers、human_actions_pending、decisions、uncommitted_files、next_action、context_notes);
  4. 按本模板写入.continue-here.md(人可读,含上述 8 区块 + 扩展区块);
  5. 以 WIP 提交:gsd-sdk query commit "wip: [context-name] paused at [X]/[Y]" --files [handoff-path] .planning/HANDOFF.json;
  6. 向用户确认交接位置并提示/gsd:resume-work。

恢复时(/gsd:resume-work,见 resume-work.md):

  1. 加载 STATE.md / PROJECT.md 还原项目全景;
  2. 检查 HANDOFF.json 与.continue-here.md(用find全路径发现),标记未完成工作;
  3. 展示项目状态面板(phase / plan / 进度条 / 未完成工作告警);
  4. 按优先级路由到具体动作,执行<next_action>中的第一步;
  5. 恢复完成后删除交接文件,更新 STATE.md 的 Session Continuity 区块。

写作质量自检清单

撰写.continue-here.md时,可对照以下清单验收:

  • Frontmatter 五项字段齐全,status取值为in_progress/blocked/almost_done之一,last_updated为 ISO 时间戳;
  • <current_state>具体到 phase / 任务 / 文件路径级别;
  • <completed_work>与<remaining_work>按任务编号列出,无笼统描述;
  • <decisions_made>每条都包含 WHY;
  • <blockers>标注状态或 workaround;
  • <context>记录了思维脉络与计划;
  • <next_action>不依赖任何其他文件即可执行;
  • 无阻塞约束时删除了 BLOCKING CONSTRAINTS 区块(模板要求 "If no constraints have been identified yet, remove this section.")。

遵循上述结构与纪律,.continue-here.md就能真正成为 GSD 跨会话开发的"无缝续接器":暂停时它完整保存思维状态,恢复时它精确还原并充当并发安全门禁,让"换个新会话继续"从模糊的回忆变成确定性的流程。

【免费下载链接】get-shit-doneA light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询