在 AI 驱动的开发工具中,长运行任务的可靠性是关键挑战之一。Continuous Claude 作为一个 CLI 工具,通过连续循环运行 Claude Code 来自动化代码生成、PR 创建和合并,但其核心在于持久化会话管理。这不仅仅是简单地重复执行提示,而是工程化地维护对话状态,确保在中断后能无缝恢复,从而实现可靠的 AI 辅助开发。本文将探讨如何在 Continuous Claude 中实现持久化会话处理,聚焦于状态维护和中断恢复的工程实践,提供可落地的参数和清单,帮助开发者构建更稳健的 AI 工作流。
持久化会话管理的必要性
传统 AI 编码工具如 Claude Code 往往是无状态的单次交互:模型根据提示生成代码后结束,无法记住先前上下文。这在处理复杂项目时会导致上下文漂移,例如忘记先前测试失败的边缘案例,或重复无效尝试。Continuous Claude 通过引入持久化机制,模拟人类开发者的“记忆”,让 AI 在多轮迭代中积累知识。
证据显示,这种设计灵感来源于 CI/CD 实践和持久代理。项目作者 Anand Chowdhary 在 GitHub 仓库中强调,使用共享 Markdown 文件作为外部记忆,能防止知识丢失。根据仓库描述,在一个实际生产示例中,先前迭代记录了“尝试为 X 添加测试但在边缘案例失败,需要处理 Y 函数的 null 输入”,下一迭代立即优先处理此问题,避免了循环无效工作。这证明了持久化会话能显著提升效率,尤其在目标如“增加测试覆盖率”这样的渐进任务中。
在工程视角下,持久化会话的核心是平衡上下文窗口限制与状态连续性。Claude 模型的 token 限制意味着不能无限累积历史对话,因此外部存储成为必需。Continuous Claude 默认使用 SHARED_TASK_NOTES.md 文件作为“接力棒”,每个迭代读取它、更新它,确保状态在循环中传承。
核心实现机制:笔记文件与循环逻辑
Continuous Claude 的持久化会话主要依赖 SHARED_TASK_NOTES.md 文件。这个文件充当对话状态的持久化存储,记录已完成任务、下一步计划和关键洞见。实现上,工具的 Bash 脚本充当“指挥者”:在每个迭代开始时,脚本读取笔记文件,并将其注入 Claude Code 的提示中。例如,提示模板可能包括:“这是连续开发循环的一部分...阅读 SHARED_TASK_NOTES.md 中的笔记,继续上一步工作,不要试图一次性完成整个目标,只需推进一小步,并更新笔记以便下一迭代。”
循环逻辑如下:
- 创建新 Git 分支。
- 运行 Claude Code,传入提示和当前笔记。
- Claude 生成代码变更,并更新笔记文件(例如,添加“已完成 X 测试,覆盖率提升 5%,下一步处理 Y 文件”)。
- 提交变更、推送分支、创建 PR。
- 等待 CI 检查和审查。
- 如果成功,合并 PR 并拉取最新 main 分支;如果失败,关闭 PR 并丢弃分支,但笔记文件保留状态供下次使用。
这种设计确保了状态维护:笔记文件不是冗长日志,而是精炼的手递包(handoff package)。作者建议提示中强调“像接力赛一样传递 baton”,让 Claude 保持笔记简洁,避免 token 浪费。实际中,这能将上下文漂移风险降低,因为单一小文件便于模型快速解析。
为了可落地,开发者可以自定义笔记文件路径,使用 --notes-file 标志。例如:
- 默认:SHARED_TASK_NOTES.md
- 自定义:--notes-file "PROJECT_CONTEXT.md"
此外,支持 Git worktrees 实现并行会话:使用 --worktree 在独立工作树中运行多个实例,每个有自己的笔记副本,避免冲突。这在多代理场景(如一个代理写测试,另一个写文档)特别有用。
中断恢复:从失败中重启
长运行 AI 执行不可避免地面临中断,如 API 限流、网络故障或 GitHub Actions 超时。Continuous Claude 的恢复机制嵌入 Git 工作流,确保状态不丢失。
关键是“浪费但有效”的哲学:失败迭代被丢弃,但笔记更新了失败原因,下次从 clean 的 main 分支重启。举例,如果 CI 检查失败于特定测试,Claude 在笔记中记录“测试 Z 失败于空输入,需修复”,下一迭代优先此点。GitHub CLI (gh) 集成进一步增强恢复:脚本使用 gh pr checks 监控状态,如果超时,可通过 --max-runs 或 --max-cost 标志设置阈值自动停止。
工程参数包括:
- --max-runs :最大迭代次数,0 为无限。建议从 5 开始测试,生产中设为 20-50 以覆盖周末任务。
- --max-cost :预算上限,如 10.00 USD。结合 token 成本估算(Claude 约 $0.04/迭代),防止意外开销。
- --merge-strategy:squash(默认,保持历史干净)、merge 或 rebase。恢复时,squash 减少冲突。
- --disable-commits:测试模式,模拟中断而不实际提交,便于调试恢复逻辑。
风险控制:潜在问题是笔记污染(Claude 生成无关内容)。缓解策略:提示中指定“笔记仅包含 3-5 条关键点,每条 ≤50 字”。另一个限界是 API 速率限制;建议在脚本中添加 sleep 1s 延迟,或使用 --model claude-haiku(更便宜、更快)。
在实际恢复清单中:
- 中断后,手动检查 SHARED_TASK_NOTES.md,验证状态完整性。
- 重启脚本:continuous-claude --prompt "继续上一步" --max-runs 剩余次数。
- 监控 PR 历史:使用 gh pr list 追踪失败 PR,提取洞见注入笔记。
- 回滚策略:如果连续 3 次失败,暂停循环并人工干预(例如,合并手动修复)。
最佳实践与监控要点
要最大化持久化会话的可靠性,提示工程至关重要。观点:好的提示是“元提示”,指导 Claude 如何管理状态。证据:仓库示例中,提示如“增加测试覆盖...写笔记给下一开发者”导致自改进行为,从简单目标演变为“运行覆盖率,逐文件处理”。
可落地清单:
- 初始化笔记:启动前创建 SHARED_TASK_NOTES.md,包含初始目标和空进度部分。
- 迭代参数调优:小任务用 --max-runs 3,大项目用 --max-cost 50.00。并行时,用 --worktree tests 和 --worktree docs 分离状态。
- 监控:集成日志输出,追踪成本(脚本显示 $0.042/迭代)和 PR 状态。使用 GitHub Actions 触发每日运行,确保 24/7 恢复。
- 安全阈值:设置 --allowedTools "Write,Read" 限制工具,防止意外变更。超时阈值:如果 PR 检查 >30min,强制重试。
- 扩展:结合 Dependabot,持久化会话可自动修复依赖 breaking changes。
这些实践使 Continuous Claude 适用于大型重构,如 monorepo 测试覆盖从 0% 到 80%,通过 20 个 PR 在周末完成,而无需人类持续监督。
总之,Continuous Claude 的持久化会话管理将 AI 从孤立助手转变为可靠伙伴。通过笔记文件、Git 集成和恢复逻辑,它确保长运行任务的连续性和鲁棒性。开发者可从仓库快速启动,逐步调优参数,实现高效 AI 驱动开发。
资料来源:基于 GitHub 仓库 https://github.com/anandchowdhary/continuous-claude 的描述和示例,未涉及长引文,仅提炼关键机制。