长程任务原语:Session / Workspace / Checkpoint / Resume

一句话定位:一个”几小时到几天、跨多轮对话、跨多个文件”的长程任务(long-horizon task,长周期任务),既塞不进一个上下文窗口、也熬不过一次进程崩溃——本文讲支撑它的 4 个工程原语(💬 原语 = 最基础、不能再拆的”积木块”概念,就像乐高里最小的那一块)——Session(会话)/ Workspace(工作区)/ Checkpoint(检查点)/ Resume(续跑),以及一条核心纪律:别把任务状态只存在”脑子”(上下文)里。

怎么来的:本文补 Agent 架构师能力地图与学习路线 学习路线 阶段 ⑤ 的覆盖空洞——这组原语此前只在 Claude Code 实战速查(命令层面)和 Harness 工程与 Agent 解剖(一句话失败模式)零散出现,没有概念展开。


目录


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:

  1. 工作区检查点:给文件 / 代码打快照——最常见的实现就是 git commit。Git 进阶速查 里把 git 叫”时间机器”,每次 commit 就是打一个存档点,正是这个意思。
  2. 会话检查点:把对话和 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每次启动一个会话,有独立 IDclaude 启动;/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旧对话摘要化以腾出窗口聊太多了,把前面的话缩成摘要省地方
回灌RehydrateResume 时把必要状态重新加载进上下文把存档重新读回来、装回 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计费)保持一致。
  • 局限性:
    1. Claude Code 的具体命令 / 键位会随版本演进,请以 /help 实际输出为准;
    2. 本文聚焦”原语与纪律”,不展开具体框架(如 LangGraph 的 checkpointer、OpenAI 的 threads)的 API 细节;
    3. 不同 Agent 框架对这 4 个原语的命名各异(Session 也叫 thread / conversation),但概念是通用的。
  • 最后更新:2026-06-03