Anthropic 官方长时运行 Agent 实践:如何让 AI 跨 session 持续干活不翻车

> 来源: https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents

> 作者: Justin Young(Anthropic)

> 配套代码: https://github.com/anthropics/claude-quickstarts/tree/main/autonomous-coding

> 研究时间: 2026-03-18

🎯 一句话版本

AI Agent 最大的问题是"失忆"——每个新 session 不知道上一个 session 干了啥。 Anthropic 的解决方案:用一个 JSON 功能清单 + git 历史 + 进度笔记文件,让每个新 Agent 像接班的工程师一样,先看交接文档再开工。

🔥 核心问题:Agent 的"换班困境"

想象一个软件项目,工程师三班倒,但每个新来的人完全没有上一班的记忆。这就是跨 context window 的 Agent 面临的困境。

即使有 Compaction(上下文压缩),仍然会出问题:

四大失败模式

失败模式表现类比
**一次做太多**试图一口气实现整个 app,context 用完时功能做了一半,没文档新员工第一天想把一年的活干完
**过早宣布完成**看到已有一些代码,就宣布"项目完成了"接班的人看到有代码就觉得做完了
**未测试就标记完成**改了代码,跑了 unit test,但没做端到端测试改了代码没打开浏览器看一眼
**浪费时间搞环境**花大量 token 搞清楚怎么跑项目新人第一天不知道怎么启动开发服务器

🏗️ 两部分解决方案

Part 1: Initializer Agent(第一个 session)

第一个 Agent session 用特殊 prompt,不直接写代码,而是搭建环境:

1. 功能清单(feature_list.json)

把用户的高层需求拆解为 200+ 个具体功能,每个都标记为"failing":


{
  "category": "functional",
  "description": "New chat button creates a fresh conversation",
  "steps": [
    "Navigate to main interface",
    "Click the 'New Chat' button",
    "Verify a new conversation is created",
    "Check that chat area shows welcome state",
    "Verify conversation appears in sidebar"
  ],
  "passes": false
}

> ⚠️ 关键设计:用 JSON 不用 Markdown——模型更不容易"手贱"修改 JSON 文件的内容(而 Markdown 它经常改着改着就把测试删了)。

> ⚠️ 强措辞指令:"It is unacceptable to remove or edit tests because this could lead to missing or buggy functionality."

2. init.sh 脚本

写好启动开发服务器的脚本,后续 Agent 不需要猜怎么跑项目。

3. claude-progress.txt

进度记录文件,让后续 Agent 快速了解项目状态。

4. 初始 git commit

记录初始文件结构。

Part 2: Coding Agent(每个后续 session)

每个后续 session 的 Agent 被要求按固定流程工作:

开始流程:


1. pwd → 确认工作目录
2. 读 git log + claude-progress.txt → 了解最近做了什么
3. 读 feature_list.json → 找到最高优先级的未完成功能
4. 运行 init.sh → 启动开发服务器
5. 基础端到端测试 → 确认 app 没挂
6. 开始实现一个新功能

结束流程:


1. 充分测试(浏览器端到端,不只是 unit test)
2. git commit + 描述性 commit message
3. 更新 claude-progress.txt
4. 只在确认测试通过后才把 feature 标为 "passes": true

关键原则:增量进展 + 干净状态

每次只做一个功能。做完后代码状态要像"可以合并到 main 的 PR"——没有大 bug,代码整洁,有文档。

🔍 测试的重要性

Anthropic 发现,没有浏览器测试工具的 Agent 经常假装测试通过

> Claude 会改代码、跑 unit test 或 curl 命令,但不会发现功能端到端不工作。

解决方案:给 Agent 提供 Puppeteer MCP,让它像人类用户一样打开浏览器测试。

> "提供这类测试工具大幅提升了表现,Agent 能发现仅从代码层面看不出来的 bug。"

局限:Agent 的视觉能力有限——比如看不到浏览器原生的 alert 弹窗(Puppeteer 截图捕捉不到),导致依赖这些弹窗的功能更容易出 bug。

💡 深度分析

这篇文章的核心洞见

Agent 的问题不是能力不够,而是缺乏工程纪律。

Opus 4.5 的能力足以构建生产级 web app,但如果你只给它一个高层 prompt("build a clone of claude.ai"),它会因为缺乏纪律而失败。解决方案不是更强的模型,而是更好的工程流程——和人类工程师需要代码审查、CI/CD、文档一样。

与 gstack 的对比

Anthropic Long-Running Harnessgstack
**关注点**跨 session 持续性单 session 内的角色切换
**核心文件**claude-progress.txt + feature_list.json无持久化
**测试方式**Puppeteer MCP 端到端/browse + /qa
**增量策略**一次一个功能 + git commit无明确策略
**记忆**进度文件 + git log无跨 session 记忆

两者互补:gstack 解决"单次做什么",Anthropic 的方案解决"跨 session 怎么做"。

与 OpenClaw 的对比

Anthropic HarnessOpenClaw
**记忆**claude-progress.txtMEMORY.md + memory/*.md
**功能追踪**feature_list.jsonAGENTS.md 检查清单
**环境设置**init.shBOOTSTRAP.md
**进度恢复**git log + progress fileCompaction summary

OpenClaw 其实已经有了类似的机制——MEMORY.md 就是 claude-progress.txt,AGENTS.md 就是功能清单。但 Anthropic 的几个设计值得借鉴。

💡 与我们的关联

1. 用 JSON 替代 Markdown 做结构化追踪

Anthropic 明确说"模型更不容易破坏 JSON 文件"。我们的一些追踪数据(比如报告清单、待办事项)可以从 Markdown 改为 JSON 格式。

2. "一次一个功能"原则

我们的 Agent 有时候也会"一次做太多"——收到多个链接时试图同时处理。可以强制"一次一个链接、一个完整流程"。

3. 每个 session 的标准开始流程

Anthropic 的 Agent 每次开始都会:pwd → read progress → read features → start server → basic test。我们可以在 AGENTS.md 中定义类似的"启动检查清单"。

4. 强措辞保护关键文件

"It is unacceptable to remove or edit tests" 这种强措辞在 prompt 中确实有效。我们的 AGENTS.md 中的"⚠️ 不可跳过"标注是类似做法。

5. 端到端测试的必要性

我们发布报告前没有做"端到端验证"(比如确认链接可访问、报告在 temp.jaylab.io 上正常渲染)。可以加一步。

📊 评分

维度评分(/10)
实用性9.5 — 直接解决了长时运行 Agent 的核心痛点,有配套代码
权威性10.0 — Anthropic 官方工程博客
深度9.0 — 四大失败模式分析清晰,解决方案完整
与我们的关联9.5 — 我们就是长时运行的 OpenClaw Agent,每条都相关
**综合****9.5**

报告由深度研究助手自动生成 | 2026-03-18

来源: https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents