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, andagent/subagents/.- Tools with an
approvalpolicy. - Whether the agent’s instructions or tools rely on the built-in
bash,read_file, orwrite_filetools. Every eve agent has a sandbox, and these tools are on unlessagent.tssetsdefaultTools: 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 If an API is missing, create it from its OpenAPI spec:
fetch or vendor SDK call becomes an integration operation.4
Port tools and approvals
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
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.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 useddefineDynamic 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
Per-tool approval policies
Per-tool approval policies
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.Self-hosting
Self-hosting
eve can run as a self-hosted Node service. Guild is a hosted platform, so self-hosted eve deployments move to Guild’s runtime.
Cron schedules
Cron schedules
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.Evals
Evals
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.Channels without a Guild trigger
Channels without a Guild trigger
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.
examples/migrations/vercel-eve/ in the guild-migrate repository.
Related pages
Agent types
Native, TypeScript, Goose, OpenClaw, and LangGraph.
Triggers
Event, schedule, and API triggers.