In this article, we review eve.dev. You will learn:
What is Eve?
Architecture
Usage Example
What is Eve?
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 - markdown for the parts a human should read like a spec, TypeScript for the parts that benefit from real types and runtime behavior.
The framework is called eve. The published npm package is eve. The CLI binary is eve.
Directory structure can be as shown below:
my-agent/
├── package.json
├── tsconfig.json
└── agent/
├── agent.ts # additive runtime config (model, name, build, compaction, …)
├── instructions.md # always-on instructions prompt
├── tools/ # typed executable integrations
├── skills/ # optional named procedures the model can load on demand
├── hooks/ # lifecycle and stream-event subscribers
├── channels/ # message ingress and delivery (HTTP, Slack, …)
├── connections/ # external MCP server connections
├── sandbox/ # the agent's single sandbox (optional override)
├── workspace/ # files seeded into the sandbox on each session
├── subagents/ # specialist child agents (reuse `defineAgent`)
├── schedules/ # recurring jobs
└── lib/ # shared authored code imported by other files
Learn more about Eve.
Architecture
You do not need this section to author an eve agent - it documents the public HTTP protocol contracts so eve composes predictably with other systems.
eve's internal split is:
the channel normalizes inbound transport, applies auth and delivery policy, and owns channel-local addresses
the harness does one unit of AI work and returns { session, next }
the runtime persists state, follows next, streams events, and owns workflow primitives (start(), resumeHook(), createHook(), getWritable())
The public HTTP protocol exposes one immutable identifier: sessionId. Create a session explicitly, then use that ID for follow-up messages, controls, streaming, and inspection. Channel-local addresses remain behind authored channel APIs.
This is from Architecture section in packages/eve.
Usage Example
I picked this example from packages/eve README.
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",
});
and then you would do this:
npx eve@latest init my-agent
eve init writes a new agent with eve's default model. Pass --model openai/gpt-5.5 to choose another AI Gateway model, --reasoning high to set a reasoning effort, or --channel-web-nextjs to add the Web Chat application. It installs dependencies, initializes Git, and starts the development server. When it finds a supported coding-agent REPL, the handoff menu can open that REPL instead or exit. Targeting an existing project directory (eve init .) adds the agent files and missing dependencies instead. It does not create a Vercel project or deploy the agent.
Learn more about deploying agents created using Eve.
About me:
Hey, my name is Ramu Narasinga. Email: ramu.narasinga@gmail.com
I spent 3+ years studying OSS codebases and wrote 400+ articles on what makes the production-grade. Now I'm putting that into practice differently - instead of writing every fix myself, I run coding agents that do it.
How it works? Register your machine as a Runtime, point it at your repo. Agents pick up issues. write the fix, open the PR. You just review, they execute.
Build your coding agents and get more work done in less time at thinkthroo.com

Top comments (0)