用途
Closeout 是一个会话收尾仪式(Session Close-Out Ritual)技能,调用入口为 /closeout。它的目的是在每个工作会话结束时,系统性地清点本次会话产生的产出、闭合已完成的计划与原子,并为下一个会话保留可续接的上下文。
根据资料,触发时机包括:
- 用户明确说出
/closeout、"close out"、"wrap up"、"end the session" - 在任何非平凡的 git push 之前(收尾应先于 push)
- 当会话已产出 3 个及以上文件、计划或原子,且用户正在示意结束
资料指出,其存在理由是计划孤儿问题:在 ~/.Codex/plans/ 的 427 个计划中,386 个(90.4%)既不含 DONE-NNN 也不含 IRF 引用,只有 20 个(4.7%)为 EXECUTED、21 个(4.9%)为 IN-PROGRESS。资料认为这种孤儿率正是缺少收尾仪式的直接产物。
主要能力(六步协议)
第 1 步 — 盘点会话产出
尽可能并行运行以下命令:
# 本次会话创建或修改了哪些文件?
git status --short
# 本次会话撰写了哪些计划?
ls -t ~/.Codex/plans/*.md 2>/dev/null | head -10
# 当前分支及相对 origin 的状态?
git branch --show-current
git log @{u}.. 2>/dev/null || echo "(no upstream tracking)"
然后向用户展示一份简要清单表:修改 N 个文件、创建 M 个、本会话撰写 K 个计划、领先 origin L 个提交。
第 2 步 — 回访计划
对本会话撰写的每个计划(按会话时间窗口内的 mtime 过滤 ~/.Codex/plans/*.md),分类为:
- EXECUTED:包含
DONE-NNN引用,无需操作。 - IN-PROGRESS:包含
IRF-XXX-NNN引用但没有 DONE-NNN,更新其 frontmatter 以确认持续状态。 - ABANDONED:无闭合引用、无后续提交,移入
~/.Codex/plans/abandoned/并附简短放弃原因。
对模糊情况询问用户。资料强调不要未经确认就批量分类,因为 home-scope AGENTS.md 的规则“Atoms are permanent — never batch-close”同样适用于作为制品的计划。
第 3 步 — 回访原子(如适用)
如果本会话触及了 data/prompt-registry/prompt-atoms.json,则找出本会话闭合的原子并确认其 status 字段已更新。如果不是(大多数会话),跳过。
第 4 步 — 核对 git 状态
交叉检查:
- 工作区干净(没有属于本会话的未提交更改)
- 本地 main 与 origin 同步(或分支正确跟踪)
- 工作区根目录没有散落的导出/临时文件(
ls /Users/4jp/Workspace/*.txt应为空)
如果存在散落导出文件(自动命名模式 2026-MM-DD-NNNNNN-this-session-being-continued-from-a-previous-c.txt),将其移动到 ~/Documents/session-exports/,若重复则删除。
第 4.5 步 — 校验 CLAUDE.md 自动生成内容的新鲜度(hall-monitor 门禁)
如果活动仓库的 CLAUDE.md 带有 <!-- ORGANVM:AUTO:START --> / <!-- ORGANVM:AUTO:END --> 哨兵标记,运行门禁:
~/.local/bin/claude-md-autogen-gate
如果它返回非零,说明自动生成尾部已超过 7 天,则拒绝将会话标记为 DONE。先刷新:
organvm context sync --write # autogen sections only
# or
organvm refresh # full 10-step pipeline
然后重新暂存 CLAUDE.md 并提交(claude-md-autogen-freshness 预提交钩子会重新校验),再重新运行门禁。
仅在用户明确授权时绕过:
AUTOGEN_FRESHNESS_THRESHOLD_DAYS=999 ~/.local/bin/claude-md-autogen-gate
资料说明该步骤与预提交钩子(claude-md-autogen-freshness)配合,在提交边界和会话边界两处捕获陈旧问题。根因先例:2026-05-16 追踪到 32 天的 autogen 尾部陈旧,源于 organvm refresh 第 6 步在 system-system--system 上软失败:无效层级 'sovereign'(通过 schema + validator 同步编辑关闭;见 GH 4444J99/domus-semper-palingenesis#30,IRF-DOM-048)。
第 5 步 — 更新 active-handoff(如存在)
如果任何活动仓库中存在 .conductor/active-handoff.md,用以下内容更新它:
- 本次会话完成了什么
- 哪些已锁定/尚未尝试
- 下一个会话应接手什么
资料称这是跨会话连续性门禁。
第 6 步 — 编写 CLOSEOUT_SUMMARY.md
在 ~/.Codex/plans/closeout-{date}.md 生成会话收尾摘要,格式如下:
# Session Close-Out — {date}
## Outputs
- {N} files created, {M} modified
- {K} plans authored: {filenames}
- {L} commits made (SHAs): {sha-list}
## Closure marks
- EXECUTED plans (DONE-NNN refs): {list}
- IN-PROGRESS plans (IRF refs): {list}
- ABANDONED plans (moved): {list}
## Pending
- Uncommitted changes: {if any}
- Unpushed commits: {if any}
- Active handoff: {path if exists}
## Hand-off note for next session
{one-paragraph context for resumability}
使用方式
在满足触发条件的会话结束时调用 /closeout,技能会依次执行上述六步协议。资料给出的成本估计为每会话约 3-5 分钟;如果会话没有产生值得注意的制品,应说明并干净退出(安静会话上收尾很快)。
适用场景
- 用户明确示意会话结束时
- 任何非平凡 git push 之前
- 会话产出 3 个及以上文件、计划或原子且用户示意结束时
限制与规则
资料明确列出需遵守的规则:
- 未经用户明确确认,绝不批量关闭原子或计划。依据 Universal Rule(memory rule #53):atoms are permanent, never batch-close。
- 绝不删除计划文件。改为移入
abandoned/以保留历史(依据 home AGENTS.md 的 plan-discipline 部分)。 - 除非用户已为本会话明确授权 push,否则绝不将 push 作为收尾的一部分。收尾的职责是为 push 做准备,而非执行 push。
- 如果会话未产生值得注意的制品,应说明并干净退出。
相关资料
docs/evaluation/SELF-REVIEW-MASTER-2026-05-05.md— 病理 #4:计划撰写节奏远超计划执行节奏(21:1)docs/evaluation/self-review-2026-05-05/stale-plans-and-orphan-commits.md— 90.4% 孤儿率背后的完整数据- Universal Rule #2:“Nothing local only” — 收尾是每个会话实现“nothing local only”的手段
关于收费、价格与具体平台支持,资料暂未提供。