eve 0.11.2 → 0.11.3
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 +11 -2
- package/README.md +11 -11
- package/bin/eve.d.ts +1 -1
- package/bin/eve.js +6 -6
- package/dist/src/channel/routes.d.ts +4 -4
- package/dist/src/channel/types.d.ts +2 -2
- package/dist/src/channel/websocket-upgrade-server.d.ts +3 -3
- package/dist/src/chunks/{use-eve-agent-CdETo3qQ.js → use-eve-agent-D9ZhQhyV.js} +2 -2
- package/dist/src/chunks/{use-eve-agent-ClyM-_UT.js → use-eve-agent-DFI0POM9.js} +2 -2
- package/dist/src/cli/banner.d.ts +1 -1
- package/dist/src/cli/banner.js +1 -1
- package/dist/src/cli/commands/channel-add-conflicts.js +1 -1
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/deploy.js +1 -1
- package/dist/src/cli/commands/info.js +1 -1
- package/dist/src/cli/commands/init-agent-instructions.md +1 -1
- package/dist/src/cli/commands/init-git.js +1 -1
- package/dist/src/cli/commands/init.d.ts +1 -1
- package/dist/src/cli/commands/link.js +1 -1
- package/dist/src/cli/commands/preconditions.d.ts +2 -2
- package/dist/src/cli/commands/preconditions.js +1 -1
- package/dist/src/cli/dev/environment.d.ts +1 -1
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-issues.d.ts +2 -0
- package/dist/src/cli/dev/tui/setup-issues.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +2 -2
- package/dist/src/cli/dev/tui/theme.d.ts +1 -1
- package/dist/src/cli/dev/tui/tui.d.ts +1 -1
- package/dist/src/cli/dev/url.d.ts +1 -1
- package/dist/src/cli/run.d.ts +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/cli/ui/output.d.ts +1 -1
- package/dist/src/client/client-error.d.ts +1 -1
- package/dist/src/client/client.d.ts +3 -3
- package/dist/src/client/eve-agent-store.d.ts +1 -1
- package/dist/src/client/eve-agent-store.js +1 -1
- package/dist/src/client/message-reducer-types.d.ts +3 -3
- package/dist/src/client/message-reducer.d.ts +3 -3
- package/dist/src/client/output-schema.d.ts +1 -1
- package/dist/src/client/reducer.d.ts +5 -5
- package/dist/src/client/session.d.ts +1 -1
- package/dist/src/client/types.d.ts +1 -1
- package/dist/src/client/url.d.ts +2 -2
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/compiled/@vercel/detect-agent/index.d.ts +1 -1
- package/dist/src/compiler/channel-instrumentation-types.js +1 -1
- package/dist/src/compiler/model-catalog.d.ts +1 -1
- package/dist/src/compiler/module-map.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-channel.js +1 -1
- package/dist/src/compiler/normalize-connection.js +1 -1
- package/dist/src/compiler/normalize-instructions.js +1 -1
- package/dist/src/compiler/normalize-sandbox.js +1 -1
- package/dist/src/compiler/normalize-schedule.js +1 -1
- package/dist/src/compiler/normalize-skill.js +1 -1
- package/dist/src/compiler/normalize-subagent.js +1 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/compiler/workspace-resources.js +1 -1
- package/dist/src/context/build-callback-context.js +1 -1
- package/dist/src/context/container.d.ts +4 -4
- package/dist/src/context/container.js +1 -1
- package/dist/src/discover/diagnostics.d.ts +1 -1
- package/dist/src/discover/project.d.ts +2 -2
- package/dist/src/discover/project.js +1 -1
- package/dist/src/evals/cli/eval-client.d.ts +1 -1
- package/dist/src/evals/define-eval.d.ts +1 -1
- package/dist/src/evals/runner/execute-eval.d.ts +1 -1
- package/dist/src/evals/runner/execute-task.d.ts +1 -1
- package/dist/src/evals/types.d.ts +6 -6
- package/dist/src/execution/durable-session-migrations/chain.js +1 -1
- package/dist/src/execution/sandbox/bash-tool.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-options.d.ts +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/development-prewarm.js +1 -1
- package/dist/src/execution/sandbox/ensure.js +1 -1
- package/dist/src/execution/sandbox/prewarm.js +1 -1
- package/dist/src/execution/session-callback-step.d.ts +1 -1
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/code-mode-lifecycle.d.ts +1 -1
- package/dist/src/harness/emission.d.ts +1 -1
- package/dist/src/harness/runtime-actions.d.ts +1 -1
- package/dist/src/internal/application/cache-metadata.d.ts +2 -2
- package/dist/src/internal/application/compiled-artifacts.js +2 -2
- package/dist/src/internal/application/package.d.ts +7 -7
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-module-bundle.js +1 -1
- package/dist/src/internal/helpers/markdown.js +1 -1
- package/dist/src/internal/instrumentation.d.ts +1 -1
- package/dist/src/internal/nitro/host/build-application.d.ts +1 -1
- package/dist/src/internal/nitro/host/channel-routes.d.ts +3 -3
- package/dist/src/internal/nitro/host/configure-nitro-routes.d.ts +1 -1
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.d.ts +1 -1
- package/dist/src/internal/nitro/host/cron-handler-route.d.ts +3 -3
- package/dist/src/internal/nitro/host/nitro-bundler-config.d.ts +1 -1
- package/dist/src/internal/nitro/host/optional-engine-dependency-plugin.d.ts +2 -2
- package/dist/src/internal/nitro/host/schedule-task-routes.d.ts +2 -2
- package/dist/src/internal/nitro/host/start-development-server.d.ts +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +1 -1
- package/dist/src/internal/nitro/host/start-production-server.d.ts +1 -1
- package/dist/src/internal/nitro/host/start-production-server.js +2 -2
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
- package/dist/src/internal/nitro/routes/health.d.ts +1 -1
- package/dist/src/internal/nitro/routes/info.d.ts +1 -1
- package/dist/src/internal/nitro/routes/runtime-artifacts.js +1 -1
- package/dist/src/internal/nitro/routes/schedule-task.d.ts +1 -1
- package/dist/src/internal/package-name.d.ts +1 -1
- package/dist/src/internal/vercel-agent-summary.d.ts +6 -6
- package/dist/src/internal/workflow/builtins.d.ts +3 -3
- package/dist/src/internal/workflow-bundle/nitro-step-entry.js +1 -1
- package/dist/src/internal/workflow-bundle/vercel-workflow-output.d.ts +7 -7
- package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +4 -4
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/message.d.ts +2 -2
- package/dist/src/protocol/routes.d.ts +3 -3
- package/dist/src/public/agents/auth.d.ts +1 -1
- package/dist/src/public/channels/auth.d.ts +1 -1
- package/dist/src/public/channels/discord/api.d.ts +2 -2
- package/dist/src/public/channels/discord/discordChannel.d.ts +2 -2
- package/dist/src/public/channels/discord/hitl.d.ts +4 -4
- package/dist/src/public/channels/discord/verify.d.ts +1 -1
- package/dist/src/public/channels/eve.d.ts +5 -5
- package/dist/src/public/channels/github/api.d.ts +1 -1
- package/dist/src/public/channels/github/defaults.d.ts +1 -1
- package/dist/src/public/channels/github/inbound.d.ts +1 -1
- package/dist/src/public/channels/index.d.ts +2 -2
- package/dist/src/public/channels/linear/auth.d.ts +1 -1
- package/dist/src/public/channels/linear/hitl.d.ts +4 -4
- package/dist/src/public/channels/linear/inbound.d.ts +1 -1
- package/dist/src/public/channels/linear/verify.d.ts +1 -1
- package/dist/src/public/channels/slack/constants.d.ts +1 -1
- package/dist/src/public/channels/teams/api.d.ts +4 -4
- package/dist/src/public/channels/teams/hitl.d.ts +4 -4
- package/dist/src/public/channels/teams/limits.d.ts +3 -3
- package/dist/src/public/channels/teams/verify.d.ts +2 -2
- package/dist/src/public/channels/telegram/api.d.ts +1 -1
- package/dist/src/public/channels/telegram/hitl.d.ts +3 -3
- package/dist/src/public/channels/telegram/verify.d.ts +1 -1
- package/dist/src/public/channels/twilio/api.d.ts +1 -1
- package/dist/src/public/context/index.d.ts +1 -1
- package/dist/src/public/definitions/defineChannel.d.ts +2 -2
- package/dist/src/public/definitions/hook.d.ts +1 -1
- package/dist/src/public/definitions/remote-agent.d.ts +5 -5
- package/dist/src/public/definitions/sandbox.d.ts +1 -1
- package/dist/src/public/definitions/source.d.ts +2 -2
- package/dist/src/public/definitions/state.d.ts +2 -2
- package/dist/src/public/definitions/state.js +1 -1
- package/dist/src/public/instrumentation/index.d.ts +3 -3
- package/dist/src/public/next/index.d.ts +12 -12
- package/dist/src/public/next/index.js +1 -1
- package/dist/src/public/next/server.js +1 -1
- package/dist/src/public/next/vercel-output-config.js +1 -1
- package/dist/src/public/nuxt/dev-server.d.ts +2 -2
- package/dist/src/public/nuxt/dev-server.js +1 -1
- package/dist/src/public/nuxt/module.d.ts +10 -10
- package/dist/src/public/nuxt/routing.d.ts +6 -6
- package/dist/src/public/nuxt/routing.js +1 -1
- package/dist/src/public/nuxt/vercel-json.d.ts +2 -2
- package/dist/src/public/sandbox/backends/just-bash.d.ts +1 -1
- package/dist/src/public/sandbox/backends/microsandbox.d.ts +1 -1
- package/dist/src/public/sandbox/backends/vercel.d.ts +1 -1
- package/dist/src/public/sandbox/docker-sandbox.d.ts +1 -1
- package/dist/src/public/sandbox/just-bash-sandbox.d.ts +1 -1
- package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +3 -3
- package/dist/src/public/sandbox/vercel-sandbox.d.ts +2 -2
- package/dist/src/public/sveltekit/dev-server.d.ts +2 -2
- package/dist/src/public/sveltekit/dev-server.js +1 -1
- package/dist/src/public/sveltekit/index.d.ts +11 -11
- package/dist/src/public/sveltekit/routing.d.ts +5 -5
- package/dist/src/public/sveltekit/routing.js +1 -1
- package/dist/src/public/sveltekit/vercel-json.d.ts +2 -2
- package/dist/src/public/tool-result-narrowing.js +1 -1
- package/dist/src/public/types/json.d.ts +1 -1
- package/dist/src/react/use-eve-agent.d.ts +8 -8
- package/dist/src/runtime/agent/bootstrap-model.js +1 -1
- package/dist/src/runtime/agent/bootstrap.d.ts +1 -1
- package/dist/src/runtime/agent/bootstrap.js +1 -1
- package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
- package/dist/src/runtime/agent/resolve-model.js +1 -1
- package/dist/src/runtime/attributes/emit.d.ts +2 -2
- package/dist/src/runtime/connections/callback-route.d.ts +1 -1
- package/dist/src/runtime/connections/principal.js +1 -1
- package/dist/src/runtime/connections/scoped-authorization.d.ts +1 -1
- package/dist/src/runtime/connections/types.d.ts +4 -4
- package/dist/src/runtime/framework-tools/final-output.d.ts +1 -1
- package/dist/src/runtime/governance/auth/http-basic.d.ts +1 -1
- package/dist/src/runtime/governance/auth/token-claims.d.ts +1 -1
- package/dist/src/runtime/governance/auth/types.d.ts +1 -1
- package/dist/src/runtime/loaders/artifact-paths.d.ts +1 -1
- package/dist/src/runtime/loaders/compile-metadata.js +1 -1
- package/dist/src/runtime/loaders/manifest.js +1 -1
- package/dist/src/runtime/loaders/module-map.js +1 -1
- package/dist/src/runtime/prompt/compose.js +1 -1
- package/dist/src/runtime/resolve-channel.js +1 -1
- package/dist/src/runtime/schedules/register.js +1 -1
- package/dist/src/runtime/sessions/auth.d.ts +1 -1
- package/dist/src/runtime/sessions/runtime-session.d.ts +1 -1
- package/dist/src/runtime/types.d.ts +1 -1
- package/dist/src/runtime/workspace/types.d.ts +1 -1
- package/dist/src/services/dev-client/request-headers.d.ts +2 -2
- package/dist/src/services/dev-client/vercel-auth-error.d.ts +1 -1
- package/dist/src/services/inspect-application.d.ts +1 -1
- package/dist/src/setup/boxes/add-channels.d.ts +1 -1
- package/dist/src/setup/boxes/add-channels.js +1 -1
- package/dist/src/setup/boxes/deploy-project.js +1 -1
- package/dist/src/setup/boxes/resolve-target.d.ts +2 -2
- package/dist/src/setup/boxes/scaffold.d.ts +4 -4
- package/dist/src/setup/boxes/scaffold.js +1 -1
- package/dist/src/setup/channel-add-conflicts.js +1 -1
- package/dist/src/setup/cli/rail-log.d.ts +1 -1
- package/dist/src/setup/flows/model.d.ts +3 -5
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/node-engine.d.ts +5 -5
- package/dist/src/setup/node-engine.js +1 -1
- package/dist/src/setup/onboarding.d.ts +2 -2
- package/dist/src/setup/primitives/open-url.d.ts +1 -1
- package/dist/src/setup/primitives/pm/pnpm.js +1 -1
- package/dist/src/setup/primitives/pm/run.d.ts +1 -1
- package/dist/src/setup/primitives/pm/types.d.ts +1 -1
- package/dist/src/setup/scaffold/connections/catalog.d.ts +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.d.ts +2 -2
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.d.ts +5 -5
- package/dist/src/setup/scaffold/create/project.js +3 -3
- package/dist/src/setup/scaffold/create/web-template.d.ts +2 -2
- package/dist/src/setup/scaffold/create/web-template.js +2 -2
- package/dist/src/setup/scaffold/update/package-json.d.ts +1 -1
- package/dist/src/setup/slack-connect-lifecycle.d.ts +2 -2
- package/dist/src/setup/slack-connect-lifecycle.js +1 -1
- package/dist/src/setup/slackbot.d.ts +1 -1
- package/dist/src/setup/slackbot.js +1 -1
- package/dist/src/setup/validate-gateway-key.d.ts +1 -1
- package/dist/src/setup/vercel-project.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +15 -15
- package/dist/src/shared/code-mode.d.ts +3 -3
- package/dist/src/shared/json-schema.d.ts +1 -1
- package/dist/src/shared/model-endpoint-status.d.ts +2 -2
- package/dist/src/shared/sandbox-backend.d.ts +4 -4
- package/dist/src/shared/sandbox-definition.d.ts +3 -3
- package/dist/src/shared/sandbox-network-policy.d.ts +1 -1
- package/dist/src/shared/sandbox-session.d.ts +2 -2
- package/dist/src/shared/skill-package.d.ts +1 -1
- package/dist/src/shared/skill-package.js +1 -1
- package/dist/src/shared/tool-definition.d.ts +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.d.ts +7 -7
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.d.ts +7 -7
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/README.md +10 -10
- package/docs/agent-config.md +2 -2
- package/docs/channels/custom.mdx +5 -5
- package/docs/channels/discord.mdx +3 -3
- package/docs/channels/eve.mdx +7 -7
- package/docs/channels/linear.mdx +6 -6
- package/docs/channels/overview.mdx +11 -11
- package/docs/channels/slack.mdx +4 -4
- package/docs/channels/teams.mdx +2 -2
- package/docs/channels/telegram.mdx +3 -3
- package/docs/channels/twilio.mdx +1 -1
- package/docs/concepts/context-control.md +5 -5
- package/docs/concepts/default-harness.md +2 -2
- package/docs/concepts/execution-model-and-durability.md +9 -9
- package/docs/concepts/security-model.md +9 -9
- package/docs/concepts/sessions-runs-and-streaming.md +3 -3
- package/docs/connections.mdx +11 -11
- package/docs/evals/judge.mdx +2 -2
- package/docs/evals/overview.mdx +2 -2
- package/docs/evals/reporters.mdx +2 -2
- package/docs/getting-started.mdx +10 -10
- package/docs/guides/auth-and-route-protection.md +6 -6
- package/docs/guides/client/continuations.mdx +3 -3
- package/docs/guides/client/output-schema.mdx +1 -1
- package/docs/guides/client/overview.mdx +5 -5
- package/docs/guides/client/streaming.mdx +1 -1
- package/docs/guides/deployment.md +7 -7
- package/docs/guides/dev-tui.md +2 -2
- package/docs/guides/frontend/nextjs.mdx +13 -13
- package/docs/guides/frontend/nuxt.mdx +7 -7
- package/docs/guides/frontend/overview.mdx +12 -12
- package/docs/guides/frontend/sveltekit.mdx +7 -7
- package/docs/guides/frontend/use-eve-agent-svelte.mdx +6 -6
- package/docs/guides/frontend/use-eve-agent-vue.mdx +6 -6
- package/docs/guides/hooks.md +2 -2
- package/docs/guides/instrumentation.md +12 -12
- package/docs/guides/remote-agents.md +4 -4
- package/docs/guides/session-context.md +4 -4
- package/docs/guides/state.md +1 -1
- package/docs/instructions.mdx +4 -4
- package/docs/introduction.mdx +12 -12
- package/docs/reference/cli.md +5 -5
- package/docs/reference/project-layout.md +4 -4
- package/docs/responsible-use.md +3 -3
- package/docs/sandbox.mdx +8 -8
- package/docs/schedules.mdx +1 -1
- package/docs/skills.mdx +4 -4
- package/docs/subagents.mdx +3 -3
- package/docs/tools/human-in-the-loop.md +10 -10
- package/docs/tools/overview.mdx +10 -10
- package/docs/tutorial/connect-a-warehouse.mdx +3 -3
- package/docs/tutorial/first-agent.mdx +2 -2
- package/docs/tutorial/how-it-runs.mdx +2 -2
- package/docs/tutorial/query-sample-data.mdx +1 -1
- package/docs/tutorial/ship-it.mdx +4 -4
- package/package.json +1 -1
package/docs/introduction.mdx
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Introduction"
|
|
3
|
-
description: "How an
|
|
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.
|
|
7
7
|
|
|
8
|
-
Instead of one large configuration object, each part of your agent gets a clear home. Instructions go in one file, tools in one folder, channels in another.
|
|
8
|
+
Instead of one large configuration object, each part of your agent gets a clear home. Instructions go in one file, tools in one folder, channels in another. eve discovers that structure and turns it into an agent that runs locally, serves HTTP, connects to other platforms, and keeps working across many turns.
|
|
9
9
|
|
|
10
10
|
<Callout>
|
|
11
|
-
|
|
11
|
+
eve is currently in beta and subject to the [Vercel beta
|
|
12
12
|
terms](https://vercel.com/docs/release-phases/public-beta-agreement); the framework, APIs,
|
|
13
13
|
documentation, and behavior may change before general availability.
|
|
14
14
|
</Callout>
|
|
15
15
|
|
|
16
|
-
## An
|
|
16
|
+
## An eve project at a glance
|
|
17
17
|
|
|
18
|
-
A small
|
|
18
|
+
A small eve app looks like this:
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
21
|
my-agent/
|
|
@@ -31,7 +31,7 @@ my-agent/
|
|
|
31
31
|
└── slack.ts
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
You can understand most
|
|
34
|
+
You can understand most eve projects by reading that tree:
|
|
35
35
|
|
|
36
36
|
- `instructions.md` tells the agent who it is and how it should behave.
|
|
37
37
|
- [`agent.ts`](./agent-config) chooses the model and configures runtime options.
|
|
@@ -43,7 +43,7 @@ Start with only `instructions.md` and `agent.ts`. Add the other folders when the
|
|
|
43
43
|
|
|
44
44
|
## The files are the interface
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
eve is [filesystem-first](./reference/project-layout). A file's location says what it does, and its path usually gives it a name. For example, this file:
|
|
47
47
|
|
|
48
48
|
```text
|
|
49
49
|
agent/tools/get_weather.ts
|
|
@@ -64,17 +64,17 @@ export default defineTool({
|
|
|
64
64
|
});
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
There is no separate registry to keep in sync. Add the file and
|
|
67
|
+
There is no separate registry to keep in sync. Add the file and eve discovers it; move or rename it and its identity moves with it. See [Tools](./tools) for the complete API.
|
|
68
68
|
|
|
69
69
|
## What happens when a message arrives
|
|
70
70
|
|
|
71
|
-
The same flow runs whether a message comes from a web app, the terminal, or Slack.
|
|
71
|
+
The same flow runs whether a message comes from a web app, the terminal, or Slack. eve turns the platform input into a message, gives the model its instructions, skills, tools, and conversation history, runs the work (calling tools and subagents as needed), saves the session and streams events, then delivers the result back in the form the platform expects.
|
|
72
72
|
|
|
73
73
|
That keeps agent behavior portable. Your weather tool does not need to know whether the question came from a browser or from Slack.
|
|
74
74
|
|
|
75
75
|
## Durable by default
|
|
76
76
|
|
|
77
|
-
An
|
|
77
|
+
An eve session is more than one request and one response. It can:
|
|
78
78
|
|
|
79
79
|
- Stream progress while work is happening
|
|
80
80
|
- Call tools and subagents
|
|
@@ -82,7 +82,7 @@ An Eve session is more than one request and one response. It can:
|
|
|
82
82
|
- Resume after that answer arrives
|
|
83
83
|
- Keep durable state across turns
|
|
84
84
|
|
|
85
|
-
Under the hood,
|
|
85
|
+
Under the hood, eve uses the open-source [Workflow SDK](https://workflow-sdk.dev) to make sessions durable, resumable, and crash-safe. eve handles that machinery so your tools focus on the work itself.
|
|
86
86
|
|
|
87
87
|
## Grow the project by adding capabilities
|
|
88
88
|
|
package/docs/reference/cli.md
CHANGED
|
@@ -65,11 +65,11 @@ Useful artifacts written under `.eve/` (preserved even on partial failure):
|
|
|
65
65
|
|
|
66
66
|
| Artifact | Description |
|
|
67
67
|
| ---------------------------------------------- | ---------------------------------------------------- |
|
|
68
|
-
| `.eve/discovery/agent-discovery-manifest.json` | What
|
|
68
|
+
| `.eve/discovery/agent-discovery-manifest.json` | What eve found on disk |
|
|
69
69
|
| `.eve/discovery/diagnostics.json` | Authored-shape errors and warnings |
|
|
70
|
-
| `.eve/compile/compiled-agent-manifest.json` | The serialized authored surface
|
|
70
|
+
| `.eve/compile/compiled-agent-manifest.json` | The serialized authored surface eve loads at runtime |
|
|
71
71
|
| `.eve/compile/compile-metadata.json` | Build-time metadata and paths |
|
|
72
|
-
| `.eve/compile/module-map.mjs` | Compiled module entrypoints
|
|
72
|
+
| `.eve/compile/module-map.mjs` | Compiled module entrypoints eve imports at runtime |
|
|
73
73
|
|
|
74
74
|
## `eve start`
|
|
75
75
|
|
|
@@ -109,7 +109,7 @@ Pass a bare URL as the only argument and the UI connects to that server instead
|
|
|
109
109
|
| `--context-size <tokens>` | number | none | Model context window size, shown as a usage percentage |
|
|
110
110
|
| `--logs <mode>` | enum | `stderr` | Server/agent logs to show: `all` \| `stderr` \| `sandbox` \| `none` |
|
|
111
111
|
|
|
112
|
-
Local dev writes the active server process ID to `.eve/dev-process.pid`. If another `eve dev` starts for the same agent while that process is still running,
|
|
112
|
+
Local dev writes the active server process ID to `.eve/dev-process.pid`. If another `eve dev` starts for the same agent while that process is still running, eve exits with a message that includes the command to stop the existing server.
|
|
113
113
|
|
|
114
114
|
Local dev keeps immutable runtime source snapshots under `.eve/dev-runtime/snapshots/` so in-flight sessions hold a consistent code revision while new prompts pick up rebuilds. On startup, `eve dev` prunes stale runtime snapshots and old local sandbox templates in the background. For manual cleanup, stop `eve dev` and delete `.eve/dev-runtime/snapshots/` or `.eve/sandbox-cache/local/templates/`.
|
|
115
115
|
|
|
@@ -119,7 +119,7 @@ Local dev keeps immutable runtime source snapshots under `.eve/dev-runtime/snaps
|
|
|
119
119
|
eve link
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
Links the current directory to an existing Vercel project. You select a team and then a project, and
|
|
122
|
+
Links the current directory to an existing Vercel project. You select a team and then a project, and eve pulls the project's environment so an AI Gateway credential (`VERCEL_OIDC_TOKEN` or `AI_GATEWAY_API_KEY`) lands in `.env.local`, then verifies one actually did. Running it again re-links: the pickers always run, and the new choice wins. The command is interactive only; in CI, use `vercel link --project <name> --yes` instead. A running `eve dev` reloads env files automatically, so you don't need to restart after the pull.
|
|
123
123
|
|
|
124
124
|
## `eve deploy`
|
|
125
125
|
|
|
@@ -3,7 +3,7 @@ title: "Project Layout"
|
|
|
3
3
|
description: "Authored slots under agent/ and the path-derived naming rule."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
eve builds an agent by walking the filesystem under `agent/`. Each directory is an authored slot, and the slot a file lands in determines how eve loads it.
|
|
7
7
|
|
|
8
8
|
## Naming rule
|
|
9
9
|
|
|
@@ -64,7 +64,7 @@ The Subagents column states whether a local subagent (`subagents/<id>/`) can aut
|
|
|
64
64
|
|
|
65
65
|
## What reaches the runtime workspace
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
eve does not mount the whole tree. Only two sources land in the sandbox workspace:
|
|
68
68
|
|
|
69
69
|
- `skills/` files → `/workspace/skills/...`
|
|
70
70
|
- `agent/sandbox/workspace/**` → `/workspace/...` at session bootstrap
|
|
@@ -111,9 +111,9 @@ my-agent/
|
|
|
111
111
|
|
|
112
112
|
Prefer the nested layout. It keeps the app root separate from the authored surface.
|
|
113
113
|
|
|
114
|
-
## Why didn't
|
|
114
|
+
## Why didn't eve discover my file?
|
|
115
115
|
|
|
116
|
-
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.
|
|
116
|
+
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.
|
|
117
117
|
|
|
118
118
|
## What to read next
|
|
119
119
|
|
package/docs/responsible-use.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Responsible Use"
|
|
3
|
-
description: "Deployer responsibility and safeguards to review before using
|
|
3
|
+
description: "Deployer responsibility and safeguards to review before using eve with sensitive, regulated, or production data."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
As the deployer, it is your responsibility to ensure your agent complies with applicable laws.
|
|
7
7
|
|
|
8
8
|
You are responsible for configuring approval policies, tool restrictions, connection scopes, route/session authorization, sandbox controls, telemetry exports, and other safeguards appropriate for your use case.
|
|
9
9
|
|
|
10
|
-
Before using
|
|
10
|
+
Before using eve with non-public, sensitive, regulated, or production data, review which default tools, custom tools, MCP tools, shell/file/web tools, connected services, subagents, schedules, and external actions are available to the agent.
|
|
11
11
|
|
|
12
12
|
Require human approval or other safeguards for sensitive, irreversible, regulated, financial, healthcare, employment, housing, legal, safety-impacting, user-impacting, or external side-effecting actions.
|
|
13
13
|
|
|
14
|
-
Unless you configure stricter controls,
|
|
14
|
+
Unless you configure stricter controls, eve agents may operate with permissive settings, including tool execution without human approval where approval is omitted and sandbox network egress that is not deny-all. Do not rely on model behavior alone to prevent sensitive or irreversible actions.
|
package/docs/sandbox.mdx
CHANGED
|
@@ -3,7 +3,7 @@ title: "Sandbox"
|
|
|
3
3
|
description: "The agent's isolated bash environment, including built-in file tools, a seeded /workspace, backends, lifecycle, and network policy."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The sandbox is the agent's isolated bash environment: a filesystem rooted at `/workspace` where it can run shell commands, execute scripts, and read or write files without ever touching your app runtime. Every
|
|
6
|
+
The sandbox is the agent's isolated bash environment: a filesystem rooted at `/workspace` where it can run shell commands, execute scripts, and read or write files without ever touching your app runtime. Every eve agent has exactly one. The built-in `bash`, `read_file`, `write_file`, `glob`, and `grep` tools already target it, and your authored code can too.
|
|
7
7
|
|
|
8
8
|
A working sandbox exists by default, with nothing to author. Override it only to add setup, seed files, pick a backend, or lock down the network.
|
|
9
9
|
|
|
@@ -82,7 +82,7 @@ agent/sandbox/
|
|
|
82
82
|
scripts/run.sh ← lands at /workspace/scripts/run.sh
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
Every file under `workspace/` mirrors into the sandbox cwd with its structure intact, and
|
|
85
|
+
Every file under `workspace/` mirrors into the sandbox cwd with its structure intact, and eve lists the top-level entries to the model in the prompt automatically. One subtree is off limits. Skill discovery already seeds skill files under `/workspace/skills/`, so authoring `agent/sandbox/workspace/skills/...` is rejected; put those under `agent/skills/` instead.
|
|
86
86
|
|
|
87
87
|
## Overriding the sandbox
|
|
88
88
|
|
|
@@ -112,7 +112,7 @@ export default defineSandbox({
|
|
|
112
112
|
|
|
113
113
|
## Backends
|
|
114
114
|
|
|
115
|
-
The backend decides where the sandbox runs.
|
|
115
|
+
The backend decides where the sandbox runs. eve ships four pinned factories from nested `eve/sandbox/*` imports plus an availability-aware default from `eve/sandbox`:
|
|
116
116
|
|
|
117
117
|
| Backend | Runs the sandbox |
|
|
118
118
|
| ------------------ | ---------------------------------------------------------------------------------------------- |
|
|
@@ -124,7 +124,7 @@ The backend decides where the sandbox runs. Eve ships four pinned factories from
|
|
|
124
124
|
|
|
125
125
|
Configuring a pinned factory uses that backend unconditionally. `docker()` always requires a reachable Docker daemon, and `vercel()` always creates hosted sandboxes (including from local dev, with Vercel credentials).
|
|
126
126
|
|
|
127
|
-
With `backend` omitted,
|
|
127
|
+
With `backend` omitted, eve uses `defaultBackend()`, which resolves on first use in priority order:
|
|
128
128
|
|
|
129
129
|
1. **Vercel Sandbox** when deploying on Vercel (`process.env.VERCEL` is set), since local container/VM runtimes can't run there.
|
|
130
130
|
2. **Docker** when a daemon is reachable through a Docker-compatible `docker` CLI (Docker Desktop, OrbStack, Colima, Podman via its docker-compatible CLI; override the binary with `EVE_DOCKER_PATH`).
|
|
@@ -147,11 +147,11 @@ export default defineSandbox({
|
|
|
147
147
|
|
|
148
148
|
### Docker
|
|
149
149
|
|
|
150
|
-
`docker()` drives the Docker CLI directly. The default base image is `ghcr.io/vercel/eve:latest`,
|
|
150
|
+
`docker()` drives the Docker CLI directly. The default base image is `ghcr.io/vercel/eve:latest`, eve's published sandbox runtime image. eve creates `/workspace` and verifies Bash during framework setup, before authored bootstrap code runs. Configure it through `docker({ image, env, pullPolicy, networkPolicy })`, and install authored runtime tools in sandbox bootstrap or provide them through a custom image. Templates are committed as local Docker images and reused across sessions when the sandbox source, seed files, `revalidationKey`, and Docker backend options still match. Sessions run as long-lived containers whose filesystems persist `/workspace` changes across turns for the same durable session. `eve dev` prunes stale template images in the background.
|
|
151
151
|
|
|
152
152
|
### microsandbox
|
|
153
153
|
|
|
154
|
-
`microsandbox()` runs each sandbox in a lightweight local VM with snapshot-backed templates, a `vercel-sandbox` user, and a firewall capable of domain-level network policies and credential brokering. It is the closest local match to hosted Vercel Sandbox. The default base image is `ghcr.io/vercel/eve:latest`,
|
|
154
|
+
`microsandbox()` runs each sandbox in a lightweight local VM with snapshot-backed templates, a `vercel-sandbox` user, and a firewall capable of domain-level network policies and credential brokering. It is the closest local match to hosted Vercel Sandbox. The default base image is `ghcr.io/vercel/eve:latest`, eve's published sandbox runtime image. During framework setup, before authored bootstrap code runs, eve verifies Bash and creates `/workspace` and the sandbox user. Install authored runtime tools in sandbox bootstrap or provide them through a custom image. Supported hosts are macOS on Apple Silicon, or Linux (glibc) with KVM. The `microsandbox` npm package and its VM runtime are not bundled with eve, so `eve dev` installs both automatically when missing (disable with `setup: { autoInstall: false }`); production processes fail with actionable install errors instead.
|
|
155
155
|
|
|
156
156
|
### just-bash
|
|
157
157
|
|
|
@@ -163,7 +163,7 @@ You can also write your own backend. A `SandboxBackend` is an object with a `nam
|
|
|
163
163
|
|
|
164
164
|
There are two hooks, scoped differently:
|
|
165
165
|
|
|
166
|
-
- **`bootstrap({ use })`** is template-scoped and runs once when the template is built. Put reusable setup here that every later session inherits, such as cloning a baseline repo, installing dependencies, or seeding files. Call `use()` to get a `SandboxSession`. Only template filesystem state and supported backend metadata carry into later sessions; config like network policy does not. If external inputs affect what bootstrap produces, set `revalidationKey: () => string` so
|
|
166
|
+
- **`bootstrap({ use })`** is template-scoped and runs once when the template is built. Put reusable setup here that every later session inherits, such as cloning a baseline repo, installing dependencies, or seeding files. Call `use()` to get a `SandboxSession`. Only template filesystem state and supported backend metadata carry into later sessions; config like network policy does not. If external inputs affect what bootstrap produces, set `revalidationKey: () => string` so eve knows when to rebuild the template (authored sandbox source and seed contents are already tracked for you).
|
|
167
167
|
- **`onSession({ use, ctx })`** is durable-session-scoped and runs once per session. Put per-session setup here, including network policy, resources, timeout, per-user credentials, and one-time markers. Because it runs inside the active runtime context, it can read `ctx.session` and derive the current principal without baking credentials into the template. Call `use(opts?)` to get a `SandboxSession`; `opts` flow to the backend's update path after create.
|
|
168
168
|
|
|
169
169
|
If you require a network policy or other configuration for every session, configure it on the backend factory or in `onSession`; do not rely on bootstrap-only configuration.
|
|
@@ -183,7 +183,7 @@ export default defineSandbox({
|
|
|
183
183
|
});
|
|
184
184
|
```
|
|
185
185
|
|
|
186
|
-
Sessions are persistent, and how the underlying runtime idles out depends on the backend. On the Vercel backend, the VM times out after a period of inactivity (default 30 minutes);
|
|
186
|
+
Sessions are persistent, and how the underlying runtime idles out depends on the backend. On the Vercel backend, the VM times out after a period of inactivity (default 30 minutes); eve preserves the filesystem and resumes the sandbox on the next message as if nothing happened, even days later. The Docker backend keeps a long-lived container per durable session and persists `/workspace` across turns without that timeout, and the just-bash backend stores its virtual filesystem under `.eve/sandbox-cache/`. In every case, `/workspace` survives between turns for the same session.
|
|
187
187
|
|
|
188
188
|
## Network policy
|
|
189
189
|
|
package/docs/schedules.mdx
CHANGED
|
@@ -31,7 +31,7 @@ interface ScheduleHandlerArgs {
|
|
|
31
31
|
|
|
32
32
|
## Markdown form (fire-and-forget)
|
|
33
33
|
|
|
34
|
-
This is the minimal schedule.
|
|
34
|
+
This is the minimal schedule. eve runs the agent on the prompt and throws away the output, though the agent can still call tools, write to backends, and log along the way. We call this task mode. A task-mode session runs to completion or fails, and cannot park to wait for a person or an OAuth sign-in.
|
|
35
35
|
|
|
36
36
|
```ts title="agent/schedules/heartbeat.ts"
|
|
37
37
|
import { defineSchedule } from "eve/schedules";
|
package/docs/skills.mdx
CHANGED
|
@@ -3,11 +3,11 @@ title: "Skills"
|
|
|
3
3
|
description: "Author load-on-demand procedures the model pulls into context with load_skill."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
A skill is a model-loadable procedure that follows the `SKILL.md` convention. It is a markdown document, optionally a packaged directory with supporting files, that the model pulls into context on demand rather than carrying on every turn.
|
|
6
|
+
A skill is a model-loadable procedure that follows the `SKILL.md` convention. It is a markdown document, optionally a packaged directory with supporting files, that the model pulls into context on demand rather than carrying on every turn. eve advertises each skill's description, and the model loads the full body only when a turn calls for it. This is progressive disclosure, the same model the broader Agent Skills standard uses, so a skill authored against that standard ports over as-is.
|
|
7
7
|
|
|
8
8
|
## How loading works
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
eve scans the files under `agent/skills/` and exposes each one's description to the model alongside a framework-owned `load_skill` tool. When a request matches a skill's description (or you name the skill outright), the model calls `load_skill`, and eve appends that skill's markdown to the active turn's context.
|
|
11
11
|
|
|
12
12
|
The description is a routing hint, not a label. Write it as the task that should trigger activation:
|
|
13
13
|
|
|
@@ -25,7 +25,7 @@ The smallest skill is a flat markdown file. The content is the procedure, and th
|
|
|
25
25
|
Use the weather tool before answering forecast or temperature questions.
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
A flat markdown skill can skip the `description` frontmatter. When it does,
|
|
28
|
+
A flat markdown skill can skip the `description` frontmatter. When it does, eve advertises the first non-empty, non-code-fence line of the body with any leading `#`, `>`, `*`, or `-` marker stripped. If the body has no such line, eve falls back to the literal `Instructions for the <name> skill.`, which is a weak routing hint, so add a `description` when you want the model to route on intent.
|
|
29
29
|
|
|
30
30
|
A packaged skill is a directory with a `SKILL.md` plus sibling files like `references/`, `assets/`, and `scripts/`. The packaged `SKILL.md` must carry `description` frontmatter; it has no filename slug to fall back on.
|
|
31
31
|
|
|
@@ -53,7 +53,7 @@ export default defineSkill({
|
|
|
53
53
|
});
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
eve generates `SKILL.md` from `markdown`, and each `files` entry becomes a package-relative sibling. Start with plain markdown and move to `defineSkill` only when you hit its limits.
|
|
57
57
|
|
|
58
58
|
## Skills are scoped per agent
|
|
59
59
|
|
package/docs/subagents.mdx
CHANGED
|
@@ -75,7 +75,7 @@ The built-in `agent` tool is the exception. Its children share the parent's sand
|
|
|
75
75
|
|
|
76
76
|
## What the parent sees
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
eve lowers every subagent (built-in copy, declared, or [remote](./guides/remote-agents)) into a model-visible tool with the same `{ message, outputSchema? }` shape. The parent packs `message` with everything the child needs, since the child never sees the parent's history. Set `outputSchema` to run the child in task mode, returning structured output as the tool result.
|
|
79
79
|
|
|
80
80
|
A declared subagent's tool name is the bare path-derived name, with no prefix. `agent/subagents/researcher/` registers as the tool `researcher`. Unlike connection tools (`connection__<connection>__<tool>`), it carries no namespace, so the model, approvals, logs, and evals all reference it by that name. Its input schema is:
|
|
81
81
|
|
|
@@ -86,7 +86,7 @@ A declared subagent's tool name is the bare path-derived name, with no prefix. `
|
|
|
86
86
|
}
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
Because the name lives in the same runtime tool namespace as authored tools, a subagent named `researcher` collides with a tool named `researcher`.
|
|
89
|
+
Because the name lives in the same runtime tool namespace as authored tools, a subagent named `researcher` collides with a tool named `researcher`. eve rejects the build rather than picking a winner, so keep subagent directory names distinct from tool names.
|
|
90
90
|
|
|
91
91
|
Do not rely on subagent delegation by itself as an approval boundary. Put sensitive tools behind `needsApproval`, connection approval, route/session authorization, or other controls wherever those tools can be called.
|
|
92
92
|
|
|
@@ -98,5 +98,5 @@ Split out a subagent when the task needs a different prompt or specialist role,
|
|
|
98
98
|
|
|
99
99
|
## What to read next
|
|
100
100
|
|
|
101
|
-
- [Remote agents](./guides/remote-agents): call another
|
|
101
|
+
- [Remote agents](./guides/remote-agents): call another eve deployment as a subagent.
|
|
102
102
|
- [Dynamic workflows](./guides/dynamic-workflows): have the model orchestrate its subagents programmatically (fan-out, map-reduce).
|
|
@@ -13,7 +13,7 @@ Either way the run parks at `session.waiting`, durably, for as long as it takes
|
|
|
13
13
|
|
|
14
14
|
## Approvals
|
|
15
15
|
|
|
16
|
-
Approval is a property of a [tool](
|
|
16
|
+
Approval is a property of a [tool](/docs/tools) that pauses for a person before it runs. Gate a tool with `needsApproval` and the helpers from `eve/tools/approval`:
|
|
17
17
|
|
|
18
18
|
```ts title="agent/tools/refund_charge.ts"
|
|
19
19
|
import { defineTool } from "eve/tools";
|
|
@@ -54,30 +54,30 @@ The built-in `ask_question` tool lets the model pause and ask the user, rather t
|
|
|
54
54
|
- `options`: an optional list of choices to offer. Channels render these as buttons or a select menu.
|
|
55
55
|
- `allowFreeform`: whether the user may answer with free text instead of picking an option.
|
|
56
56
|
|
|
57
|
-
`ask_question` is part of the [default harness](
|
|
57
|
+
`ask_question` is part of the [default harness](/docs/concepts/default-harness), so it is available without you defining anything. It produces the same `input.requested` pause as an approval, and resumes the same way.
|
|
58
58
|
|
|
59
59
|
## How pause and resume works
|
|
60
60
|
|
|
61
61
|
Approvals and questions share one protocol:
|
|
62
62
|
|
|
63
63
|
1. The model requests input (an approval, or an `ask_question`).
|
|
64
|
-
2.
|
|
64
|
+
2. eve emits an `input.requested` stream event carrying the pending requests.
|
|
65
65
|
3. The turn parks at `session.waiting`, durably, for as long as it takes.
|
|
66
66
|
4. The client answers with `inputResponses` (structured, keyed by `requestId`) or a normal follow-up `message`. A follow-up whose text matches an option label (case-insensitive) resolves automatically.
|
|
67
67
|
|
|
68
68
|
The run picks back up exactly where it parked. Because the pause is durable, nothing is held in memory while it waits — the process can restart and the parked turn survives.
|
|
69
69
|
|
|
70
|
-
See [Sessions, runs & streaming](
|
|
70
|
+
See [Sessions, runs & streaming](/docs/concepts/sessions-runs-and-streaming) for the full event and resume contract that this builds on.
|
|
71
71
|
|
|
72
72
|
## Answering from a client or channel
|
|
73
73
|
|
|
74
|
-
Channels turn requests into native UI: the Slack adapter renders approvals as buttons and questions as select menus, and writes the user's choice back as the answer. You get this for free on every [channel](
|
|
74
|
+
Channels turn requests into native UI: the Slack adapter renders approvals as buttons and questions as select menus, and writes the user's choice back as the answer. You get this for free on every [channel](/docs/channels).
|
|
75
75
|
|
|
76
|
-
From your own frontend, read the pending request off the latest message and answer through the same session — see [Building a frontend](
|
|
76
|
+
From your own frontend, read the pending request off the latest message and answer through the same session — see [Building a frontend](/docs/guides/frontend/overview#human-in-the-loop-prompts) for the client-side reducer and `inputResponses` shape.
|
|
77
77
|
|
|
78
78
|
## What to read next
|
|
79
79
|
|
|
80
|
-
- [Tools](
|
|
81
|
-
- [Default harness](
|
|
82
|
-
- [Sessions, runs & streaming](
|
|
83
|
-
- [Building a frontend](
|
|
80
|
+
- [Tools](/docs/tools): define the typed actions an approval gates
|
|
81
|
+
- [Default harness](/docs/concepts/default-harness): the built-in tools, including `ask_question`
|
|
82
|
+
- [Sessions, runs & streaming](/docs/concepts/sessions-runs-and-streaming): the event and resume contract behind the pause
|
|
83
|
+
- [Building a frontend](/docs/guides/frontend/overview): render and answer requests from your own UI
|
package/docs/tools/overview.mdx
CHANGED
|
@@ -4,7 +4,7 @@ description: "Define typed actions the agent can call, and gate sensitive ones o
|
|
|
4
4
|
url: /tools
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
A tool is a typed action the agent can call, such as hitting an API, running a query, or writing a file. The action stays in code you control. Tools run in your app runtime with full access to `process.env`, not in the [sandbox](
|
|
7
|
+
A tool is a typed action the agent can call, such as hitting an API, running a query, or writing a file. The action stays in code you control. Tools run in your app runtime with full access to `process.env`, not in the [sandbox](/docs/sandbox).
|
|
8
8
|
|
|
9
9
|
## Define a tool
|
|
10
10
|
|
|
@@ -37,12 +37,12 @@ When a tool returns structured data, add an optional `outputSchema`. With Zod or
|
|
|
37
37
|
`execute` gets a `ctx` carrying the runtime accessors:
|
|
38
38
|
|
|
39
39
|
- `ctx.session`: session metadata, turn, auth, parent lineage.
|
|
40
|
-
- `ctx.getSandbox()`: the live [sandbox](
|
|
41
|
-
- `ctx.getSkill(id)`: read a packaged [skill](
|
|
40
|
+
- `ctx.getSandbox()`: the live [sandbox](/docs/sandbox) handle.
|
|
41
|
+
- `ctx.getSkill(id)`: read a packaged [skill](/docs/skills)'s metadata and files.
|
|
42
42
|
|
|
43
|
-
Running in the app runtime is what lets a tool import shared code from `lib/`, read `process.env`, and take part in
|
|
43
|
+
Running in the app runtime is what lets a tool import shared code from `lib/`, read `process.env`, and take part in eve’s durable pause/resume model.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
eve never runs authored tools during discovery. The model sees descriptors first, and only what it actually calls gets executed. Completed steps never re-run; eve replays the recorded result. A step interrupted mid-execution re-runs, so make non-idempotent side effects like charges or emails idempotent, or gate them with approval.
|
|
46
46
|
|
|
47
47
|
## Gate a tool on human approval
|
|
48
48
|
|
|
@@ -63,7 +63,7 @@ export default defineTool({
|
|
|
63
63
|
});
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
Approval is one half of
|
|
66
|
+
Approval is one half of eve's [human-in-the-loop](./human-in-the-loop) model — the page covers the `always/once/never` helpers, input-dependent predicates, and how a gated call pauses and resumes durably.
|
|
67
67
|
|
|
68
68
|
## Shape what the model sees with `toModelOutput`
|
|
69
69
|
|
|
@@ -82,7 +82,7 @@ Do not return secrets, credentials, unnecessary personal data, or unbounded sens
|
|
|
82
82
|
## What to read next
|
|
83
83
|
|
|
84
84
|
- [Human-in-the-loop](./human-in-the-loop): gate a tool on approval, or have the agent ask a question
|
|
85
|
-
- [Skills](
|
|
86
|
-
- [Default harness](
|
|
87
|
-
- [Dynamic capabilities](
|
|
88
|
-
- [Auth & route protection](
|
|
85
|
+
- [Skills](/docs/skills): on-demand procedures the model loads when relevant
|
|
86
|
+
- [Default harness](/docs/concepts/default-harness): the built-in tools and how to override or disable them
|
|
87
|
+
- [Dynamic capabilities](/docs/guides/dynamic-capabilities): tools whose set is resolved per session with `defineDynamic`
|
|
88
|
+
- [Auth & route protection](/docs/guides/auth-and-route-protection): authenticate a tool to an external service
|
|
@@ -3,7 +3,7 @@ title: "Connect a Warehouse"
|
|
|
3
3
|
description: "Part 4 of the Build an Agent tutorial. Let each user connect their own warehouse over an OAuth MCP via Vercel Connect."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The sample dataset got the analytics assistant running, but it's a stand-in. Now point the agent at a real warehouse and let each user connect their own by signing in through their browser. That's what a connection is for. It's an MCP server the model reaches through tools, with auth that
|
|
6
|
+
The sample dataset got the analytics assistant running, but it's a stand-in. Now point the agent at a real warehouse and let each user connect their own by signing in through their browser. That's what a connection is for. It's an MCP server the model reaches through tools, with auth that eve drives for you.
|
|
7
7
|
|
|
8
8
|
This step depends on Vercel Connect, which is in private beta. No Connect access? Keep the Step 3 sample dataset and read this step for the connection model. Steps 5 through 9 work against the sample dataset, so you can complete the tutorial without a warehouse.
|
|
9
9
|
|
|
@@ -24,7 +24,7 @@ export default defineMcpClientConnection({
|
|
|
24
24
|
});
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`"warehouse"` is the UID you chose when registering the Connect client. By default this OAuth is user-scoped. Each end-user authorizes in their own browser, and
|
|
27
|
+
`"warehouse"` is the UID you chose when registering the Connect client. By default this OAuth is user-scoped. Each end-user authorizes in their own browser, and eve resolves that user's token before every tool call.
|
|
28
28
|
|
|
29
29
|
Once Connect is enabled on your account, wire it up:
|
|
30
30
|
|
|
@@ -47,7 +47,7 @@ The first time, the model picks a warehouse tool but there's no token yet, so th
|
|
|
47
47
|
|
|
48
48
|
## The token never reaches the model
|
|
49
49
|
|
|
50
|
-
Right before each request to the MCP server,
|
|
50
|
+
Right before each request to the MCP server, eve resolves the bearer and sends it as `Authorization: Bearer <token>`. The model only ever sees tool names, descriptions, and results. The credential stays out of its reach.
|
|
51
51
|
|
|
52
52
|
If you want more control, gate the connection behind approval (`approval: once()`) or narrow which tools the model sees (`tools.allow`). See [Connections](../connections).
|
|
53
53
|
|
|
@@ -12,7 +12,7 @@ Step 1 gets it talking. The scaffold bundles a small sample dataset, so your fir
|
|
|
12
12
|
- Node 24 or newer and npm.
|
|
13
13
|
- A model credential. The scaffold's default model goes through the [Vercel AI Gateway](../getting-started), so you need `AI_GATEWAY_API_KEY` (or `VERCEL_OIDC_TOKEN` pulled via `vercel link`). A direct provider id like `anthropic/claude-opus-4.8` instead needs that provider's key, here `ANTHROPIC_API_KEY`.
|
|
14
14
|
|
|
15
|
-
If you have not run
|
|
15
|
+
If you have not run eve before, complete [Getting Started](../getting-started) first. Without a credential, "Run the agent" below fails when the runtime tries to reach the model; the dev TUI's `/model` flow walks you through pasting a key or linking a project.
|
|
16
16
|
|
|
17
17
|
## Scaffold the agent
|
|
18
18
|
|
|
@@ -21,7 +21,7 @@ npx eve@latest init analytics-assistant
|
|
|
21
21
|
cd analytics-assistant
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
The command writes the starter agent with
|
|
24
|
+
The command writes the starter agent with eve's default model and built-in HTTP API
|
|
25
25
|
channel (`agent/channels/eve.ts`), installs dependencies, initializes Git, and
|
|
26
26
|
starts the development server. Stop the server before continuing with the edits
|
|
27
27
|
below. It does not create a Vercel project or deploy. `init` creates the
|
|
@@ -11,7 +11,7 @@ The analytics assistant sent one message and got one answer. Three terms describ
|
|
|
11
11
|
| **turn** | One message you send and the work it triggers. |
|
|
12
12
|
| **step** | A durable checkpoint within the turn. |
|
|
13
13
|
|
|
14
|
-
Each turn runs as a durable workflow, and
|
|
14
|
+
Each turn runs as a durable workflow, and eve saves progress at every step. Completed steps never re-run; eve replays the recorded result. A step interrupted mid-execution re-runs, so make non-idempotent side effects like charges or emails idempotent, or gate them with approval. A turn that's waiting on you (an approval, a question) resumes whenever you answer, even if that's much later.
|
|
15
15
|
|
|
16
16
|
That's why the features in the rest of this tutorial work the way they do:
|
|
17
17
|
|
|
@@ -19,7 +19,7 @@ That's why the features in the rest of this tutorial work the way they do:
|
|
|
19
19
|
- The metric glossary in Step 6 survives across turns. State is checkpointed at step boundaries, so it sticks.
|
|
20
20
|
- The spend approval in Step 8 pauses the turn on your yes/no, then picks up exactly where it left off.
|
|
21
21
|
|
|
22
|
-
You author capabilities, including tools, instructions, channels, and skills.
|
|
22
|
+
You author capabilities, including tools, instructions, channels, and skills. eve drives the model-to-tool loop and decides when a turn continues, waits, or ends. You never write that loop yourself.
|
|
23
23
|
|
|
24
24
|
→ Next: [Step 3: Query sample data](./query-sample-data)
|
|
25
25
|
|
|
@@ -74,7 +74,7 @@ Restart the dev server with `npm run dev` and ask:
|
|
|
74
74
|
Which customer has spent the most, and how much?
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
Watch the loop play out in the TUI. The model emits a `run_sql` call,
|
|
77
|
+
Watch the loop play out in the TUI. The model emits a `run_sql` call, eve runs your `execute`, and the rows come back as a tool result. The model reads them and answers with a real number. eve drove the whole loop. All you supplied was the tool.
|
|
78
78
|
|
|
79
79
|
→ Next: [Connect a warehouse](./connect-a-warehouse)
|
|
80
80
|
|
|
@@ -13,7 +13,7 @@ Step 1 scaffolded the agent without a web frontend. Add one now with `eve channe
|
|
|
13
13
|
npx eve channels add web
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
This adds a Next.js app (`next.config.ts`, `app/page.tsx`, `app/_components/`) wired to the existing
|
|
16
|
+
This adds a Next.js app (`next.config.ts`, `app/page.tsx`, `app/_components/`) wired to the existing eve channel, plus the chat UI components and their dependencies. Run `npm install` afterward to install the added packages. The generated `next.config.ts` wraps your config with `withEve`, which wires the eve routes automatically:
|
|
17
17
|
|
|
18
18
|
```ts title="next.config.ts"
|
|
19
19
|
import type { NextConfig } from "next";
|
|
@@ -26,7 +26,7 @@ export default withEve(nextConfig);
|
|
|
26
26
|
|
|
27
27
|
## A dashboard with `useEveAgent`
|
|
28
28
|
|
|
29
|
-
The dashboard talks to the built-in
|
|
29
|
+
The dashboard talks to the built-in eve HTTP channel (`agent/channels/eve.ts`). On the browser side, `useEveAgent` handles session creation, streaming, and HITL. The scaffold renders its chat from `app/_components/agent-chat.tsx`, mounted by `app/page.tsx`. That component is fuller than you need to start, so replace its contents with this minimal version:
|
|
30
30
|
|
|
31
31
|
```tsx title="app/_components/agent-chat.tsx"
|
|
32
32
|
"use client";
|
|
@@ -125,7 +125,7 @@ That `team` attribute is exactly what the dynamic playbook in [Step 7](./team-pl
|
|
|
125
125
|
vercel deploy
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
On Vercel, the web app stays public and the
|
|
128
|
+
On Vercel, the web app stays public and the eve runtime sits behind it on the same origin, with the sandbox running on Vercel Sandbox. You can smoke-test the deployment without leaving the CLI:
|
|
129
129
|
|
|
130
130
|
```bash
|
|
131
131
|
npx eve dev https://your-analytics-app.vercel.app
|
|
@@ -138,7 +138,7 @@ That's the full assistant, deployed and authed. It queries the warehouse, runs a
|
|
|
138
138
|
Across the nine steps you built and shipped one agent, and along the way you used:
|
|
139
139
|
|
|
140
140
|
- **Tools** to give the model typed actions (`run_sql`, `chart_series`, `define_metric`).
|
|
141
|
-
- **Connections** to reach a warehouse over an OAuth MCP, with per-user tokens
|
|
141
|
+
- **Connections** to reach a warehouse over an OAuth MCP, with per-user tokens eve resolves for you.
|
|
142
142
|
- **The sandbox** to compute and chart beyond SQL in an isolated `/workspace`.
|
|
143
143
|
- **State** (`defineState`) to remember the team's glossary across turns.
|
|
144
144
|
- **Dynamic skills** (`defineDynamic`) to load the right team playbook per caller.
|