Eve

Quickstart

From-template and manual setup paths to a working Eve agent chat in assistant-ui.

Two paths to a running Eve-powered assistant-ui app. The template is fastest; the manual path is what you adapt when integrating into an existing Next.js project.

From the template

npx create-assistant-ui@latest -t eve my-app
cd my-app

Set a model credential:

.env.local
AI_GATEWAY_API_KEY=your-api-key
npm run dev

Open http://localhost:3000 and send a message. The template includes:

  • agent/agent.ts for Eve runtime config.
  • agent/instructions.md for the always-on system prompt.
  • next.config.ts with withEve(withAui(nextConfig)).
  • app/page.tsx with useEveAgentRuntime().

Manual setup in an existing app

Install dependencies

npm install @assistant-ui/react @assistant-ui/eve eve

Mount Eve in Next.js

next.config.ts
import { withAui } from "@assistant-ui/next";
import type { NextConfig } from "next";
import { withEve } from "eve/next";

const nextConfig: NextConfig = {};

export default withEve(withAui(nextConfig));

Add an Eve agent

agent/agent.ts
import { defineAgent } from "eve";

export default defineAgent({
  model: "anthropic/claude-sonnet-4.6",
});
agent/instructions.md
You are a concise assistant. Use tools when they are available.

Create the runtime

app/page.tsx
"use client";

import { Thread } from "@/components/assistant-ui/thread";
import { useEveAgentRuntime } from "@assistant-ui/eve";
import { AssistantRuntimeProvider } from "@assistant-ui/react";

export default function Home() {
  const runtime = useEveAgentRuntime();

  return (
    <AssistantRuntimeProvider runtime={runtime}>
      <Thread />
    </AssistantRuntimeProvider>
  );
}

Production auth

The default Eve channel is convenient for local development. For production browser users, define agent/channels/eve.ts and replace the default auth policy with your app's auth.

agent/channels/eve.ts
import { localDev, vercelOidc } from "eve/channels/auth";
import { eveChannel } from "eve/channels/eve";

export default eveChannel({
  auth: [localDev(), vercelOidc()],
});

That example keeps the development defaults. Swap in your Clerk, Auth.js, OIDC, or JWT verification before going live.

Next