Vercel 在 6 月 17 日伦敦 Ship 大会上发布了 Agent 框架 eve,Apache 2.0 开源。他们给它的定位很明确:Next.js 之于 Web,就像 eve 之于 Agent。
核心完全一致:约定优于配置。
在 Next.js 之前,每个 React 项目的路由、SSR、打包方案都不一样。Next.js 出来以后,app/page.tsx 就是路由,约定文件名,零配置,整个社区的项目结构瞬间统一了。
eve 做的事情一模一样,只不过对象是 Agent 的组成要素。
一个 Agent 就是一个目录
eve 最核心的设计就是统一 Agent 的所有能力,全部用文件系统表达:
agent/
agent.ts ← 用哪个模型
instructions.md ← 系统提示词
tools/
run_sql.ts ← 工具
skills/
revenue.md ← 按需加载的知识片段
channels/
slack.ts ← 投放到 Slack
schedules/
weekly.ts ← 定时跑
connections/
linear.ts ← 接 Linear,鉴权托管
subagents/
investigator/ ← 子 Agent
放进去就有,不放就没有,和搭积木一样简单。
一个最小可运行的 Agent 就两个文件:
# agent/instructions.md
你是一个数据分析师。优先用数字回答,不要模糊表达。
// agent/agent.ts
import { defineAgent } from "eve";
export default defineAgent({ model: "anthropic/claude-opus-4.8" });
就这样。npx eve@latest init my-agent 脚手架起来,npm run dev,一分钟之内有一个跑在本地的 Agent。
简洁就是力量
简洁不是简单,它只是把所有的复杂都包装起来,然后以简洁的方式暴露给使用者。
eve 一点不简单,很多优秀的 Agent 工程解决方案都植入了框架的底层。
Durable by default。eve 里的每次对话都跑在一个 durable workflow 上,每一步都有 checkpoint。Server 崩了、重新部署了 session 会从断点恢复,不丢状态,不需要写任何额外代码。底层是他们开源的 Workflow SDK。这件事在过去你得自己用 Redis 或者 Durable Objects 实现,现在是框架默认行为。
Skills 按需加载。skills/ 目录里的 Markdown 文件,不是每次都塞进 prompt 的。只有当对话话题相关时,才按需注入。解决了 Agent 知识库膨胀的问题,可以写一百个 skill,模型每次只拿到两三个。Context 不爆,token 不浪费。
Human-in-the-loop 一行配置。你有一个工具需要人工审批再执行——比如发邮件、提交 PR、给客户退款。以前这套逻辑要自己写状态机。eve 里,工具配置里加一个 requireApproval: true,Agent 会在这里暂停,等人点确认,然后从断点继续跑。暂停期间不消耗任何算力。
托管鉴权一键集成。接 GitHub、Slack、Linear、Salesforce,不需要在代码里管 token。connections/ 目录里放一个指向 MCP server 或 OpenAPI 文档的文件,eve 代理所有鉴权,模型永远看不到 URL 和凭证。
向上向下兼容
如果用 Claude Code 或者 Codex,eve 的 Connections 直接支持 MCP server,对已有的 MCP 接入成本基本为零。如果已有一套自己的 Skills/CLAUDE.md 体系,eve 的 skills/ 目录和这个思路也是完全兼容的。如果搭需要多渠道投放的产品,一套 agent 代码,加不同的 channels/*.ts 文件,Slack、Discord、Telegram、Web Chat、定时任务,可共用同一套逻辑。
一切都做到了向上向下兼容。
当然,它并非完美
eve 目前强绑定 Vercel 平台。Durable execution 跑在 Vercel Workflows 上,沙箱是 Vercel Sandbox,鉴权托管是 Vercel Connect,可观测性是 Vercel Observability。如果你对平台锁定有顾虑,或者已经在 Cloudflare / 自建基础设施上有大量投入,可以等等。
但 eve 的这套约定优于配置、按文件组织的架构思路是真的值得借鉴,哪怕是你不用这个框架。