长程任务原语:Session / Workspace / Checkpoint / Resume
一句话定位:一个”几小时到几天、跨多轮对话、跨多个文件”的长程任务(long-horizon task,长周期任务),既塞不进一个上下文窗口、也熬不过一次进程崩溃——本文讲支撑它的 4 个工程原语(💬 原语 = 最基础、不能再拆的”积木块”概念,就像乐高里最小的那一块)——Session(会话)/ Workspace(工作区)/ Checkpoint(检查点)/ Resume(续跑),以及一条核心纪律:别把任务状态只存在”脑子”(上下文)里。
怎么来的:本文补 Agent 架构师能力地图与学习路线 学习路线 阶段 ⑤ 的覆盖空洞——这组原语此前只在 Claude Code 实战速查(命令层面)和 Harness 工程与 Agent 解剖(一句话失败模式)零散出现,没有概念展开。
目录
- 1. 先搞懂:什么是”长程任务”,它难在哪
- 2. 四个原语逐个讲(配统一类比)
- 3. 核心纪律:把”真相”写进 Workspace
- 4. Claude Code 里这些原语长什么样
- 5. 常见坑
- 6. 术语速查
- 与本知识库其他章节的关联
- 来源与局限性
1. 先搞懂:什么是”长程任务”,它难在哪
长程任务:一次做不完、要跨很多步 / 很长时间 / 很多文件的任务。
举几个例子:
- 把一个 10 万行的老项目从 Python 2 迁移到 Python 3
- 一个 AI 团队连续运营交易策略(见 7 人炒股团队案例)跑好几天
- 写一本书 / 一份大报告,今天写一章、明天写一章
它和”一问一答”的根本区别,是要顶住 4 个物理约束:
| 约束 | 说人话 | 后果 |
|---|---|---|
| 上下文窗口有限 | 模型一次只能”看见”这么多字(见 上下文窗口与Token计费) | 任务还没做完,窗口先满了 |
| 会话会结束 | 你关掉终端 / 第二天再来 | 这次对话攒下的”记忆”散了 |
| 进程会崩 | 断网、报错、机器重启 | 跑到一半全丢 |
| 成本会累积 | 每一轮都烧 Token / 时间 | 崩了从头来 = 钱和时间翻倍 |
一句话:长程任务的敌人是”易失性”——上下文是易失的、会话是易失的、进程是易失的。下面 4 个原语,就是专门用来对抗易失性的。
💬 大白话:「易失」=断了就没(像电脑内存,一关机里面的东西全没了);相对的「持久」=存进硬盘(关机了还在)。长程任务通篇就在干一件事——把重要的东西从”内存”挪到”硬盘”。
2. 四个原语逐个讲(配统一类比)
统一类比:打一款大型 RPG 游戏——这 4 个词其实你打游戏时天天在用:
| 游戏里 | Agent 长程任务里 | 是什么 |
|---|---|---|
| 一次上线游玩的时段 | Session(会话) | 一段连续交互,共享同一份”当前记忆”(上下文) |
| 存档文件 / 游戏世界本身 | Workspace(工作区) | 任务的持久状态:文件、代码库、数据库 |
| 存档点(save slot) | Checkpoint(检查点) | 某一时刻状态的快照,可回退、可恢复 |
| 读档继续玩 | Resume(续跑) | 从某个存档点接着干,而不是从头再来 |
2.1 Session(会话)—— 一段”在线时段”
定义:Agent 与你(或与任务)的一段连续交互,里面的多轮对话共享同一份上下文 / 历史。它有生命周期:开始 → 一轮轮 → 结束。
关键认知:Session 其实分两层——① 存档(transcript,会话记录):Claude Code 会把对话记录存到本地,所以关掉终端、第二天用 /resume 还能找回;② 活动上下文:模型当前真正”看得见”的那部分,这一层才是易失的——窗口快满会被压缩,/clear 或开新会话后就不在眼前了。所以 Session 适合装”我现在正在想什么”,但别把”任务的最终真相”只押在易失的活动上下文上。
Claude Code 里:每次敲
claude启动就是开一个 Session,每个 Session 有独立 ID;/resume能挑一个旧 Session 接着聊(命令清单见 实战速查)。
2.2 Workspace(工作区)—— 任务的”真身”
定义:Agent 操作的那一套持久的外部状态——文件系统 / 代码仓库 / 项目目录 / 数据库。它跨 Session 存在:这次会话结束了,文件还在那儿。
Session vs Workspace 是本文最重要的一组对照:
| 维度 | Session(会话) | Workspace(工作区) |
|---|---|---|
| 存在形式 | 上下文 / 对话历史 | 文件 / git / 数据库 |
| 寿命 | 易失,随窗口压缩或关闭消失 | 持久,进程崩了也还在 |
| 装什么 | ”我现在在想什么" | "任务做到哪了”的真相 |
| 类比 | 你脑子里的短期记忆 | 写在本子上的笔记 |
💡 核心纪律预告:长程任务里,真相必须落在 Workspace,不能只留在 Session。这是 § 3 要展开的铁律,也是 7 人炒股团队”本地状态 ≠ 真实执行”鬼影 bug 翻车的根因。
2.3 Checkpoint(检查点)—— 存档点
定义:把状态在某一时刻拍个快照存下来,以后能回退到这里、或从这里恢复。
两种 Checkpoint:
- 工作区检查点:给文件 / 代码打快照——最常见的实现就是 git commit。Git 进阶速查 里把 git 叫”时间机器”,每次 commit 就是打一个存档点,正是这个意思。
- 会话检查点:把对话和 Claude 做过的文件编辑存下来,能”倒带”回某个点。Claude Code 的
/rewind就是干这个的。⚠️ 注意它跟踪的是对话 + 文件编辑,不完整跟踪 Bash / 外部改动,也不是 git commit 的替代品——长期版本线仍要靠 git。
为什么要 Checkpoint:长任务跑到第 8 步崩了,有检查点就回到第 7 步重来,没有就只能回到第 0 步。
类比:游戏打 Boss 前先存个档;写论文每章存一个版本号。
2.4 Resume(续跑 / 恢复)—— 读档继续
定义:从一个已保存的状态(检查点 / 持久化的 Session / Workspace)接着把任务推进下去,而不是从零重启。
Resume 成立的前提:之前存够了状态。如果关键信息只在那个已经消失的上下文里、没落到 Workspace,那”续跑”就是假的——Agent 会失忆、重复劳动,甚至重复执行有副作用的操作(见 § 5 坑)。
Claude Code 里:CLI 的
--continue(接最近一次)/--resume(挑一个旧会话),斜杠/resume,都是 Resume 的不同形态;/goal严格说是”目标驱动的多轮自动循环”,但未完成的 goal 会在--resume/--continue恢复会话时一起恢复,所以也算长程续跑的一种。跨 Session 的”长期记忆”则靠CLAUDE.md这类持久指令文件(每次启动自动读入,不是 AI 自己”学会”的)来 rehydrate(回灌——把存好的内容重新读出来、装回模型的”脑子”里) 进新会话。
2.5 配套:Task Anchor(任务锚点)—— 防的是”目标漂移”
四个原语解决的是状态别丢,但长程任务还有另一类失败:状态没丢,目标跑偏了。
常见表现:
- 调查过程中发现邻近问题,于是顺手扩大修改范围
- 完成了很多步骤,却没满足用户最初的完成标准
- 用户在同一会话切换到新任务,Agent 仍沿用上一任务的上下文和计划
- 计划只列了”要做什么”,没说明”什么证据算做完”
- 新证据推翻原假设后,Agent 继续执行已经过期的计划
Task Anchor 就是在任务开始时钉一个稳定的目标锚点,让后续所有计划、步骤、验证都围绕它展开。三个字段:
| 字段 | 回答什么 |
|---|---|
| Goal | 本次任务最终要得到什么结果? |
| Boundaries | 范围与边界在哪,什么明确不做? |
| Done When | 看到什么证据才算完成? |
Done When 是三者里最容易写空的一个——写”功能正常”没用,要写成”yarn tsc --noEmit 通过且新增用例全绿”这类可机械验证的条件。这与 Claude Code goal命令 的”可衡量完成条件”是同一个要求。
它和 workflow、原语的分工:
workflow ← 某类任务「应该怎么做」的模板(跨任务复用)
Task Anchor ← 这一次任务「要达成什么」(单次实例)
四个原语 ← 这一次任务的状态「存在哪、怎么续」(单次实例)
三者不竞争:workflow 提供骨架,Task Anchor 提供目标,原语提供状态载体。
3. 核心纪律:把”真相”写进 Workspace
四个原语背后只有一条铁律:任务的真相要落在持久的 Workspace,别只留在易失的上下文里。它拆成 4 个可操作的做法:
3.1 状态外置(State Externalization)
💬 大白话:边做边把进度写进文件,别只记在”脑子”(对话)里——脑子会满、会被压缩、会忘,文件不会。
不要让任务的关键状态只活在上下文里。每完成一个子步骤,就把结果落到文件 / git / 数据库。理由:上下文会被压缩(Claude Code 默认接近 ~95% 容量时自动摘要化早期对话,可用环境变量 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 调早,见 上下文窗口与Token计费)、会话会结束——只有 Workspace 是可靠的。
3.2 进度账本(Progress Ledger)
给长任务建一个持久的”进度文件”(如 STATUS.md / 任务清单),记清”做完了哪些、下一步是啥”。新 Session 一开始先读它,就能”想起”自己在干嘛。本次对话用的任务清单(TodoWrite)就是这个思路的轻量版。
3.3 上下文压缩与回灌(Compaction & Rehydrate)
窗口快满时,把旧对话摘要化(compaction)腾地方;Resume 时再从 Workspace + 摘要把必要信息回灌(rehydrate)进上下文。压缩省 Token,但会丢细节——所以细节必须在 Workspace 有备份(呼应 § 3.1)。
3.4 幂等与可重入(Idempotency)
💬 大白话:幂等 = 同一件事做一次和做十次,结果一样(像电梯按钮,按 1 下和按 5 下都只来一趟电梯)。副作用 = 会对外部世界造成真实改变、“撤不回”的动作(真的下单、真的发邮件)。“重跑安全”就是:哪怕崩溃后不小心重放了某步,也不会重复下单、重复扣款。
设计每一步时让”重跑一次也安全”。因为”崩溃 + Resume”可能让某一步被执行两次。反面教材:炒股案例的下单逻辑 如果非幂等,重放就会重复下单 / 重复扣费。
工程做法:给副作用操作配 幂等键(idempotency key,同一个键重复请求只生效一次) 或 操作账本(operation ledger,先记账再执行、重启先查账);执行前先查外部系统的真实状态,Resume 时以 Workspace / 外部系统为权威来源,不轻信”本地以为”的状态。
4. Claude Code 里这些原语长什么样
把抽象原语对到你能敲的命令上(完整命令清单见 Claude Code 实战速查):
| 原语 | Claude Code 的体现 | 命令 / 机制 |
|---|---|---|
| Session | 每次启动一个会话,有独立 ID | claude 启动;/resume 选会话 |
| Workspace | 当前 git 仓库 / 项目目录 | 文件系统本身 |
| Checkpoint | 会话倒带 + 代码存档 | /rewind;git commit |
| Resume | 接上次 / 挑一个 / 目标循环 | --continue / --resume / /resume / /goal |
| 上下文管理 | 满了自动摘要 / 手动总结 / 开新对话 | autocompact(默认 ~95%)、/compact(总结当前对话腾地方)、/clear(开一个全新空对话,旧的仍可 /resume) |
| 跨会话记忆 | 持久指令文件 | CLAUDE.md / /memory |
本文负责讲”这些命令背后是哪 4 个原语、为什么需要它们”;那篇 实战速查 负责”具体怎么敲”。
💬 三个 Resume 变体别搞混:
--continue= 命令行直接接当前目录最近一次会话;--resume= 命令行选一个会话恢复;/resume= 已进入 Claude Code 后在界面里挑旧会话。
5. 常见坑
| 坑 | 症状 | 解法 |
|---|---|---|
| 状态只留上下文 | 会话一压缩 / 关闭,任务”失忆” | 状态外置到 Workspace(§ 3.1) |
| 假 Resume / 状态鬼影 | Agent 以为的状态 ≠ Workspace 真实状态 | Resume 时以 Workspace 为唯一真相源(见 Multi-Agent § 4.2) |
| Checkpoint 太稀疏 | 崩一次回退掉好几个小时的活 | 每个安全子步骤后就 commit |
| Checkpoint 太频繁 | 开销大、噪音多 | 在”语义完整”的节点存,不是每改一行就存 |
| 非幂等步骤被重放 | Resume 后重复下单 / 重复发邮件 | 关键副作用操作做幂等 / 去重(§ 3.4) |
6. 术语速查
| 术语 | 英文 | 一句话 | 💬 大白话(口语解释) |
|---|---|---|---|
| 原语 | Primitive | 最基础、不能再拆的概念”积木” | 乐高里最小的那一块,再拆就没意义了 |
| 长程任务 | Long-horizon task | 跨多轮 / 多时间 / 多文件、一次做不完的任务 | 不是一句话能答完的活,是要干好几天那种 |
| 会话 | Session | 一段共享上下文的连续交互,易失 | 你这次坐下来跟 AI 聊的这一摊,关掉就散了 |
| 工作区 | Workspace | 任务的持久外部状态(文件 / git / 数据库) | 你的项目文件夹 / 代码仓库本身,关机了还在 |
| 检查点 | Checkpoint | 状态快照,可回退可恢复(≈ git commit) | 游戏存档点——打 Boss 前先存一个 |
| 续跑 | Resume | 从保存点接着干,不从头来 | 读档继续玩,不用重新通关 |
| 易失 / 持久 | Ephemeral / Durable | 随窗口或进程消失 vs 落盘长存 | 内存(断电就没)vs 硬盘(关机还在) |
| 状态外置 | State Externalization | 把关键状态从上下文落到持久存储 | 边做边记到文件上,别只记在脑子里 |
| 上下文压缩 | Compaction | 旧对话摘要化以腾出窗口 | 聊太多了,把前面的话缩成摘要省地方 |
| 回灌 | Rehydrate | Resume 时把必要状态重新加载进上下文 | 把存档重新读回来、装回 AI 的”脑子” |
| 幂等 | Idempotency | 同一操作重跑多次结果不变(重放安全) | 电梯按钮按几下都只来一趟 |
| 副作用 | Side effect | 对外部世界产生真实改变的操作 | 真的下单 / 真的发邮件那种”撤不回”的动作 |
与本知识库其他章节的关联
| 文档 | 关系 |
|---|---|
| Skill工程化设计与失效防御 | 那篇 § 5.3 的子任务合约五字段(Goal / Inputs / Outputs / Forbidden Zones / Acceptance)与本文 § 2.5 的 Task Anchor 是同一思路的两种粒度:一个约束派给 worker 的子任务,一个约束整场任务的目标 |
| Agent架构师能力地图与学习路线 | 本文补它学习路线 阶段 ⑤ 的空洞;互为正向引用 |
| Claude Code 实战速查 | 那篇列 /resume /rewind /compact 等命令,本文讲这些命令背后的原语与原理 |
| 上下文窗口与Token计费 | Session 易失性的物理根源 + “默认 ~95% 自动压缩”机制 |
| Claude Code goal命令 | /goal 是 Resume 的”目标驱动循环”形态 |
| Multi-Agent工程实战与Persona设计 | ”共享真相源 / 本地状态 ≠ 真实执行”是状态外置与假 Resume 的实战教训 |
| Harness工程与Agent解剖 | 长程任务状态属于五层架构的”记忆层”;该文提到”任务中断后无法恢复”的失败模式 |
| Git进阶速查 | Checkpoint ≈ git commit 的”存档点 / 时间机器” |
| Agent记忆体系 | 那篇管”该记什么、怎么回忆”(认知),本文管”状态怎么跨时间存活”(机制),互补 |
来源与局限性
- 来源:补全本知识库覆盖空洞的概念整理;Claude Code 命令示例与既有笔记(实战速查、上下文窗口与Token计费)保持一致。
- 局限性:
- Claude Code 的具体命令 / 键位会随版本演进,请以
/help实际输出为准; - 本文聚焦”原语与纪律”,不展开具体框架(如 LangGraph 的 checkpointer、OpenAI 的 threads)的 API 细节;
- 不同 Agent 框架对这 4 个原语的命名各异(Session 也叫 thread / conversation),但概念是通用的。
- Claude Code 的具体命令 / 键位会随版本演进,请以
- 最后更新:2026-06-03