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
```欢迎 star: https://github.com/oujingzhou/everagent

主楼