eve 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/docs/public/README.md +16 -11
- package/dist/docs/public/agent-config.md +9 -9
- package/dist/docs/public/channels/custom.mdx +4 -4
- package/dist/docs/public/channels/discord.mdx +1 -1
- package/dist/docs/public/channels/eve.mdx +9 -9
- package/dist/docs/public/channels/github.mdx +1 -1
- package/dist/docs/public/channels/overview.mdx +21 -15
- package/dist/docs/public/channels/slack.mdx +2 -2
- package/dist/docs/public/channels/teams.mdx +1 -1
- package/dist/docs/public/channels/telegram.mdx +1 -1
- package/dist/docs/public/channels/twilio.mdx +1 -1
- package/dist/docs/public/{advanced → concepts}/context-control.md +3 -3
- package/dist/docs/public/{advanced → concepts}/default-harness.md +3 -3
- package/dist/docs/public/{advanced → concepts}/execution-model-and-durability.md +3 -1
- package/dist/docs/public/concepts/meta.json +10 -0
- package/dist/docs/public/{advanced → concepts}/security-model.md +2 -2
- package/dist/docs/public/{advanced → concepts}/sessions-runs-and-streaming.md +7 -7
- package/dist/docs/public/connections.mdx +3 -3
- package/dist/docs/public/evals/cases.mdx +1 -1
- package/dist/docs/public/evals/overview.mdx +2 -2
- package/dist/docs/public/evals/running.mdx +1 -1
- package/dist/docs/public/evals/targets.mdx +1 -1
- package/dist/docs/public/getting-started.mdx +28 -35
- package/dist/docs/public/{advanced → guides}/auth-and-route-protection.md +2 -2
- package/dist/docs/public/{client → guides/client}/continuations.mdx +2 -2
- package/dist/docs/public/{client → guides/client}/messages.mdx +1 -1
- package/dist/docs/public/{client → guides/client}/meta.json +1 -1
- package/dist/docs/public/{client → guides/client}/output-schema.mdx +2 -2
- package/dist/docs/public/{client → guides/client}/overview.mdx +5 -5
- package/dist/docs/public/{client → guides/client}/streaming.mdx +1 -1
- package/dist/docs/public/{advanced → guides}/deployment.md +9 -1
- package/dist/docs/public/{advanced → guides}/dynamic-capabilities.md +1 -1
- package/dist/docs/public/{advanced → guides}/dynamic-workflows.md +1 -1
- package/dist/docs/public/{frontend → guides/frontend}/nextjs.mdx +3 -3
- package/dist/docs/public/{frontend → guides/frontend}/nuxt.mdx +3 -3
- package/dist/docs/public/{frontend → guides/frontend}/overview.mdx +6 -6
- package/dist/docs/public/{frontend → guides/frontend}/sveltekit.mdx +3 -3
- package/dist/docs/public/{frontend → guides/frontend}/use-eve-agent-svelte.mdx +2 -2
- package/dist/docs/public/{frontend → guides/frontend}/use-eve-agent-vue.mdx +2 -2
- package/dist/docs/public/{advanced → guides}/hooks.md +2 -2
- package/dist/docs/public/{advanced → guides}/instrumentation.md +2 -0
- package/dist/docs/public/{advanced → guides}/meta.json +8 -11
- package/dist/docs/public/{advanced → guides}/session-context.md +2 -2
- package/dist/docs/public/{advanced → guides}/state.md +1 -1
- package/dist/docs/public/instructions.mdx +2 -2
- package/dist/docs/public/introduction.md +5 -2
- package/dist/docs/public/meta.json +3 -3
- package/dist/docs/public/reference/cli.md +3 -3
- package/dist/docs/public/reference/meta.json +1 -1
- package/dist/docs/public/reference/project-layout.md +5 -1
- package/dist/docs/public/reference/typescript-api.md +23 -23
- package/dist/docs/public/sandbox.mdx +1 -1
- package/dist/docs/public/schedules.mdx +2 -2
- package/dist/docs/public/skills.mdx +3 -3
- package/dist/docs/public/subagents.mdx +3 -3
- package/dist/docs/public/tools.mdx +4 -4
- package/dist/docs/public/tutorial/connect-a-warehouse.mdx +2 -2
- package/dist/docs/public/tutorial/first-agent.mdx +1 -1
- package/dist/docs/public/tutorial/guard-the-spend.mdx +1 -1
- package/dist/docs/public/tutorial/how-it-runs.mdx +2 -2
- package/dist/docs/public/tutorial/meta.json +1 -1
- package/dist/docs/public/tutorial/query-sample-data.mdx +1 -1
- package/dist/docs/public/tutorial/remember-definitions.mdx +3 -3
- package/dist/docs/public/tutorial/run-analysis.mdx +1 -1
- package/dist/docs/public/tutorial/ship-it.mdx +4 -4
- package/dist/docs/public/tutorial/team-playbooks.mdx +3 -3
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +2 -2
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +2 -2
- package/dist/src/compiled/@workflow/core/capabilities.d.ts +19 -1
- package/dist/src/compiled/@workflow/core/class-serialization.d.ts +32 -0
- package/dist/src/compiled/@workflow/core/create-hook.d.ts +37 -0
- package/dist/src/compiled/@workflow/core/global.d.ts +11 -1
- package/dist/src/compiled/@workflow/core/index.js +2 -2
- package/dist/src/compiled/@workflow/core/runtime/start.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +15 -2
- package/dist/src/compiled/@workflow/core/runtime/wait-continuation.d.ts +84 -0
- package/dist/src/compiled/@workflow/core/runtime.js +27 -27
- package/dist/src/compiled/@workflow/core/serialization/types.d.ts +21 -0
- package/dist/src/compiled/@workflow/core/serialization.d.ts +72 -6
- package/dist/src/compiled/@workflow/core/symbols.d.ts +2 -0
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/workflow/set-attributes.d.ts +3 -4
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/world/events.d.ts +48 -0
- package/dist/src/compiled/@workflow/world/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/world/queue.d.ts +3 -0
- package/dist/src/compiled/@workflow/world/runs.d.ts +2 -0
- package/dist/src/compiled/@workflow/world/spec-version.d.ts +2 -1
- package/dist/src/compiled/_chunks/workflow/attribute-changes-DGVGRGfw.js +59 -0
- package/dist/src/compiled/_chunks/workflow/resume-hook-DMSadN9o.js +1 -0
- package/dist/src/compiled/_chunks/workflow/run-BRdn7zy_.js +1 -0
- package/dist/src/compiled/_chunks/workflow/sleep-CpXfoXLF.js +1 -0
- package/dist/src/execution/sandbox/bindings/vercel.d.ts +2 -6
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/runtime/sandbox/keys.js +1 -1
- package/dist/src/setup/primitives/pm/pnpm.js +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/scaffold/update/channels.js +1 -1
- package/package.json +6 -6
- package/dist/docs/public/reference/faqs.md +0 -48
- package/dist/src/compiled/_chunks/workflow/resume-hook-CEAS3opc.js +0 -12
- package/dist/src/compiled/_chunks/workflow/sleep-Cup6vPoA.js +0 -1
- package/dist/src/compiled/_chunks/workflow/symbols-BUTtwS7j.js +0 -48
- /package/dist/docs/public/{advanced → guides}/dev-tui.md +0 -0
- /package/dist/docs/public/{frontend → guides/frontend}/meta.json +0 -0
- /package/dist/docs/public/{advanced → guides}/remote-agents.md +0 -0
|
@@ -5,14 +5,7 @@ description: "Install Eve, scaffold your first agent, give it a tool, and run it
|
|
|
5
5
|
|
|
6
6
|
Eve is a filesystem-first framework for durable agents: you write capabilities under `agent/`, and Eve runs the model loop, persists every session, and serves the agent over HTTP and platform channels. This guide gets a small app running locally and walks the current request loop end to end: build, run, message, stream, and follow up.
|
|
7
7
|
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
- Node `24.x`
|
|
11
|
-
- npm (bundled with Node)
|
|
12
|
-
|
|
13
|
-
You also need a model credential. Set the provider or gateway key your model string requires (gateway ids like `anthropic/claude-opus-4.8` route through the Vercel AI Gateway), or link a Vercel project that supplies one.
|
|
14
|
-
|
|
15
|
-
## Create Your Agent
|
|
8
|
+
## Quick start
|
|
16
9
|
|
|
17
10
|
Run `eve init` with `npx` before Eve is installed locally:
|
|
18
11
|
|
|
@@ -20,30 +13,30 @@ Run `eve init` with `npx` before Eve is installed locally:
|
|
|
20
13
|
npx eve@latest init my-agent
|
|
21
14
|
```
|
|
22
15
|
|
|
23
|
-
The command creates an npm-managed child directory, uses Eve's default model,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
The command creates an npm-managed child directory, uses Eve's default model, installs dependencies, initializes Git, and starts the development server — the interactive [terminal UI](./guides/dev-tui) opens; type a message and watch the model loop run. Pass `--channel-web-nextjs` to add the Web Chat application; every app ships the built-in HTTP channel (`agent/channels/eve.ts`) regardless. Stop the server before editing the generated agent. The command does not create a Vercel project or deploy.
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
- Node `24.x`
|
|
21
|
+
- npm (bundled with Node)
|
|
22
|
+
|
|
23
|
+
You also need a model credential. Set the provider or gateway key your model string requires (gateway ids like `anthropic/claude-opus-4.8` route through the Vercel AI Gateway), or link a Vercel project that supplies one.
|
|
24
|
+
|
|
25
|
+
## Manual installation
|
|
28
26
|
|
|
29
|
-
The target can also be an existing project directory (`eve init .`): the
|
|
30
|
-
project must have a `package.json`, the `agent/` files must not exist yet, and
|
|
31
|
-
the missing `eve`, `ai`, and `zod` dependencies are added without touching
|
|
32
|
-
anything else the project owns. Either way the final handoff runs the `eve dev`
|
|
33
|
-
binary through the project's package manager, never the project's own `dev`
|
|
34
|
-
script.
|
|
27
|
+
The quick start uses `eve init` for a guided scaffold. The target can also be an existing project directory (`eve init .`): the project must have a `package.json`, the `agent/` files must not exist yet, and the missing `eve`, `ai`, and `zod` dependencies are added without touching anything else the project owns. Either way the final handoff runs the `eve dev` binary through the project's package manager, never the project's own `dev` script.
|
|
35
28
|
|
|
36
|
-
To add only the dependency
|
|
29
|
+
To wire Eve into an existing app yourself instead, add only the dependency and author the two files the runtime needs:
|
|
37
30
|
|
|
38
31
|
```bash
|
|
39
32
|
npm install eve@latest
|
|
40
33
|
```
|
|
41
34
|
|
|
42
|
-
|
|
35
|
+
### Project files
|
|
43
36
|
|
|
44
|
-
|
|
37
|
+
A minimal agent is two files; you add tools as you need them.
|
|
45
38
|
|
|
46
|
-
`agent/instructions.md`
|
|
39
|
+
`agent/instructions.md` is the always-on system prompt:
|
|
47
40
|
|
|
48
41
|
```md
|
|
49
42
|
You are a concise assistant. Use tools when they are available.
|
|
@@ -59,9 +52,9 @@ export default defineAgent({
|
|
|
59
52
|
});
|
|
60
53
|
```
|
|
61
54
|
|
|
62
|
-
Even at this size the agent can already do real work. The default harness gives it file, shell, web, and delegation tools out of the box. See [Default harness](./
|
|
55
|
+
Even at this size the agent can already do real work. The default harness gives it file, shell, web, and delegation tools out of the box. See [Default harness](./concepts/default-harness) for the full set and how to override or disable any of them.
|
|
63
56
|
|
|
64
|
-
### Add
|
|
57
|
+
### Add your first tool
|
|
65
58
|
|
|
66
59
|
Whatever you name the file becomes the tool name the model sees. Create `agent/tools/get_weather.ts`:
|
|
67
60
|
|
|
@@ -82,7 +75,7 @@ export default defineTool({
|
|
|
82
75
|
|
|
83
76
|
Tools run in your app runtime with full `process.env`, not inside the [sandbox](./sandbox). More in [Tools](./tools).
|
|
84
77
|
|
|
85
|
-
## Run
|
|
78
|
+
## Run the app
|
|
86
79
|
|
|
87
80
|
From the app root:
|
|
88
81
|
|
|
@@ -95,13 +88,13 @@ Useful commands:
|
|
|
95
88
|
- `eve info`: show the active routes and compiled artifacts
|
|
96
89
|
- `eve build`: compile the agent into `.eve/` and build the host output
|
|
97
90
|
- `eve start`: serve the built output
|
|
98
|
-
- `eve dev`: start the local runtime and open the interactive [terminal UI](./
|
|
91
|
+
- `eve dev`: start the local runtime and open the interactive [terminal UI](./guides/dev-tui)
|
|
99
92
|
|
|
100
93
|
In the dev TUI, type a message and watch it happen in order: the `get_weather` call, its result, then the reply.
|
|
101
94
|
|
|
102
|
-
The same CLI can point at a deployment. `eve dev https://your-app.vercel.app` drives a deployed app, which is handy for preview and production smoke tests. See [Deployment](./
|
|
95
|
+
The same CLI can point at a deployment. `eve dev https://your-app.vercel.app` drives a deployed app, which is handy for preview and production smoke tests. See [Deployment](./guides/deployment).
|
|
103
96
|
|
|
104
|
-
## Send
|
|
97
|
+
## Send a message
|
|
105
98
|
|
|
106
99
|
Every Eve app exposes the same stable HTTP API. Start a durable session:
|
|
107
100
|
|
|
@@ -116,7 +109,7 @@ The response comes back with two things you'll reuse:
|
|
|
116
109
|
- a `continuationToken` in the JSON body, to resume this conversation
|
|
117
110
|
- an `x-eve-session-id` header that identifies the run to stream
|
|
118
111
|
|
|
119
|
-
## Stream
|
|
112
|
+
## Stream the session
|
|
120
113
|
|
|
121
114
|
Attach to the session stream:
|
|
122
115
|
|
|
@@ -148,7 +141,7 @@ The stream is NDJSON. Expect lifecycle events such as:
|
|
|
148
141
|
|
|
149
142
|
`message.completed.data.finishReason` tells you whether assistant text is interim tool-call narration or a terminal reply, and `step.completed.data.usage` carries token usage. When a parent delegates to a subagent, `subagent.called.data.childSessionId` gives you the child session id, so you can subscribe to that child stream and watch the delegated work.
|
|
150
143
|
|
|
151
|
-
## Send
|
|
144
|
+
## Send a follow-up message
|
|
152
145
|
|
|
153
146
|
When the session is waiting for the next user message, post a follow-up with the token:
|
|
154
147
|
|
|
@@ -158,7 +151,7 @@ curl -X POST http://127.0.0.1:3000/eve/v1/session/<sessionId> \
|
|
|
158
151
|
-d '{"continuationToken":"<token>","message":"Now do Queens."}'
|
|
159
152
|
```
|
|
160
153
|
|
|
161
|
-
See [Sessions, runs & streaming](./
|
|
154
|
+
See [Sessions, runs & streaming](./concepts/sessions-runs-and-streaming) for the full contract.
|
|
162
155
|
|
|
163
156
|
## Setting up with a coding agent
|
|
164
157
|
|
|
@@ -182,7 +175,7 @@ Once `eve` is a dependency, the full docs are bundled in the package, so the age
|
|
|
182
175
|
|
|
183
176
|
- [Instructions](./instructions) and [Tools](./tools): the core building blocks
|
|
184
177
|
- [Channels](./channels/overview): reach the agent from Slack, Discord, or a web UI
|
|
185
|
-
- [Frontend](./frontend/overview): browser chat with `useEveAgent`
|
|
186
|
-
- [TypeScript
|
|
187
|
-
- [Sessions, runs & streaming](./
|
|
178
|
+
- [Frontend](./guides/frontend/overview): browser chat with `useEveAgent`
|
|
179
|
+
- [TypeScript SDK](./guides/client/overview): call the agent from scripts or server-side code
|
|
180
|
+
- [Sessions, runs & streaming](./concepts/sessions-runs-and-streaming): the durable session model
|
|
188
181
|
- [Build an agent](./tutorial/first-agent): the full end-to-end walkthrough
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Auth &
|
|
2
|
+
title: "Auth & Route Protection"
|
|
3
3
|
description: "Secure your agent's HTTP routes with an ordered auth walk, verifier helpers, and connection OAuth via Vercel Connect."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -267,6 +267,6 @@ By default the sign-in affordance title-cases the tool's path-derived name — a
|
|
|
267
267
|
|
|
268
268
|
## What to read next
|
|
269
269
|
|
|
270
|
-
- [Security model](
|
|
270
|
+
- [Security model](../concepts/security-model): trust boundaries and the pre-production checklist
|
|
271
271
|
- [Connections](../connections): connection auth shapes (`connect()` vs static token)
|
|
272
272
|
- [Deployment](./deployment): where route-auth secrets live in production
|
|
@@ -122,5 +122,5 @@ for await (const event of session.stream({ startIndex: 0 })) {
|
|
|
122
122
|
## What to read next
|
|
123
123
|
|
|
124
124
|
- [Streaming](./streaming): stream events and reconnect by index
|
|
125
|
-
- [Sessions, runs & streaming](
|
|
126
|
-
- [Eve channel](
|
|
125
|
+
- [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming): the raw HTTP contract
|
|
126
|
+
- [Eve channel](../../channels/eve): where continuation tokens come from
|
|
@@ -149,4 +149,4 @@ Don't do both on the same response. Once the stream is consumed, the `ClientSess
|
|
|
149
149
|
|
|
150
150
|
- [Continuations](./continuations): how the session cursor advances
|
|
151
151
|
- [Streaming](./streaming): handle events live instead of using `result()`
|
|
152
|
-
- [Tools](
|
|
152
|
+
- [Tools](../../tools): configure approvals and question prompts
|
|
@@ -126,10 +126,10 @@ const followUp = await followUpResponse.result();
|
|
|
126
126
|
console.log(followUp.data); // undefined unless this turn also requested a schema
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
For task-mode output that belongs to the agent or subagent definition itself, see [`agent.ts`](
|
|
129
|
+
For task-mode output that belongs to the agent or subagent definition itself, see [`agent.ts`](../../agent-config#outputschema) and [Subagents](../../subagents).
|
|
130
130
|
|
|
131
131
|
## What to read next
|
|
132
132
|
|
|
133
133
|
- [Messages](./messages): send turns with `send()`
|
|
134
134
|
- [Streaming](./streaming): handle `result.completed` live
|
|
135
|
-
- [`agent.ts`](
|
|
135
|
+
- [`agent.ts`](../../agent-config#outputschema): configured task-mode output
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
2
|
+
title: "Overview"
|
|
3
3
|
description: "Call an Eve agent from TypeScript with Client, sessions, auth, and health checks."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
The `eve/client` entrypoint is the typed client for Eve's default HTTP API. Use it from scripts, server-to-server integrations, tests, evals, backend jobs, or custom UIs that want the session protocol without hand-writing the POST and NDJSON stream loop.
|
|
7
7
|
|
|
8
|
-
For browser chat UIs, start with [`useEveAgent`](../frontend/overview). For wire-level details, read [Sessions, runs & streaming](
|
|
8
|
+
For browser chat UIs, start with [`useEveAgent`](../frontend/overview). For wire-level details, read [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming). The client sits between those two: lower level than the frontend hooks, higher level than raw HTTP.
|
|
9
9
|
|
|
10
10
|
## Create a client
|
|
11
11
|
|
|
@@ -34,7 +34,7 @@ Non-2xx responses throw `ClientError`, which carries the HTTP `status` and respo
|
|
|
34
34
|
|
|
35
35
|
## Authentication
|
|
36
36
|
|
|
37
|
-
Pass `auth` when the [Eve channel](
|
|
37
|
+
Pass `auth` when the [Eve channel](../../channels/eve) route requires credentials:
|
|
38
38
|
|
|
39
39
|
```ts
|
|
40
40
|
const client = new Client({
|
|
@@ -111,6 +111,6 @@ The next pages cover the session lifecycle:
|
|
|
111
111
|
|
|
112
112
|
## What to read next
|
|
113
113
|
|
|
114
|
-
- [Eve channel](
|
|
115
|
-
- [Sessions, runs & streaming](
|
|
114
|
+
- [Eve channel](../../channels/eve): the HTTP API this client calls
|
|
115
|
+
- [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming): the raw HTTP contract
|
|
116
116
|
- [Frontend](../frontend/overview): browser UI with `useEveAgent`
|
|
@@ -74,7 +74,7 @@ The most common UI events are:
|
|
|
74
74
|
| `session.completed` | Mark the conversation terminal. |
|
|
75
75
|
| `session.failed` | Mark the conversation failed. |
|
|
76
76
|
|
|
77
|
-
For the complete event table, see [Sessions, runs & streaming](
|
|
77
|
+
For the complete event table, see [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming).
|
|
78
78
|
|
|
79
79
|
## Reconnection
|
|
80
80
|
|
|
@@ -66,7 +66,7 @@ The deployed app serves the same stable health, session, and stream routes you'v
|
|
|
66
66
|
|
|
67
67
|
## How Eve sits behind a host framework
|
|
68
68
|
|
|
69
|
-
You can deploy an Eve app on its own, or mount it inside a host web framework that owns the rest of the site (marketing pages, a dashboard, other API routes). The host keeps its own routing and serves Eve's routes through the framework integration. For mounting Eve in Next.js (`withEve`) and the other supported frameworks, see [Frontend](
|
|
69
|
+
You can deploy an Eve app on its own, or mount it inside a host web framework that owns the rest of the site (marketing pages, a dashboard, other API routes). The host keeps its own routing and serves Eve's routes through the framework integration. For mounting Eve in Next.js (`withEve`) and the other supported frameworks, see [Frontend](./frontend/nextjs). Either way, the agent surface and HTTP contract are identical.
|
|
70
70
|
|
|
71
71
|
## 7. Verify the deployment
|
|
72
72
|
|
|
@@ -98,6 +98,14 @@ eve dev https://<your-app>
|
|
|
98
98
|
|
|
99
99
|
(Set `VERCEL_AUTOMATION_BYPASS_SECRET` locally first if the deployment uses preview protection.)
|
|
100
100
|
|
|
101
|
+
## View runs in the dashboard
|
|
102
|
+
|
|
103
|
+
Once the agent is deployed, the platform auto-detects `eve` as the framework and surfaces an **Agent Runs** tab under your project's **Observability** view in the Vercel dashboard. From there you can browse sessions and drill into each conversation's trace.
|
|
104
|
+
|
|
105
|
+
> The Agent Runs tab is currently gated: your Vercel team needs the feature enabled before it appears. If you don't see it, reach out to your Vercel contact to get your team enabled.
|
|
106
|
+
|
|
107
|
+
Agent Runs is separate from the OpenTelemetry exporters configured in [`instrumentation.ts`](./instrumentation). Those still work and are the recommended path if you want spans in Braintrust, Datadog, or another third-party backend.
|
|
108
|
+
|
|
101
109
|
## Checklist
|
|
102
110
|
|
|
103
111
|
- [ ] `eve build` succeeds and writes `.vercel/output`.
|
|
@@ -124,6 +124,6 @@ Both resolve before the prompt is assembled, so the model sees the right instruc
|
|
|
124
124
|
## What to read next
|
|
125
125
|
|
|
126
126
|
- The static tool basics this builds on → [Tools](../tools)
|
|
127
|
-
- The built-in tools and how to override them → [Default harness](
|
|
127
|
+
- The built-in tools and how to override them → [Default harness](../concepts/default-harness)
|
|
128
128
|
- Authenticate a tool or connection to an external service → [Auth & route protection](./auth-and-route-protection)
|
|
129
129
|
- Durable per-session memory for resolvers to read → [State](./state)
|
|
@@ -52,4 +52,4 @@ Code mode is the broader version: the model drives _all_ of an agent's tools (fi
|
|
|
52
52
|
|
|
53
53
|
- Declare the subagents a workflow orchestrates → [Subagents](../subagents)
|
|
54
54
|
- Call another deployment as one of those agents → [Remote agents](./remote-agents)
|
|
55
|
-
- The `agent/tools/` opt-in mechanism → [Default harness](
|
|
55
|
+
- The `agent/tools/` opt-in mechanism → [Default harness](../concepts/default-harness)
|
|
@@ -56,7 +56,7 @@ const agent = useEveAgent({
|
|
|
56
56
|
});
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Before deploying a user-facing app, add `agent/channels/eve.ts` so production requests run your app's auth policy. See [Channels](
|
|
59
|
+
Before deploying a user-facing app, add `agent/channels/eve.ts` so production requests run your app's auth policy. See [Channels](../../channels/overview) and [Auth & route protection](../auth-and-route-protection).
|
|
60
60
|
|
|
61
61
|
## Dev vs deploy topology
|
|
62
62
|
|
|
@@ -84,5 +84,5 @@ Before deploying a user-facing app, add `agent/channels/eve.ts` so production re
|
|
|
84
84
|
## What to read next
|
|
85
85
|
|
|
86
86
|
- [Frontend overview](./overview): the `useEveAgent` API
|
|
87
|
-
- [Auth & route protection](../
|
|
88
|
-
- [Deployment](../
|
|
87
|
+
- [Auth & route protection](../auth-and-route-protection)
|
|
88
|
+
- [Deployment](../deployment)
|
|
@@ -52,7 +52,7 @@ async function handleSubmit() {
|
|
|
52
52
|
</template>
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
Out of the box the module gives Eve a framework default channel. When you want to pick the route auth policy yourself, add `agent/channels/eve.ts` and swap `none()` for a helper like `vercelOidc()` on protected apps. See [Channels](
|
|
55
|
+
Out of the box the module gives Eve a framework default channel. When you want to pick the route auth policy yourself, add `agent/channels/eve.ts` and swap `none()` for a helper like `vercelOidc()` on protected apps. See [Channels](../../channels/overview) and [Auth & route protection](../auth-and-route-protection).
|
|
56
56
|
|
|
57
57
|
## Dev vs deploy topology
|
|
58
58
|
|
|
@@ -78,5 +78,5 @@ Out of the box the module gives Eve a framework default channel. When you want t
|
|
|
78
78
|
## What to read next
|
|
79
79
|
|
|
80
80
|
- [`useEveAgent` (Vue)](./use-eve-agent-vue): the composable API
|
|
81
|
-
- [Auth & route protection](../
|
|
82
|
-
- [Deployment](../
|
|
81
|
+
- [Auth & route protection](../auth-and-route-protection)
|
|
82
|
+
- [Deployment](../deployment)
|
|
@@ -7,14 +7,14 @@ The frontend helpers put a browser chat or agent UI on top of an Eve agent. `use
|
|
|
7
7
|
|
|
8
8
|
## The integration model
|
|
9
9
|
|
|
10
|
-
A browser UI is just a client of the agent's HTTP routes (the [Eve channel](
|
|
10
|
+
A browser UI is just a client of the agent's HTTP routes (the [Eve channel](../../channels/overview)). Two layers wire it up:
|
|
11
11
|
|
|
12
12
|
- **The framework integration** mounts the Eve routes on your app's origin, so the browser never crosses a CORS boundary or reads an env var to find the agent. Pick yours: [Next.js](./nextjs) (`withEve`), [Nuxt](./nuxt) (the `eve/nuxt` module), or [SvelteKit](./sveltekit) (the `eveSvelteKit` Vite plugin). On any other stack the hook talks to same-origin `/eve/v1/*` routes directly, or you pass an explicit `host`.
|
|
13
13
|
- **The hook** (`useEveAgent`) holds the session state, streaming, errors, and composer status. It defaults to same-origin Eve routes such as `/eve/v1/session`.
|
|
14
14
|
|
|
15
15
|
For a guided setup, the [Guides](/docs/skills/eve-add-next) walk through the wiring step by step: [add a Next.js frontend to an existing Eve agent](/docs/skills/eve-add-next), or [add Eve to an existing Next.js app](/docs/skills/eve-add-agent).
|
|
16
16
|
|
|
17
|
-
For scripts, server-to-server calls, evals, tests, or custom clients that do not need framework UI state, use the [TypeScript
|
|
17
|
+
For scripts, server-to-server calls, evals, tests, or custom clients that do not need framework UI state, use the [TypeScript SDK](../client/overview) directly.
|
|
18
18
|
|
|
19
19
|
## Basic chat (React)
|
|
20
20
|
|
|
@@ -100,7 +100,7 @@ Assistant text, reasoning, tool calls, and tool results stream into `data` as th
|
|
|
100
100
|
|
|
101
101
|
## Human-in-the-loop prompts
|
|
102
102
|
|
|
103
|
-
Tools opt into approval with `needsApproval` on the [server side](
|
|
103
|
+
Tools opt into approval with `needsApproval` on the [server side](../../tools), and the model can also ask a question with `ask_question`. Either way the stream emits an `input.requested` event, and the pending request rides on a `dynamic-tool` part of the latest message at `part.toolMetadata?.eve?.inputRequest`. Read it, then answer through the same session with `send()`:
|
|
104
104
|
|
|
105
105
|
```tsx
|
|
106
106
|
const request = agent.data.messages
|
|
@@ -228,7 +228,7 @@ const agent = useEveAgent({
|
|
|
228
228
|
|
|
229
229
|
## What to read next
|
|
230
230
|
|
|
231
|
-
- [Sessions, runs & streaming](
|
|
232
|
-
- [Channels](
|
|
233
|
-
- [TypeScript
|
|
231
|
+
- [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming): the event stream and session cursor
|
|
232
|
+
- [Channels](../../channels/overview): the HTTP routes the hook talks to
|
|
233
|
+
- [TypeScript SDK](../client/overview): the lower-level client underneath the frontend hooks
|
|
234
234
|
- [Guides](/docs/skills/eve-add-next): step-by-step guides for wiring Eve into Next.js
|
|
@@ -61,7 +61,7 @@ With the plugin in `vite.config.ts`, components call [`useEveAgent`](./use-eve-a
|
|
|
61
61
|
</form>
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
Out of the box the plugin uses a framework default channel. To set the route auth policy yourself, add `agent/channels/eve.ts` and swap `none()` for a helper like `vercelOidc()` on protected apps. See [Channels](
|
|
64
|
+
Out of the box the plugin uses a framework default channel. To set the route auth policy yourself, add `agent/channels/eve.ts` and swap `none()` for a helper like `vercelOidc()` on protected apps. See [Channels](../../channels/overview) and [Auth & route protection](../auth-and-route-protection).
|
|
65
65
|
|
|
66
66
|
## Dev vs deploy topology
|
|
67
67
|
|
|
@@ -90,5 +90,5 @@ Out of the box the plugin uses a framework default channel. To set the route aut
|
|
|
90
90
|
## What to read next
|
|
91
91
|
|
|
92
92
|
- [`useEveAgent` (Svelte)](./use-eve-agent-svelte): the binding API
|
|
93
|
-
- [Auth & route protection](../
|
|
94
|
-
- [Deployment](../
|
|
93
|
+
- [Auth & route protection](../auth-and-route-protection)
|
|
94
|
+
- [Deployment](../deployment)
|
|
@@ -75,7 +75,7 @@ await agent.send({
|
|
|
75
75
|
|
|
76
76
|
## Human-in-the-loop prompts
|
|
77
77
|
|
|
78
|
-
A tool opts into approval with `needsApproval` ([Tools](
|
|
78
|
+
A tool opts into approval with `needsApproval` ([Tools](../../tools)). When one fires, the pending request rides along on a `dynamic-tool` part of the latest message. Read it, then answer with `agent.send({ inputResponses })`. This find-and-answer flow is identical across frameworks, so the full example lives in the [Frontend overview](./overview#human-in-the-loop-prompts).
|
|
79
79
|
|
|
80
80
|
## Stop, reset, and resume
|
|
81
81
|
|
|
@@ -108,4 +108,4 @@ const agent = useEveAgent({
|
|
|
108
108
|
|
|
109
109
|
- [SvelteKit](./sveltekit): Vite plugin setup
|
|
110
110
|
- [Frontend overview](./overview): the shared integration model
|
|
111
|
-
- [Sessions, runs & streaming](
|
|
111
|
+
- [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming)
|
|
@@ -87,7 +87,7 @@ async function onFileChange(event: Event) {
|
|
|
87
87
|
|
|
88
88
|
## Human-in-the-loop prompts
|
|
89
89
|
|
|
90
|
-
A tool opts into approval with `needsApproval` ([Tools](
|
|
90
|
+
A tool opts into approval with `needsApproval` ([Tools](../../tools)). When it triggers, the pending request shows up as a `dynamic-tool` part on the latest message. Read it and answer with `send({ inputResponses })`. That find-and-answer flow is the same across every framework, so the full example lives in the [Frontend overview](./overview#human-in-the-loop-prompts).
|
|
91
91
|
|
|
92
92
|
## Stop, reset, and resume
|
|
93
93
|
|
|
@@ -120,4 +120,4 @@ const agent = useEveAgent({
|
|
|
120
120
|
|
|
121
121
|
- [Nuxt](./nuxt): module setup
|
|
122
122
|
- [Frontend overview](./overview): the shared integration model
|
|
123
|
-
- [Sessions, runs & streaming](
|
|
123
|
+
- [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming)
|
|
@@ -149,6 +149,6 @@ Stream-event hooks and channel adapter event handlers are structurally identical
|
|
|
149
149
|
## What to read next
|
|
150
150
|
|
|
151
151
|
- [Tools](../tools)
|
|
152
|
-
- [Context control](
|
|
152
|
+
- [Context control](../concepts/context-control)
|
|
153
153
|
- [Session context](./session-context)
|
|
154
|
-
- [Sessions, runs & streaming](
|
|
154
|
+
- [Sessions, runs & streaming](../concepts/sessions-runs-and-streaming)
|
|
@@ -134,6 +134,8 @@ Per-turn usage tags are written on each step of a turn, accumulating cumulative
|
|
|
134
134
|
|
|
135
135
|
Tag writes are best-effort: a failure is logged once per process and then swallowed, so a broken tag emit never breaks the agent.
|
|
136
136
|
|
|
137
|
+
These tags power the **Agent Runs** tab in the Vercel dashboard. When you deploy on Vercel, the platform auto-detects `eve` as the framework and surfaces an Agent Runs view under your project's **Observability** tab, where you can browse sessions and drill into each conversation's trace — no `instrumentation.ts` required. The tab is currently gated per team; see [Deployment](./deployment#view-runs-in-the-dashboard) for enablement. Agent Runs is separate from the OpenTelemetry export above: use OTel when you want spans in Braintrust, Datadog, or another third-party backend.
|
|
138
|
+
|
|
137
139
|
## Debugging
|
|
138
140
|
|
|
139
141
|
`eve info` is the fastest way to see what Eve actually picked up: the active tools, skills, subagents, schedules, routes, and discovery diagnostics. Eve also writes inspectable artifacts under `.eve/`, kept even when discovery hits errors:
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"title": "
|
|
2
|
+
"title": "Guides",
|
|
3
3
|
"pages": [
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"dynamic-workflows",
|
|
4
|
+
"deployment",
|
|
5
|
+
"auth-and-route-protection",
|
|
6
|
+
"instrumentation",
|
|
8
7
|
"hooks",
|
|
9
8
|
"session-context",
|
|
10
9
|
"state",
|
|
10
|
+
"dynamic-capabilities",
|
|
11
|
+
"dynamic-workflows",
|
|
11
12
|
"remote-agents",
|
|
12
|
-
"auth-and-route-protection",
|
|
13
|
-
"security-model",
|
|
14
|
-
"deployment",
|
|
15
|
-
"instrumentation",
|
|
16
13
|
"dev-tui",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
14
|
+
"frontend",
|
|
15
|
+
"client"
|
|
19
16
|
]
|
|
20
17
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Session
|
|
2
|
+
title: "Session Context"
|
|
3
3
|
description: "Runtime helpers: ctx.session, ctx.getSandbox, ctx.getSkill, and defineState."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -144,6 +144,6 @@ This lifecycle is fully managed by the framework. Authored code only needs to us
|
|
|
144
144
|
## What to read next
|
|
145
145
|
|
|
146
146
|
- [State](./state)
|
|
147
|
-
- [Sessions, runs & streaming](
|
|
147
|
+
- [Sessions, runs & streaming](../concepts/sessions-runs-and-streaming)
|
|
148
148
|
- [Subagents](../subagents)
|
|
149
149
|
- [Skills](../skills)
|
|
@@ -58,5 +58,5 @@ Every [subagent](../subagents) starts with its own fresh state, whether it's a b
|
|
|
58
58
|
## What to read next
|
|
59
59
|
|
|
60
60
|
- Read state inside dynamic resolvers → [Dynamic capabilities](./dynamic-capabilities)
|
|
61
|
-
- How step durability works → [Execution model & durability](../
|
|
61
|
+
- How step durability works → [Execution model & durability](../concepts/execution-model-and-durability)
|
|
62
62
|
- The `ctx` accessors available alongside state → [Tools](../tools)
|
|
@@ -49,10 +49,10 @@ Instructions never run code. When you need typed executable behavior, reach for
|
|
|
49
49
|
|
|
50
50
|
## Dynamic instructions
|
|
51
51
|
|
|
52
|
-
Need the prompt resolved at runtime from session context (auth, tenant, channel)? Wrap `defineInstructions` in a `defineDynamic` resolver. See [Dynamic capabilities](./
|
|
52
|
+
Need the prompt resolved at runtime from session context (auth, tenant, channel)? Wrap `defineInstructions` in a `defineDynamic` resolver. See [Dynamic capabilities](./guides/dynamic-capabilities).
|
|
53
53
|
|
|
54
54
|
## What to read next
|
|
55
55
|
|
|
56
56
|
- [Tools](./tools): typed actions, the next capability to add
|
|
57
|
-
- [Context control](./
|
|
57
|
+
- [Context control](./concepts/context-control): all the levers for what the model sees
|
|
58
58
|
- [Skills](./skills): on-demand procedures, the counterpart to always-on instructions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Introduction"
|
|
3
|
-
description: "
|
|
3
|
+
description: "How an Eve agent is laid out as files, what runs when a message arrives, and the building blocks you add as it grows."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
Eve is a framework for building durable agents as ordinary files in a TypeScript project.
|
|
@@ -87,7 +87,7 @@ As the agent grows, each concern still has a predictable home:
|
|
|
87
87
|
| Path | Add it when you need... |
|
|
88
88
|
| ------------------------------- | ------------------------------------------------ |
|
|
89
89
|
| [`connections/`](./connections) | Tools from external MCP servers |
|
|
90
|
-
| [`hooks/`](./
|
|
90
|
+
| [`hooks/`](./guides/hooks) | Code that reacts to lifecycle and stream events |
|
|
91
91
|
| [`sandbox/`](./sandbox) | A controlled workspace for files and commands |
|
|
92
92
|
| [`subagents/`](./subagents) | Specialist agents the root agent can delegate to |
|
|
93
93
|
| [`schedules/`](./schedules) | Recurring or scheduled work |
|
|
@@ -99,4 +99,7 @@ The result stays readable before it runs: the directory tells you what the agent
|
|
|
99
99
|
|
|
100
100
|
- [Getting started](./getting-started): scaffold and run your first agent
|
|
101
101
|
- [Tools](./tools): the typed actions your agent calls
|
|
102
|
+
- [Instructions](./instructions): the always-on system prompt that shapes behavior
|
|
103
|
+
- [Channels](./channels/overview): reach the agent from Slack, Discord, or a web UI
|
|
104
|
+
- [Connections](./connections): pull in tools from external MCP servers
|
|
102
105
|
- [Project layout](./reference/project-layout): every authored slot under `agent/`
|
|
@@ -136,10 +136,10 @@ See [Evals](../evals/overview) for authoring evals.
|
|
|
136
136
|
4. `eve build` before shipping.
|
|
137
137
|
5. `eve start` to smoke-test the built output locally.
|
|
138
138
|
|
|
139
|
-
Related: [Project layout](./project-layout) · [instrumentation.ts](../
|
|
139
|
+
Related: [Project layout](./project-layout) · [instrumentation.ts](../guides/instrumentation).
|
|
140
140
|
|
|
141
141
|
## What to read next
|
|
142
142
|
|
|
143
143
|
- [Project layout](./project-layout): what `eve info` discovers
|
|
144
|
-
- [instrumentation.ts](../
|
|
145
|
-
- [Deployment](../
|
|
144
|
+
- [instrumentation.ts](../guides/instrumentation): tracing and the error catalog
|
|
145
|
+
- [Deployment](../guides/deployment): `eve build` and `eve start` in production
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Project
|
|
2
|
+
title: "Project Layout"
|
|
3
3
|
description: "Authored slots under agent/ and the path-derived naming rule."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -104,6 +104,10 @@ my-agent/
|
|
|
104
104
|
|
|
105
105
|
Prefer the nested layout. It keeps the app root separate from the authored surface.
|
|
106
106
|
|
|
107
|
+
## Why didn't Eve discover my file?
|
|
108
|
+
|
|
109
|
+
Run `eve info`. It lists the discovered surface and prints discovery diagnostics. From there, check that the file sits in the right authored slot (per the slot table above) and that the root-vs-subagent boundary is valid. Eve also writes inspectable artifacts under `.eve/` — see the debugging artifacts in [instrumentation.ts](../guides/instrumentation) and the [CLI](./cli) reference.
|
|
110
|
+
|
|
107
111
|
## What to read next
|
|
108
112
|
|
|
109
113
|
- [`agent.ts`](../agent-config): the runtime config at the root
|