save-session 是一个战术检查点技能,用于在会话边界保存临时上下文,写入项目根目录旁的 .session/CURRENT.md。
用途
该技能存在的目的是保留持久文档通常省略的临时上下文:操作者当时正在做什么、下次应先做什么、哪些内容已经验证过,以及交接时哪些少量本地文件或提交是重要的。它防止一种常见的会话边界失败模式:下一个智能体能看到文件和 git diff,却看不到确切的战术意图或最佳下一步。紧凑的仓库本地检查点比从头重建上下文更便宜、更可靠。
主要能力
- 将检查点写入
.session/CURRENT.md,与项目根目录下的程序计划、跟踪和编排状态并列。 - 通过全局 shell 命令
save-session执行确定性写入;成功证据是命令打印检查点路径,文件存在且时间戳新鲜,并包含明确的 codex_goal 段落。 - 支持通过环境变量传入精心整理的交接内容,优先于推断的文件系统最近性。
- 支持显式 Codex 目标保存与恢复策略:
ensure-active或reference-only。 - 支持自动恢复资格窗口
SAVE_SESSION_RESUME_WINDOW_HOURS,范围 1–168 小时,默认 24 小时。 - 当会话暴露可预防的摩擦时,先运行 session-introspection,并将最高价值的预防控制保存到检查点。
使用方式
基本调用:
save-session
更丰富的调用示例(通过环境变量传入上下文):
SAVE_SESSION_HANDOFF_FOCUS="Resume from the last validated result, not from broad repo discovery." \
SAVE_SESSION_GOAL_OBJECTIVE="Complete the exact accepted objective without shrinking its exit gate." \
SAVE_SESSION_GOAL_RESUME_POLICY="ensure-active" \
SAVE_SESSION_WORKING_ON="Tightening save/resume checkpoint quality so next-session context stays small and actionable." \
SAVE_SESSION_NEXT_ACTION="Run the save-session validation script, regenerate CURRENT.md once, inspect it for noise, then commit the skill change in ~/.codex." \
SAVE_SESSION_BLOCKERS="None." \
SAVE_SESSION_LEARNINGS="Recent-file inference polluted checkpoints with cache/db artifacts; require curated relevant files instead." \
SAVE_SESSION_VERIFICATION_STATE="Wrapper patched; validation still pending." \
SAVE_SESSION_INTROSPECTION="session-introspection: prevent future noisy checkpoints by preferring curated handoff fields over filesystem recency." \
SAVE_SESSION_RELEVANT_FILES="$(printf '%s\n' "$HOME/.codex/skills/save-session/SKILL.md" "$HOME/.local/bin/save-session")" \
SAVE_SESSION_AVOID="Do not include cache files, generated DB files, broad untracked status, or historical discussion not needed for the next action." \
save-session
主流程包括:预检(在仓库内用 git rev-parse --show-toplevel 解析目标根,否则用当前工作目录;通过 session-orchestrate/scripts/session_workspace.py 确保共享 .session/ 工作区;若存在可预防摩擦先运行 session-introspection;优先使用已安装的 save-session shell 命令,不可用时仅用 Bash 复现其行为);调用 get_goal 并传入精确目标;通过环境变量传入精心整理的上下文;执行写入。
支持的环境变量包括:SAVE_SESSION_ROOT、SAVE_SESSION_GOAL_OBJECTIVE、SAVE_SESSION_GOAL_RESUME_POLICY、SAVE_SESSION_RESUME_WINDOW_HOURS、SAVE_SESSION_HANDOFF_FOCUS、SAVE_SESSION_WORKING_ON、SAVE_SESSION_NEXT_ACTION、SAVE_SESSION_BLOCKERS、SAVE_SESSION_LEARNINGS、SAVE_SESSION_VERIFICATION_STATE、SAVE_SESSION_INTROSPECTION、SAVE_SESSION_RELEVANT_FILES、SAVE_SESSION_RELEVANT_COMMITS、SAVE_SESSION_AVOID、SAVE_SESSION_USEFUL_COMMANDS、SAVE_SESSION_ROUTE_ID、SAVE_SESSION_ROUTE_OWNER、SAVE_SESSION_FIRST_COMMAND、SAVE_SESSION_STOP_CONDITION、SAVE_SESSION_ALLOWED_BEFORE_FIRST_COMMAND、SAVE_SESSION_AVOID_BEFORE_FIRST_COMMAND。默认有意省略原始 git status;仅当原始状态本身对下一个智能体有用时设置 SAVE_SESSION_INCLUDE_GIT_STATUS=1。
适用场景
- 会话结束或任务交接时,需要让下一个智能体快速接续。
- 当前任务有未完成、应在新任务中继续的 Codex 目标。
- 已知下一条工作路线,需要保存路由负责人、首条命令和停止条件,避免通过宽泛发现重新开始。
- 会话暴露了可预防的摩擦,需要将预防控制写入检查点。
- 多文档、路由面、AGENTS 文件、工作流、技能或持久决策被触及,需要扫描陈旧或重复路由。
限制与规则
- 战术写入,而非永久文档;检查点仅用于交接上下文,不是长期项目记忆。
- 优先仓库根目录;存在 git 根时存储于该处,便于未来会话可预测地找到。
- 保持简洁,检查点应指导下一步,而非重建整个会话。
- 实际写入使用 Bash;确定性命令是文件创建的真相来源。
- 优先精心整理的上下文而非推断上下文;自动检测文件和原始状态是回退诊断,不是交接内容。
- 已知路线需要首条命令;若设置了 SAVE_SESSION_FIRST_COMMAND 且未提供显式 SAVE_SESSION_NEXT_ACTION,包装器必须从该首条命令派生 next_action。
- 目标必须显式且精确:只保存 get_goal 返回或操作者显式提供的目标,绝不派生、总结或扩展。
- 完成状态很重要:未完成且有意可继续的工作用 ensure-active,已完成、放弃或取代的工作用 reference-only。
- 可恢复性会过期:ensure-active 仅在 SAVE_SESSION_RESUME_WINDOW_HOURS 内是候选,绝不使战术状态永久权威。
- 不委托检查点判断;子智能体只能扫描陈旧或重复上下文,主智能体负责记录持久决策、编辑所有者面、验证并写入检查点。
- 编辑本技能文件后必须自验证:在技能目录运行
./scripts/validate.sh。
相关文件包括 scripts/validate.sh、scripts/save-session、scripts/test_save_session.sh、~/.local/bin/save-session,以及同级技能 resume-session。