Project Structure
Start with one agent, keep application code beside it, and split into a workspace only when you need separately addressable agents.
Start with one root agent in agent/. A root agent accepts requests through its own HTTP API or channels; it can have many tools, skills, and subagents. Keep browser application files outside agent/.
| When you need… | Structure |
|---|---|
| One agent, with or without a browser app | agent/ beside your application code |
| A specialist that an agent delegates to | agent/subagents/<name>/ inside that agent |
| Several separately addressable agents sharing a package and deployment | agents/<name>/agent/ in an eve agent workspace |
| Separate dependencies, versions, or release schedules | Separate agent packages or projects |
Every root agent can have declared subagents with their own prompts, tools, and sandboxes. These specialists have no separate channel endpoint and do not inherit the parent's authored capabilities. Use a skill instead when you only need an optional procedure.
One agent
Use this layout for a standalone agent or an agent inside a web application:
Create the agent with Getting Started. The Agent Files reference lists supported paths. Keep agent-only helpers in agent/lib/; share reusable capabilities through extensions.
For a generated Next.js chat UI, run eve add channel/web from the project root. For an existing browser app, follow your framework integration guide.
Several root agents
Use an eve agent workspace when, for example, clients need to address support and research separately:
Members share the root package, dependencies, scripts, and Vercel deployment. Their directory names identify them in the CLI and public routes. Members have no package.json of their own: adding one excludes that directory from eve workspace discovery. Unlike a package-manager workspace, this layout does not give members separate dependency or version boundaries.
Create a workspace, then select an agent to run:
Run agent commands such as dev, info, and eval from agents/<name>/, or pass --agent <name> from the workspace root. eve dev --agent support runs the selected agent, not peer applications. Start other agents separately when needed; local workspace-peer calls require an explicit transport.
On Vercel, run eve link and eve deploy from the root; deployment includes all members. No frontend is required. For self-hosting, build and run each member separately.
Independent releases
Use separate packages or projects when agents need independent dependencies or releases, even within the same monorepo. These are not eve agent-workspace members. Share capabilities through workspace extensions; delegate across deployments with remote agents.
Configure a web deployment
Choose how the frontend and agents run together independently of how many agents you have:
- Add agents to a Next.js application: use
eve/nextinnext.config.ts. Next.js owns the application lifecycle; the integration starts agent processes and proxies requests locally, and contributes separate agent services on Vercel. A root Next.js app can sit beside eitheragent/oragents/; workspace members are discovered automatically. A peer app such asapps/web/can select its eve project witheveRoot: "../..". - Add a frontend to an agent workspace: keep the frontend as a peer application, for example under
apps/web/. On Vercel, useeve/vercelin rootvercel.tsto contribute the agents alongside the frontend service. For self-hosting, run the services with your process manager and configure a reverse proxy. The frontend does not needeve/next.
apps/web/ is an organizational convention, not an eve filesystem slot. Deployment configuration owns peer services; eve discovers only the agents. Both Vercel integrations deploy the services together, not as independent releases.
Run eve add channel/web from a standalone agent or select a workspace agent with --agent <name>. The installer creates a Next.js frontend under apps/web/. Choose Vercel to configure separate Vercel services and run them with pnpm dev:all; you don't need to link a Vercel project to run them locally. Choose Other to let Next.js host the agents and run the application with pnpm dev:web. Use pnpm dev or pnpm dev:eve when you only want one agent and the eve terminal UI.
Add a second root agent
To convert a single-agent project into a workspace, move the original agent from the project root:
Move its evals/ directory, if present, to agents/support/evals/. Keep package.json, dependencies, environment files, and any browser application at the project root. Do not leave a root agent/ directory: eve treats a project with agent/ as single-agent even when agents/ also exists.
Before adding the next agent:
- Update
tsconfig.jsonto includeagents/**/*.ts, preserving any application includes. Update moved-file imports and path aliases, including scaffoldedpackage.json#importsentries that point at./agent/*or./evals/*. - Update scripts that assume one agent. Use
--agent supportfor agent-scoped commands; build an agent-only Vercel workspace with rooteve build. For a Next.js app, keep the framework scripts and follow its build instructions. - Update HTTP clients and webhook registrations for the named agent's public routes. In a root Next.js app, remove a single-agent
eveRootoverride to enable workspace discovery, and selectsupportin the client hook. Store the agent name alongside durable-session links.
Then add the second agent and check discovery:
Run the moved agent's evals with npx eve eval --agent support. Add later agents with npx eve init <name> from the workspace root.