eve
vercel/eve — ファイルシステムを契約に durable なバックエンド AI エージェントへコンパイルする Vercel 製フレームワーク
eve は、エージェントの能力を agent/ 配下の通常ファイル(Markdown・TypeScript)として記述し、モデルループ・セッション永続化・HTTP / 各種プラットフォーム配信までをフレームワークが担うfilesystem-first な durable エージェント基盤。npm パッケージ名・CLI バイナリ名はいずれも eve。
設定オブジェクトを 1 か所に集約するのではなく、instructions・tools・skills・channels など責務ごとにファイルの場所が決まっている。ファイルを追加すれば eve が発見し、別レジストリとの同期は不要。現在は Vercel ベータ条件の preview 段階。
最小構成は instructions.md と agent.ts。必要に応じて下位ディレクトリを増やす。
my-agent/
├── package.json
├── tsconfig.json
└── agent/
├── agent.ts # モデル・ランタイム設定(defineAgent)
├── instructions.md # 常時オンな system prompt(必須)
├── tools/ # モデルが呼ぶ typed 関数
│ └── get_weather.ts
├── skills/ # 必要時だけ読み込む手順
│ └── plan_a_trip.md
├── hooks/ # ライフサイクル・ストリーム購読
├── channels/ # HTTP / Slack / Discord 等
│ └── slack.ts
├── connections/ # 外部 MCP / OpenAPI
├── sandbox/ # エージェント用サンドボックス上書き
├── subagents/ # 委譲先の専門エージェント
├── schedules/ # cron 等の定期実行
└── lib/ # 共有 TypeScript
agent/tools/get_weather.ts を置けばツール名 get_weather として発見される。パスが名前空間を兼ねるため、移動・リネームで ID も一緒に移る。
Web・ターミナル・Slack など入力元が違っても同じパイプラインが走る。eve は入力を正規化し、instructions / skills / tools / 会話履歴をモデルに渡し、ツール・subagent 実行を挟みながらセッションを永続化し、プラットフォーム向け形式で返す。
flowchart LR
In["プラットフォーム入力\nHTTP / TUI / Slack …"]
Norm["正規化\nuser message"]
Ctx["コンテキスト組立\ninstructions · skills · tools · history"]
Loop["モデルループ\ntool / subagent 実行"]
Persist["セッション永続化\nstream events · continuationToken"]
Out["配信\nプラットフォーム形式"]
In --> Norm --> Ctx --> Loop --> Persist --> Out
Loop -.->|"承認待ち / HITL"| Persist
durable セッション
- 1 リクエスト 1 レスポンスに閉じない。複数ターン・ストリーミング・ツール呼び出しに対応
- 承認や人間からの回答で一時停止し、回答到着後に再開可能
- 内部ではオープンソースの Workflow SDK でクラッシュセーフな実行を実現
- HTTP プロトコルは
continuationTokenとsessionIdを明示的に扱う
| パス | 追加するタイミング | 主な API |
|---|---|---|
instructions.md | 常に(エージェントの振る舞い定義) | defineInstructions |
agent.ts | モデル・compaction 等のランタイム設定 | defineAgent |
tools/ | モデルが呼ぶ typed アクション | defineTool 他 |
skills/ | 長い手順をオンデマンドロード | defineSkill |
connections/ | 外部 MCP / OpenAPI からツール取得 | connections ガイド |
hooks/ | ライフサイクル・ストリームイベント | defineHook |
sandbox/ | ファイル・コマンド用の制御 workspace | defineSandbox |
subagents/ | ルートから委譲する専門エージェント | defineAgent(子) |
schedules/ | 定期・スケジュール実行 | defineSchedule |
evals/ | 回帰評価・シナリオテスト | defineEval |
eve パッケージに公式ドキュメント全文が同梱される(node_modules/eve/docs/)。インストール版と一致するため、コーディングエージェントは SKILL よりこちらを正とする。
npx eve@latest init my-agent で依存関係・Git・対話 TUI を起動。既存 repo なら eve init .。agent/instructions.md に system prompt を書く。agent/tools/get_weather.ts など defineTool + Zod schema。agent/agent.ts で defineAgent({ model: "anthropic/claude-sonnet-4.6" }) 等を指定。import { defineTool } from "eve/tools";
import { z } from "zod";
export default defineTool({
description: "Return mock weather data for a city.",
inputSchema: z.object({ city: z.string().min(1) }),
async execute({ city }) {
return { city, condition: "Sunny", temperatureF: 72 };
},
});
デフォルトモデルは Vercel AI Gateway 経由の anthropic/claude-sonnet-4.6。AI_GATEWAY_API_KEY または VERCEL_OIDC_TOKEN(vercel link)が必要。dev TUI の /model でキー設定も可能。
起動: npm run dev(または scaffold 時に開始した TUI)。組み込み HTTP チャネル(agent/channels/eve.ts)はファイル未作成でも有効。
チャネルはプラットフォーム入力を user message に正規化し、continuationToken で会話を再開し、応答の配信方法を決める。ファイルは agent/channels/<id>.ts、stem が channel id。
| 用途 | チャネル |
|---|---|
Web UI / curl / SDK | eve HTTP(デフォルト) |
| Slack メンション・DM | Slack |
| Discord | Discord |
| Microsoft Teams | Teams |
| Telegram bot | Telegram |
| SMS / 音声 | Twilio |
| GitHub @mention / PR | GitHub |
| Linear delegation | Linear |
| 独自 Webhook / WebSocket | defineChannel で custom |
Slack のリッチメッセージは Chat SDK の card-builder コンポーネントを利用するが、Chat SDK の Chat / Adapter runtime は eve 公開 API からは到達しない。
- vercel/eve — ソースリポジトリ
- eve.dev/docs — 公式ドキュメント
- npm: eve — パッケージ
- GitHub Discussions — コミュニティ
- Workflow SDK — durable 実行基盤