eve

vercel/eve — ファイルシステムを契約に durable なバックエンド AI エージェントへコンパイルする Vercel 製フレームワーク

1 — 概要

eve は、エージェントの能力を agent/ 配下の通常ファイル(Markdown・TypeScript)として記述し、モデルループ・セッション永続化・HTTP / 各種プラットフォーム配信までをフレームワークが担うfilesystem-first な durable エージェント基盤。npm パッケージ名・CLI バイナリ名はいずれも eve。

agent/執筆インターフェース
Node 24+実行要件
Workflow SDKdurable 実行基盤
.eve/コンパイル成果物

設定オブジェクトを 1 か所に集約するのではなく、instructions・tools・skills・channels など責務ごとにファイルの場所が決まっている。ファイルを追加すれば eve が発見し、別レジストリとの同期は不要。現在は Vercel ベータ条件の preview 段階。

設計上の分離: チャネル(ingress / delivery)、ハーネス(モデルループ)、ワークフロー実行は runtime 上で分離される。同じ weather ツールは Web UI・ターミナル・Slack のどれから呼ばれても同じ挙動を保てる。
2 — プロジェクト構造

最小構成は 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 も一緒に移る。

3 — メッセージ処理

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 を明示的に扱う
4 — 拡張ポイント
パス追加するタイミング主な API
instructions.md常に(エージェントの振る舞い定義)defineInstructions
agent.tsモデル・compaction 等のランタイム設定defineAgent
tools/モデルが呼ぶ typed アクションdefineTool 他
skills/長い手順をオンデマンドロードdefineSkill
connections/外部 MCP / OpenAPI からツール取得connections ガイド
hooks/ライフサイクル・ストリームイベントdefineHook
sandbox/ファイル・コマンド用の制御 workspacedefineSandbox
subagents/ルートから委譲する専門エージェントdefineAgent(子)
schedules/定期・スケジュール実行defineSchedule
evals/回帰評価・シナリオテストdefineEval
バンドル docs: eve パッケージに公式ドキュメント全文が同梱される(node_modules/eve/docs/)。インストール版と一致するため、コーディングエージェントは SKILL よりこちらを正とする。
5 — クイックスタート
Step 1
scaffold
npx eve@latest init my-agent で依存関係・Git・対話 TUI を起動。既存 repo なら eve init .。
Step 2
instructions
agent/instructions.md に system prompt を書く。
Step 3
tool(任意)
agent/tools/get_weather.ts など defineTool + Zod schema。
Step 4
model
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)はファイル未作成でも有効。

6 — チャネル

チャネルはプラットフォーム入力を user message に正規化し、continuationToken で会話を再開し、応答の配信方法を決める。ファイルは agent/channels/<id>.ts、stem が channel id。

用途チャネル
Web UI / curl / SDKeve HTTP(デフォルト)
Slack メンション・DMSlack
DiscordDiscord
Microsoft TeamsTeams
Telegram botTelegram
SMS / 音声Twilio
GitHub @mention / PRGitHub
Linear delegationLinear
独自 Webhook / WebSocketdefineChannel で custom

Slack のリッチメッセージは Chat SDK の card-builder コンポーネントを利用するが、Chat SDK の Chat / Adapter runtime は eve 公開 API からは到達しない。