Skip to main content
eve is Vercel’s open-source, filesystem-first TypeScript framework for durable agents (Apache-2.0, in beta as of October 2026). An eve agent is a directory: instructions (instructions.md or an instructions/ folder), agent.ts, and folders for tools, connections, schedules, channels, and subagents. Guild keeps that shape. Instructions become a prompt file, connections become Guild integrations, schedules and channels become triggers, and subagents become Guild agents you call as tools.

Who this is for

Teams running eve agents on Vercel, or self-hosted, who want the agents in a shared workspace. That means a public or internal Hub to fork from, credentials the agent never sees, ALLOW/DENY credential policies, and one place to see every run.

Concept map

Before you start

Inventory

List these from the eve project before writing any Guild code. Record names only, never secret values.
  • Every file in agent/tools/ and what it calls (vendor SDK, fetch, database).
  • Every file in agent/connections/, with its URL or OpenAPI spec and auth method.
  • agent/schedules/ cron expressions, agent/channels/ entry points, and agent/subagents/.
  • Tools with an approval policy.
  • Whether the agent’s instructions or tools rely on the built-in bash, read_file, or write_file tools. Every eve agent has a sandbox, and these tools are on unless agent.ts sets defaultTools: false.
  • Environment variables the tools and connections read.

Steps

1

Pick the agent type and scaffold

No shell or file work and text in/out: Native. Typed input or deterministic steps: TypeScript. Shell, file, or repository work: OpenClaw.
--category and --owner stop the CLI from prompting, which a script or coding agent can’t answer. List categories with guild agent categories.
2

Move the instructions

Copy agent/instructions.md into PROMPT.md, AGENTS.md, or the systemPrompt of an llmAgent. Update any tool names the prompt mentions. Guild tool names follow {service}_{operation}.
3

Replace connections with integrations

The Guild runtime has no general network egress, so each fetch or vendor SDK call becomes an integration operation.
If an API is missing, create it from its OpenAPI spec:
4

Port tools and approvals

Tool names and parameters come from guild integration operation list --json; the ones above are illustrative.The ui_prompt confirmation replaces eve’s approval: always() as the sign-off on each call. To control which agents can call the operation at all, add a credential policy rule scoped to the agent and workspace. DENY wins.
5

Turn subagents into Guild agents

Each agent/subagents/<name>/ becomes its own Guild agent. Call it with guildAgentTool({ calls: "owner~agent", inputSchema, outputSchema }), or list it under sub_agents in guild.yaml.
6

Test

The scaffold has no test script, so pnpm test passes without running anything. Add a test script to package.json before you rely on it, such as "test": "tsc --build && node --test logic.test.mjs". If pnpm install fails with ERR_PNPM_IGNORED_BUILDS, newer pnpm is blocking esbuild’s install script. Run pnpm approve-builds, approve esbuild, and install again.guild agent test uploads only the files git tracks, so git add -A stages new files such as logic.ts first. Without it, the cloud build fails with “Cannot find module ’./logic.ts’”.Send the same request the eve agent handled and compare the results.
7

Publish and add triggers

The first guild agent save --wait --publish after guild agent init fails with “No saved state… use —force” because of the .gitignore the scaffold writes. Add --force to that first save for now.
You can also publish with the Publish Agent to Guild GitHub Action instead of guild agent save --publish. The Action needs an account API key with the agents:write scope:

Credentials and policies

Recreate each environment variable or connection token as a Guild credential. Use member scope where eve used defineDynamic or user-owned Vercel Connect tokens, and workspace or agent scope for app-owned tokens. Then narrow access with credential policies. New credentials start allow-all, and DENY rules win.

What doesn’t map 1:1

eve’s approval: always() and once() map to two Guild controls. To control which agents can call the operation at all, add a credential policy rule scoped to the agent and workspace that allows or denies that operation. DENY wins. To have a person sign off on each call, have the agent confirm with ui_prompt first. The run pauses until someone answers.
eve can run as a self-hosted Node service. Guild is a hosted platform, so self-hosted eve deployments move to Guild’s runtime.
eve schedules take any standard 5-field cron expression and run in UTC. Guild supports the same expressions with --frequency CRON --cron-expression "<expr>". Add --cron-timezone, such as Europe/Athens, and Guild converts the schedule to UTC.
eve evals (defineEval, with Braintrust, JUnit, or Datadog reporters) do not run on Guild. Rebuild the important cases as Guild Evaluations or guild agent test sessions.
eve channels such as Twilio (SMS and phone calls), iMessage through Linq or Photon, Discord, Microsoft Teams, or Telegram have no direct Guild trigger. Check guild integration list for the service first.

Three ways to migrate

guild-migrate skill

Ask your coding agent: “Migrate the eve agent in ./agent to Guild.” It follows these steps and writes MIGRATION.md.

Publish Agent to Guild Action

Commit the port to your repository, then publish it from GitHub Actions with an account API key.

Migration agent

Point Migrate to Guild at your repository; it opens a draft pull request. The guild-migrate skill ships in the same package.
A worked before/after example lives in examples/migrations/vercel-eve/ in the guild-migrate repository.

Agent types

Native, TypeScript, Goose, OpenClaw, and LangGraph.

Triggers

Event, schedule, and API triggers.
Last modified on November 2, 2026