EverAgent 是一个面向长时间 AI 任务的可持久化、可恢复 Agent Harness 。
EverAgent 将 Agent 的执行生命周期纳入持久化 Harness:对话、模型轮次、工具调用、排队输入、checkpoint 和 Agent 状态都会先提交到 SQLite ,再由 TUI 和 Web 任务控制台呈现。
欢迎 star: https://github.com/oujingzhou/everagent
它主要解决什么问题?
假设一个 AI Agent 需要:
- 分析代码库。
- 修改多个文件。
- 执行测试。
- 根据测试结果修复问题。
- 最后生成总结。
普通的进程内 Agent 循环容易遇到以下问题:
- 进程崩溃:对话和执行进度可能只存在于内存中。
- 任务中断:重新启动后难以准确判断之前执行到了哪一步。
- 重复执行:恢复时可能重复调用模型或工具。
- 状态不一致:对话记录、工具结果和任务状态可能分别更新。
EverAgent 从执行层解决这些问题。它不只是保存聊天记录,而是持久化任务本身的完整执行生命周期。
核心能力
持久化对话和执行状态
EverAgent 将对话、Agent 配置、submission 、模型轮次、工具结果、任务状态、checkpoint 、上下文压缩状态和用量保存在 SQLite 中。
数据库是执行状态的唯一事实来源,TUI 和 Web UI 都是已提交状态的展示界面。
崩溃恢复与断点续跑
模型生成和工具调用都作为持久化任务运行。如果进程在执行中途退出,新的进程可以重新打开数据库,接管未完成的任务,并从最后一个已提交的 checkpoint 继续。
工具调用与任务管理
工具调用会作为独立的持久化任务记录,并保留父子关系。运行时会保存任务输入、进度、结果、失败状态,以及创建该工具任务的模型轮次。
控制重复执行风险
Submission 支持 requestId 去重。重复提交同一个已接收请求时,可以返回原有的持久化 submission ,而不是创建重复工作。
工具恢复仍然取决于 replay 策略。涉及外部副作用的操作需要使用幂等键、事务或应用层去重。
长对话与多轮交互
EverAgent 支持排队的后续输入、对话恢复、reset 边界、上下文压缩、历史导出和 provider session identity 。
工作原理
用户请求
│
▼
EverAgent Harness
接收输入并创建持久化任务
│
▼
模型轮次
规划工作并请求工具
│
├── 工具任务:读取或编辑文件
├── 工具任务:执行命令
└── 工具任务:运行测试
│
▼
原子持久化提交
对话 + checkpoint + 工具结果 + 任务状态
│
▼
下一次模型轮次或最终回复
如果进程崩溃,EverAgent 会重新打开同一份存储并恢复未完成的任务。
相关的对话、文档和任务变更通过持久化提交机制协调,避免执行状态只更新了一部分。
与普通 Agent 循环的区别
| 能力 | 普通自定义 Agent 循环 | EverAgent |
|---|---|---|
| 对话持久化 | 需要单独实现 | 内置 |
| 任务 checkpoint | 需要单独实现 | 持久化任务状态 |
| 进程重启恢复 | 需要自行设计 | 恢复未完成工作 |
| 工具执行跟踪 | 通常由应用管理 | 持久化子任务 |
| Submission 去重 | 需要单独实现 | 支持 requestId |
| 原子状态更新 | 由应用自行保证 | 协调持久化提交 |
| 执行过程查看 | 依赖自定义日志 | TUI 和 Web 工作流 |
普通 Agent 也可以通过数据库、队列和工作流引擎实现这些能力。EverAgent 的价值是将它们集成到一个 Agent 运行时中。
适用场景
- AI 编程任务:分析仓库、修改多个文件、运行测试和自动修复。
- 长时间自动化:需要运行几分钟甚至数小时的任务。
- 可恢复工作流:不能因终端退出或进程重启而丢失工作。
- 可审计执行:查看模型轮次、工具调用、checkpoint 和结果。
- Agent 运行时开发:在持久化执行原语之上构建更高层工作流。
安装与配置
需要 Node.js 22.19 或更高版本:
npm install -g everagent
everagent