A finished model change or provider setup now breaks out of the menu loop and lets the outcome surface as the command's reply line, matching the channels flow. This drops the in-menu notice machinery (applyModelNotice/providerNotice and the modelNotice/provNotice laps): the effects already happened, so repainting the menu to land on Done was redundant. A cancelled picker and the external-provider branch still repaint, since nothing completed on disk.
Getting Started
Eve is a filesystem-first framework for durable backend agents on Vercel.
You author an agent as a directory on disk. The directory is the contract:
instructions.mddefines the always-on instructions promptskills/define optional procedurestools/define typed executable integrationsconnections/define external MCP server connectionssandbox/overrides the agent's single sandbox (optional) and seeds workspace fileschannels/define message ingress and deliverysubagents/define specialist child agentsschedules/define recurring jobslib/holds shared authored codeagent.tsholds additive runtime config such as model, metadata, build, compaction, and workspace settings
The framework package is eve. The CLI binary is eve.
What Eve Prioritizes
- Markdown-first authoring for instructions and procedures
- TypeScript where typed runtime behavior matters
- Durable message runs and follow-up turns
- Inspectable compiled artifacts under
.eve/ - Per-agent sandbox with optional authored overrides
- A stable HTTP protocol with explicit
continuationTokenandsessionIdcontracts - A runtime model that keeps channels, harnesses, and workflow execution separate
Current Mental Model
Eve’s internal split is:
- the channel normalizes inbound transport, applies auth and delivery policy, and owns
continuationToken - the harness does one unit of AI work and returns
{ session, next } - the runtime persists state, follows
next, streams events, and owns workflow primitives
That split is why the public HTTP protocol separates:
continuationTokenfor the next user messagesessionIdfor streaming and inspection
Example Layout
my-agent/
├── package.json
├── tsconfig.json
└── agent/
├── agent.ts
├── instructions.md
├── skills/
├── tools/
├── connections/
├── sandbox/
├── channels/
├── subagents/
├── schedules/
└── lib/
Tiny Example
agent/instructions.md
You are a weather-focused assistant. Be concise, accurate, and explicit when you use a tool.
agent/tools/get_weather.ts
import { defineTool } from "eve/tools";
import { z } from "zod";
export default defineTool({
description: "Get the current weather for a city.",
inputSchema: z.object({
city: z.string(),
}),
async execute(input) {
return {
city: input.city,
condition: "Sunny",
temperatureF: 72,
};
},
});
agent/agent.ts
import { defineAgent } from "eve";
export default defineAgent({
model: "openai/gpt-5.4-mini",
name: "weather-agent",
});
Quick Start
npx eve@latest init my-agent
The command creates the project, installs its dependencies, initializes Git,
and starts the development server. Add --channel-web-nextjs to scaffold the Web Chat
application. If you already created an empty directory, run eve init,
eve init ., or eve init ./ from inside it to run the same full scaffold there,
including package.json. In a non-empty existing app, eve init . adds the
agent files and missing dependencies instead; that add-agent flow requires an
existing package.json. eve init does not create or link a Vercel project.
Useful commands:
eve infoshows discovery results and compiled artifactseve init [name]creates a new agenteve buildcompiles.eve/and builds the host outputeve startserves the built.output/appeve devstarts the local runtime and interactive terminal UI
Public Docs
Start here:
docs/README.mddocs/getting-started.mdxdocs/reference/project-layout.mddocs/agent-config.mddocs/reference/typescript-api.mddocs/connections.mdx
Repo Guide
packages/eve/README.mdis the package-facing overviewapps/fixtures/weather-agentis the weather-focused fixture used by local dev, smokes, and bundle analysispackages/eve/src/public/index.tsis the public API source of truth