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.
Files changed (309) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/README.md +11 -11
  3. package/bin/eve.d.ts +1 -1
  4. package/bin/eve.js +6 -6
  5. package/dist/src/channel/routes.d.ts +4 -4
  6. package/dist/src/channel/types.d.ts +2 -2
  7. package/dist/src/channel/websocket-upgrade-server.d.ts +3 -3
  8. package/dist/src/chunks/{use-eve-agent-CdETo3qQ.js → use-eve-agent-D9ZhQhyV.js} +2 -2
  9. package/dist/src/chunks/{use-eve-agent-ClyM-_UT.js → use-eve-agent-DFI0POM9.js} +2 -2
  10. package/dist/src/cli/banner.d.ts +1 -1
  11. package/dist/src/cli/banner.js +1 -1
  12. package/dist/src/cli/commands/channel-add-conflicts.js +1 -1
  13. package/dist/src/cli/commands/channels.js +1 -1
  14. package/dist/src/cli/commands/deploy.js +1 -1
  15. package/dist/src/cli/commands/info.js +1 -1
  16. package/dist/src/cli/commands/init-agent-instructions.md +1 -1
  17. package/dist/src/cli/commands/init-git.js +1 -1
  18. package/dist/src/cli/commands/init.d.ts +1 -1
  19. package/dist/src/cli/commands/link.js +1 -1
  20. package/dist/src/cli/commands/preconditions.d.ts +2 -2
  21. package/dist/src/cli/commands/preconditions.js +1 -1
  22. package/dist/src/cli/dev/environment.d.ts +1 -1
  23. package/dist/src/cli/dev/tui/runner.js +1 -1
  24. package/dist/src/cli/dev/tui/setup-issues.d.ts +2 -0
  25. package/dist/src/cli/dev/tui/setup-issues.js +1 -1
  26. package/dist/src/cli/dev/tui/terminal-renderer.js +2 -2
  27. package/dist/src/cli/dev/tui/theme.d.ts +1 -1
  28. package/dist/src/cli/dev/tui/tui.d.ts +1 -1
  29. package/dist/src/cli/dev/url.d.ts +1 -1
  30. package/dist/src/cli/run.d.ts +1 -1
  31. package/dist/src/cli/run.js +2 -2
  32. package/dist/src/cli/ui/output.d.ts +1 -1
  33. package/dist/src/client/client-error.d.ts +1 -1
  34. package/dist/src/client/client.d.ts +3 -3
  35. package/dist/src/client/eve-agent-store.d.ts +1 -1
  36. package/dist/src/client/eve-agent-store.js +1 -1
  37. package/dist/src/client/message-reducer-types.d.ts +3 -3
  38. package/dist/src/client/message-reducer.d.ts +3 -3
  39. package/dist/src/client/output-schema.d.ts +1 -1
  40. package/dist/src/client/reducer.d.ts +5 -5
  41. package/dist/src/client/session.d.ts +1 -1
  42. package/dist/src/client/types.d.ts +1 -1
  43. package/dist/src/client/url.d.ts +2 -2
  44. package/dist/src/compiled/.vendor-stamp.json +1 -1
  45. package/dist/src/compiled/@vercel/detect-agent/index.d.ts +1 -1
  46. package/dist/src/compiler/channel-instrumentation-types.js +1 -1
  47. package/dist/src/compiler/model-catalog.d.ts +1 -1
  48. package/dist/src/compiler/module-map.js +1 -1
  49. package/dist/src/compiler/normalize-agent-config.js +1 -1
  50. package/dist/src/compiler/normalize-channel.js +1 -1
  51. package/dist/src/compiler/normalize-connection.js +1 -1
  52. package/dist/src/compiler/normalize-instructions.js +1 -1
  53. package/dist/src/compiler/normalize-sandbox.js +1 -1
  54. package/dist/src/compiler/normalize-schedule.js +1 -1
  55. package/dist/src/compiler/normalize-skill.js +1 -1
  56. package/dist/src/compiler/normalize-subagent.js +1 -1
  57. package/dist/src/compiler/normalize-tool.js +1 -1
  58. package/dist/src/compiler/workspace-resources.js +1 -1
  59. package/dist/src/context/build-callback-context.js +1 -1
  60. package/dist/src/context/container.d.ts +4 -4
  61. package/dist/src/context/container.js +1 -1
  62. package/dist/src/discover/diagnostics.d.ts +1 -1
  63. package/dist/src/discover/project.d.ts +2 -2
  64. package/dist/src/discover/project.js +1 -1
  65. package/dist/src/evals/cli/eval-client.d.ts +1 -1
  66. package/dist/src/evals/define-eval.d.ts +1 -1
  67. package/dist/src/evals/runner/execute-eval.d.ts +1 -1
  68. package/dist/src/evals/runner/execute-task.d.ts +1 -1
  69. package/dist/src/evals/types.d.ts +6 -6
  70. package/dist/src/execution/durable-session-migrations/chain.js +1 -1
  71. package/dist/src/execution/sandbox/bash-tool.js +1 -1
  72. package/dist/src/execution/sandbox/bindings/docker-options.d.ts +1 -1
  73. package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
  74. package/dist/src/execution/sandbox/bindings/microsandbox-runtime.js +1 -1
  75. package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
  76. package/dist/src/execution/sandbox/development-prewarm.js +1 -1
  77. package/dist/src/execution/sandbox/ensure.js +1 -1
  78. package/dist/src/execution/sandbox/prewarm.js +1 -1
  79. package/dist/src/execution/session-callback-step.d.ts +1 -1
  80. package/dist/src/harness/attachment-staging.js +1 -1
  81. package/dist/src/harness/code-mode-lifecycle.d.ts +1 -1
  82. package/dist/src/harness/emission.d.ts +1 -1
  83. package/dist/src/harness/runtime-actions.d.ts +1 -1
  84. package/dist/src/internal/application/cache-metadata.d.ts +2 -2
  85. package/dist/src/internal/application/compiled-artifacts.js +2 -2
  86. package/dist/src/internal/application/package.d.ts +7 -7
  87. package/dist/src/internal/application/package.js +1 -1
  88. package/dist/src/internal/authored-module-bundle.js +1 -1
  89. package/dist/src/internal/helpers/markdown.js +1 -1
  90. package/dist/src/internal/instrumentation.d.ts +1 -1
  91. package/dist/src/internal/nitro/host/build-application.d.ts +1 -1
  92. package/dist/src/internal/nitro/host/channel-routes.d.ts +3 -3
  93. package/dist/src/internal/nitro/host/configure-nitro-routes.d.ts +1 -1
  94. package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
  95. package/dist/src/internal/nitro/host/create-application-nitro.d.ts +1 -1
  96. package/dist/src/internal/nitro/host/cron-handler-route.d.ts +3 -3
  97. package/dist/src/internal/nitro/host/nitro-bundler-config.d.ts +1 -1
  98. package/dist/src/internal/nitro/host/optional-engine-dependency-plugin.d.ts +2 -2
  99. package/dist/src/internal/nitro/host/schedule-task-routes.d.ts +2 -2
  100. package/dist/src/internal/nitro/host/start-development-server.d.ts +1 -1
  101. package/dist/src/internal/nitro/host/start-development-server.js +1 -1
  102. package/dist/src/internal/nitro/host/start-production-server.d.ts +1 -1
  103. package/dist/src/internal/nitro/host/start-production-server.js +2 -2
  104. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
  105. package/dist/src/internal/nitro/routes/health.d.ts +1 -1
  106. package/dist/src/internal/nitro/routes/info.d.ts +1 -1
  107. package/dist/src/internal/nitro/routes/runtime-artifacts.js +1 -1
  108. package/dist/src/internal/nitro/routes/schedule-task.d.ts +1 -1
  109. package/dist/src/internal/package-name.d.ts +1 -1
  110. package/dist/src/internal/vercel-agent-summary.d.ts +6 -6
  111. package/dist/src/internal/workflow/builtins.d.ts +3 -3
  112. package/dist/src/internal/workflow-bundle/nitro-step-entry.js +1 -1
  113. package/dist/src/internal/workflow-bundle/vercel-workflow-output.d.ts +7 -7
  114. package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +4 -4
  115. package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
  116. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  117. package/dist/src/protocol/message.d.ts +2 -2
  118. package/dist/src/protocol/routes.d.ts +3 -3
  119. package/dist/src/public/agents/auth.d.ts +1 -1
  120. package/dist/src/public/channels/auth.d.ts +1 -1
  121. package/dist/src/public/channels/discord/api.d.ts +2 -2
  122. package/dist/src/public/channels/discord/discordChannel.d.ts +2 -2
  123. package/dist/src/public/channels/discord/hitl.d.ts +4 -4
  124. package/dist/src/public/channels/discord/verify.d.ts +1 -1
  125. package/dist/src/public/channels/eve.d.ts +5 -5
  126. package/dist/src/public/channels/github/api.d.ts +1 -1
  127. package/dist/src/public/channels/github/defaults.d.ts +1 -1
  128. package/dist/src/public/channels/github/inbound.d.ts +1 -1
  129. package/dist/src/public/channels/index.d.ts +2 -2
  130. package/dist/src/public/channels/linear/auth.d.ts +1 -1
  131. package/dist/src/public/channels/linear/hitl.d.ts +4 -4
  132. package/dist/src/public/channels/linear/inbound.d.ts +1 -1
  133. package/dist/src/public/channels/linear/verify.d.ts +1 -1
  134. package/dist/src/public/channels/slack/constants.d.ts +1 -1
  135. package/dist/src/public/channels/teams/api.d.ts +4 -4
  136. package/dist/src/public/channels/teams/hitl.d.ts +4 -4
  137. package/dist/src/public/channels/teams/limits.d.ts +3 -3
  138. package/dist/src/public/channels/teams/verify.d.ts +2 -2
  139. package/dist/src/public/channels/telegram/api.d.ts +1 -1
  140. package/dist/src/public/channels/telegram/hitl.d.ts +3 -3
  141. package/dist/src/public/channels/telegram/verify.d.ts +1 -1
  142. package/dist/src/public/channels/twilio/api.d.ts +1 -1
  143. package/dist/src/public/context/index.d.ts +1 -1
  144. package/dist/src/public/definitions/defineChannel.d.ts +2 -2
  145. package/dist/src/public/definitions/hook.d.ts +1 -1
  146. package/dist/src/public/definitions/remote-agent.d.ts +5 -5
  147. package/dist/src/public/definitions/sandbox.d.ts +1 -1
  148. package/dist/src/public/definitions/source.d.ts +2 -2
  149. package/dist/src/public/definitions/state.d.ts +2 -2
  150. package/dist/src/public/definitions/state.js +1 -1
  151. package/dist/src/public/instrumentation/index.d.ts +3 -3
  152. package/dist/src/public/next/index.d.ts +12 -12
  153. package/dist/src/public/next/index.js +1 -1
  154. package/dist/src/public/next/server.js +1 -1
  155. package/dist/src/public/next/vercel-output-config.js +1 -1
  156. package/dist/src/public/nuxt/dev-server.d.ts +2 -2
  157. package/dist/src/public/nuxt/dev-server.js +1 -1
  158. package/dist/src/public/nuxt/module.d.ts +10 -10
  159. package/dist/src/public/nuxt/routing.d.ts +6 -6
  160. package/dist/src/public/nuxt/routing.js +1 -1
  161. package/dist/src/public/nuxt/vercel-json.d.ts +2 -2
  162. package/dist/src/public/sandbox/backends/just-bash.d.ts +1 -1
  163. package/dist/src/public/sandbox/backends/microsandbox.d.ts +1 -1
  164. package/dist/src/public/sandbox/backends/vercel.d.ts +1 -1
  165. package/dist/src/public/sandbox/docker-sandbox.d.ts +1 -1
  166. package/dist/src/public/sandbox/just-bash-sandbox.d.ts +1 -1
  167. package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +3 -3
  168. package/dist/src/public/sandbox/vercel-sandbox.d.ts +2 -2
  169. package/dist/src/public/sveltekit/dev-server.d.ts +2 -2
  170. package/dist/src/public/sveltekit/dev-server.js +1 -1
  171. package/dist/src/public/sveltekit/index.d.ts +11 -11
  172. package/dist/src/public/sveltekit/routing.d.ts +5 -5
  173. package/dist/src/public/sveltekit/routing.js +1 -1
  174. package/dist/src/public/sveltekit/vercel-json.d.ts +2 -2
  175. package/dist/src/public/tool-result-narrowing.js +1 -1
  176. package/dist/src/public/types/json.d.ts +1 -1
  177. package/dist/src/react/use-eve-agent.d.ts +8 -8
  178. package/dist/src/runtime/agent/bootstrap-model.js +1 -1
  179. package/dist/src/runtime/agent/bootstrap.d.ts +1 -1
  180. package/dist/src/runtime/agent/bootstrap.js +1 -1
  181. package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
  182. package/dist/src/runtime/agent/resolve-model.js +1 -1
  183. package/dist/src/runtime/attributes/emit.d.ts +2 -2
  184. package/dist/src/runtime/connections/callback-route.d.ts +1 -1
  185. package/dist/src/runtime/connections/principal.js +1 -1
  186. package/dist/src/runtime/connections/scoped-authorization.d.ts +1 -1
  187. package/dist/src/runtime/connections/types.d.ts +4 -4
  188. package/dist/src/runtime/framework-tools/final-output.d.ts +1 -1
  189. package/dist/src/runtime/governance/auth/http-basic.d.ts +1 -1
  190. package/dist/src/runtime/governance/auth/token-claims.d.ts +1 -1
  191. package/dist/src/runtime/governance/auth/types.d.ts +1 -1
  192. package/dist/src/runtime/loaders/artifact-paths.d.ts +1 -1
  193. package/dist/src/runtime/loaders/compile-metadata.js +1 -1
  194. package/dist/src/runtime/loaders/manifest.js +1 -1
  195. package/dist/src/runtime/loaders/module-map.js +1 -1
  196. package/dist/src/runtime/prompt/compose.js +1 -1
  197. package/dist/src/runtime/resolve-channel.js +1 -1
  198. package/dist/src/runtime/schedules/register.js +1 -1
  199. package/dist/src/runtime/sessions/auth.d.ts +1 -1
  200. package/dist/src/runtime/sessions/runtime-session.d.ts +1 -1
  201. package/dist/src/runtime/types.d.ts +1 -1
  202. package/dist/src/runtime/workspace/types.d.ts +1 -1
  203. package/dist/src/services/dev-client/request-headers.d.ts +2 -2
  204. package/dist/src/services/dev-client/vercel-auth-error.d.ts +1 -1
  205. package/dist/src/services/inspect-application.d.ts +1 -1
  206. package/dist/src/setup/boxes/add-channels.d.ts +1 -1
  207. package/dist/src/setup/boxes/add-channels.js +1 -1
  208. package/dist/src/setup/boxes/deploy-project.js +1 -1
  209. package/dist/src/setup/boxes/resolve-target.d.ts +2 -2
  210. package/dist/src/setup/boxes/scaffold.d.ts +4 -4
  211. package/dist/src/setup/boxes/scaffold.js +1 -1
  212. package/dist/src/setup/channel-add-conflicts.js +1 -1
  213. package/dist/src/setup/cli/rail-log.d.ts +1 -1
  214. package/dist/src/setup/flows/model.d.ts +3 -5
  215. package/dist/src/setup/flows/model.js +1 -1
  216. package/dist/src/setup/node-engine.d.ts +5 -5
  217. package/dist/src/setup/node-engine.js +1 -1
  218. package/dist/src/setup/onboarding.d.ts +2 -2
  219. package/dist/src/setup/primitives/open-url.d.ts +1 -1
  220. package/dist/src/setup/primitives/pm/pnpm.js +1 -1
  221. package/dist/src/setup/primitives/pm/run.d.ts +1 -1
  222. package/dist/src/setup/primitives/pm/types.d.ts +1 -1
  223. package/dist/src/setup/scaffold/connections/catalog.d.ts +1 -1
  224. package/dist/src/setup/scaffold/create/add-to-project.d.ts +2 -2
  225. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  226. package/dist/src/setup/scaffold/create/project.d.ts +5 -5
  227. package/dist/src/setup/scaffold/create/project.js +3 -3
  228. package/dist/src/setup/scaffold/create/web-template.d.ts +2 -2
  229. package/dist/src/setup/scaffold/create/web-template.js +2 -2
  230. package/dist/src/setup/scaffold/update/package-json.d.ts +1 -1
  231. package/dist/src/setup/slack-connect-lifecycle.d.ts +2 -2
  232. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  233. package/dist/src/setup/slackbot.d.ts +1 -1
  234. package/dist/src/setup/slackbot.js +1 -1
  235. package/dist/src/setup/validate-gateway-key.d.ts +1 -1
  236. package/dist/src/setup/vercel-project.js +1 -1
  237. package/dist/src/shared/agent-definition.d.ts +15 -15
  238. package/dist/src/shared/code-mode.d.ts +3 -3
  239. package/dist/src/shared/json-schema.d.ts +1 -1
  240. package/dist/src/shared/model-endpoint-status.d.ts +2 -2
  241. package/dist/src/shared/sandbox-backend.d.ts +4 -4
  242. package/dist/src/shared/sandbox-definition.d.ts +3 -3
  243. package/dist/src/shared/sandbox-network-policy.d.ts +1 -1
  244. package/dist/src/shared/sandbox-session.d.ts +2 -2
  245. package/dist/src/shared/skill-package.d.ts +1 -1
  246. package/dist/src/shared/skill-package.js +1 -1
  247. package/dist/src/shared/tool-definition.d.ts +1 -1
  248. package/dist/src/svelte/index.js +1 -1
  249. package/dist/src/svelte/use-eve-agent.d.ts +7 -7
  250. package/dist/src/svelte/use-eve-agent.js +1 -1
  251. package/dist/src/vue/index.js +1 -1
  252. package/dist/src/vue/use-eve-agent.d.ts +7 -7
  253. package/dist/src/vue/use-eve-agent.js +1 -1
  254. package/docs/README.md +10 -10
  255. package/docs/agent-config.md +2 -2
  256. package/docs/channels/custom.mdx +5 -5
  257. package/docs/channels/discord.mdx +3 -3
  258. package/docs/channels/eve.mdx +7 -7
  259. package/docs/channels/linear.mdx +6 -6
  260. package/docs/channels/overview.mdx +11 -11
  261. package/docs/channels/slack.mdx +4 -4
  262. package/docs/channels/teams.mdx +2 -2
  263. package/docs/channels/telegram.mdx +3 -3
  264. package/docs/channels/twilio.mdx +1 -1
  265. package/docs/concepts/context-control.md +5 -5
  266. package/docs/concepts/default-harness.md +2 -2
  267. package/docs/concepts/execution-model-and-durability.md +9 -9
  268. package/docs/concepts/security-model.md +9 -9
  269. package/docs/concepts/sessions-runs-and-streaming.md +3 -3
  270. package/docs/connections.mdx +11 -11
  271. package/docs/evals/judge.mdx +2 -2
  272. package/docs/evals/overview.mdx +2 -2
  273. package/docs/evals/reporters.mdx +2 -2
  274. package/docs/getting-started.mdx +10 -10
  275. package/docs/guides/auth-and-route-protection.md +6 -6
  276. package/docs/guides/client/continuations.mdx +3 -3
  277. package/docs/guides/client/output-schema.mdx +1 -1
  278. package/docs/guides/client/overview.mdx +5 -5
  279. package/docs/guides/client/streaming.mdx +1 -1
  280. package/docs/guides/deployment.md +7 -7
  281. package/docs/guides/dev-tui.md +2 -2
  282. package/docs/guides/frontend/nextjs.mdx +13 -13
  283. package/docs/guides/frontend/nuxt.mdx +7 -7
  284. package/docs/guides/frontend/overview.mdx +12 -12
  285. package/docs/guides/frontend/sveltekit.mdx +7 -7
  286. package/docs/guides/frontend/use-eve-agent-svelte.mdx +6 -6
  287. package/docs/guides/frontend/use-eve-agent-vue.mdx +6 -6
  288. package/docs/guides/hooks.md +2 -2
  289. package/docs/guides/instrumentation.md +12 -12
  290. package/docs/guides/remote-agents.md +4 -4
  291. package/docs/guides/session-context.md +4 -4
  292. package/docs/guides/state.md +1 -1
  293. package/docs/instructions.mdx +4 -4
  294. package/docs/introduction.mdx +12 -12
  295. package/docs/reference/cli.md +5 -5
  296. package/docs/reference/project-layout.md +4 -4
  297. package/docs/responsible-use.md +3 -3
  298. package/docs/sandbox.mdx +8 -8
  299. package/docs/schedules.mdx +1 -1
  300. package/docs/skills.mdx +4 -4
  301. package/docs/subagents.mdx +3 -3
  302. package/docs/tools/human-in-the-loop.md +10 -10
  303. package/docs/tools/overview.mdx +10 -10
  304. package/docs/tutorial/connect-a-warehouse.mdx +3 -3
  305. package/docs/tutorial/first-agent.mdx +2 -2
  306. package/docs/tutorial/how-it-runs.mdx +2 -2
  307. package/docs/tutorial/query-sample-data.mdx +1 -1
  308. package/docs/tutorial/ship-it.mdx +4 -4
  309. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: "Execution Model and Durability"
3
- description: "How an Eve session runs. Durable conversations, turns that checkpoint at steps, and parked work that resumes later."
3
+ description: "How an eve session runs. Durable conversations, turns that checkpoint at steps, and parked work that resumes later."
4
4
  ---
5
5
 
6
- An Eve session is a durable conversation. It can run for days and survives process restarts and redeploys without any work on your part. You write the capabilities (tools, instructions, channels) and Eve runs the loop.
6
+ An eve session is a durable conversation. It can run for days and survives process restarts and redeploys without any work on your part. You write the capabilities (tools, instructions, channels) and eve runs the loop.
7
7
 
8
8
  ## Sessions, turns, and steps
9
9
 
@@ -13,15 +13,15 @@ Work nests in three levels:
13
13
  - **turn**: one user message and all the work it triggers (model calls, tool calls, reasoning) until the agent produces its response.
14
14
  - **step**: a durable checkpoint inside a turn (one model call and the tool calls it makes).
15
15
 
16
- Every turn runs as a durable workflow, built on the open-source [Workflow SDK](https://workflow-sdk.dev/) (Vercel Workflow when you deploy on Vercel). Eve checkpoints progress and serializes durable state at each step boundary. Your code runs inside a managed step, so tools, the sandbox, and subagents feel synchronous even though the session underneath them is durable.
16
+ Every turn runs as a durable workflow, built on the open-source [Workflow SDK](https://workflow-sdk.dev/) (Vercel Workflow when you deploy on Vercel). eve checkpoints progress and serializes durable state at each step boundary. Your code runs inside a managed step, so tools, the sandbox, and subagents feel synchronous even though the session underneath them is durable.
17
17
 
18
18
  ## Resuming after a crash
19
19
 
20
- Crash the process, hit a timeout, or redeploy mid-turn, and the run picks up from the last completed step rather than replaying the whole turn. 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.
20
+ Crash the process, hit a timeout, or redeploy mid-turn, and the run picks up from the last completed step rather than replaying the whole turn. 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.
21
21
 
22
- There's nothing to configure. Eve owns the workflow lifecycle, and sessions are durable by default.
22
+ There's nothing to configure. eve owns the workflow lifecycle, and sessions are durable by default.
23
23
 
24
- You don't write workflow code directly. Workflow primitives (`start()`, `resumeHook()`, etc.) are an implementation detail of Eve's runtime layer; channels, tools, and hooks never touch them. Two surfaces give your own code session data: tools read the current session's metadata (id, turn, auth, parent lineage) via `ctx.session`, and [`defineState`](../guides/state) reads or writes session-scoped durable state. See [State](../guides/state) for the read/write model.
24
+ You don't write workflow code directly. Workflow primitives (`start()`, `resumeHook()`, etc.) are an implementation detail of eve's runtime layer; channels, tools, and hooks never touch them. Two surfaces give your own code session data: tools read the current session's metadata (id, turn, auth, parent lineage) via `ctx.session`, and [`defineState`](../guides/state) reads or writes session-scoped durable state. See [State](../guides/state) for the read/write model.
25
25
 
26
26
  ## Parked work
27
27
 
@@ -29,9 +29,9 @@ Some work has to wait, including a human approving a [tool](../tools), an intera
29
29
 
30
30
  ## Message delivery and queueing
31
31
 
32
- Eve does not maintain a durable FIFO queue of user messages for a session. The `continuationToken` is a resume handle for the session's current workflow hook, not a general message-queue address.
32
+ eve does not maintain a durable FIFO queue of user messages for a session. The `continuationToken` is a resume handle for the session's current workflow hook, not a general message-queue address.
33
33
 
34
- When a session is waiting, a delivery to the current continuation token wakes the session and starts the next turn. When a turn is already active, the hook may accept additional deliveries, but the runtime only drains them at specific workflow boundaries. If more than one delivery is ready when the driver checks, Eve may fold them into the next turn; that drain is best-effort and depends on workflow and transport timing.
34
+ When a session is waiting, a delivery to the current continuation token wakes the session and starts the next turn. When a turn is already active, the hook may accept additional deliveries, but the runtime only drains them at specific workflow boundaries. If more than one delivery is ready when the driver checks, eve may fold them into the next turn; that drain is best-effort and depends on workflow and transport timing.
35
35
 
36
36
  So don't rely on concurrent sends to the same session behaving like a typical ordered chat queue. For deterministic behavior, send one user turn at a time and wait for `session.waiting` before sending the next message to the same session. If your channel can receive bursts while the agent is working, keep your own per-session queue in the channel or app layer, then deliver the next message after the session parks again. Separate sessions still run independently.
37
37
 
@@ -39,7 +39,7 @@ So don't rely on concurrent sends to the same session behaving like a typical or
39
39
 
40
40
  A turn can hand work off to a [subagent](../subagents). Each subagent gets its own context and its own durable session; a declared subagent also gets its own sandbox, skills, and state. Nothing crosses the boundary implicitly.
41
41
 
42
- ## How Eve orders session history
42
+ ## How eve orders session history
43
43
 
44
44
  Conversation history within a session is append-only. Turns land in order, and the tool calls inside a turn (plus their results) keep their order too. Read a session back and you see events in the order they happened.
45
45
 
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: "Security Model"
3
- description: "Eve's trust boundaries, where secrets live, how credentials reach hosts, and what fails closed by default."
3
+ description: "eve's trust boundaries, where secrets live, how credentials reach hosts, and what fails closed by default."
4
4
  ---
5
5
 
6
- Your Eve agent runs across two contexts, with a trust boundary between them and every secret kept on the trusted side. Use this mental model when deciding what an agent (and the model driving it) is allowed to reach.
6
+ Your eve agent runs across two contexts, with a trust boundary between them and every secret kept on the trusted side. Use this mental model when deciding what an agent (and the model driving it) is allowed to reach.
7
7
 
8
8
  ## Trust boundaries
9
9
 
@@ -25,7 +25,7 @@ A concrete trace makes the boundary clear. When the model calls a custom `charge
25
25
  ```mermaid
26
26
  flowchart LR
27
27
  User["User or channel provider"] --> Channel["Channel route and route auth"]
28
- Channel --> Runtime["Eve app runtime and durable session"]
28
+ Channel --> Runtime["eve app runtime and durable session"]
29
29
  Runtime --> Model["Configured model provider or Vercel AI Gateway"]
30
30
  Runtime --> Tools["Authored tools and connections"]
31
31
  Tools --> Services["Customer-selected external services"]
@@ -34,23 +34,23 @@ flowchart LR
34
34
  Runtime --> Telemetry["Configured telemetry or eval provider"]
35
35
  ```
36
36
 
37
- Eve sends data where your agent configuration and runtime choices send it:
37
+ eve sends data where your agent configuration and runtime choices send it:
38
38
 
39
- - Inbound channel data flows through the channel provider you configure, then into the Eve app runtime.
39
+ - Inbound channel data flows through the channel provider you configure, then into the eve app runtime.
40
40
  - Model inputs and outputs flow to the model or routing path selected in `agent.ts`, such as a Vercel AI Gateway model id or a provider-authored `LanguageModel`.
41
41
  - Tool and connection calls flow to the external services, MCP servers, OpenAPI endpoints, and channels you configure.
42
42
  - Sandbox commands can reach network destinations allowed by the sandbox network policy.
43
43
  - Telemetry and eval data flows to the exporters and providers you configure in `instrumentation.ts` or eval settings.
44
44
 
45
- Eve stores durable session and workflow state needed to resume conversations, stream events, replay completed steps, and show run observability. You are responsible for deciding whether the selected channels, model providers, connected services, sandbox egress destinations, telemetry exporters, retention settings, and deletion controls are appropriate for your data and use case.
45
+ eve stores durable session and workflow state needed to resume conversations, stream events, replay completed steps, and show run observability. You are responsible for deciding whether the selected channels, model providers, connected services, sandbox egress destinations, telemetry exporters, retention settings, and deletion controls are appropriate for your data and use case.
46
46
 
47
47
  ## Credential brokering
48
48
 
49
- Credential brokering gives the model _authenticated_ network access from inside the sandbox, like a `git clone` of a private repo or an authenticated `curl`, when there's no [tool](../tools) or [connection](../connections) to route it through. On the Vercel Sandbox backend, auth headers get injected at the sandbox's network firewall for matching domains. The secret stays in the app runtime; the sandbox process only ever sees the response. See [Vercel Sandbox Credential Brokering](https://vercel.com/docs/sandbox/concepts/firewall#credentials-brokering) for the platform mechanism, and [Sandbox](../sandbox) for the Eve policy API.
49
+ Credential brokering gives the model _authenticated_ network access from inside the sandbox, like a `git clone` of a private repo or an authenticated `curl`, when there's no [tool](../tools) or [connection](../connections) to route it through. On the Vercel Sandbox backend, auth headers get injected at the sandbox's network firewall for matching domains. The secret stays in the app runtime; the sandbox process only ever sees the response. See [Vercel Sandbox Credential Brokering](https://vercel.com/docs/sandbox/concepts/firewall#credentials-brokering) for the platform mechanism, and [Sandbox](../sandbox) for the eve policy API.
50
50
 
51
51
  ## Connection credentials
52
52
 
53
- [Connection](../connections) tokens (MCP and OpenAPI) come from either `getToken()` or an interactive OAuth flow, and Eve injects the resolved token into every outbound request. The token is cached per step and never serialized to durable state.
53
+ [Connection](../connections) tokens (MCP and OpenAPI) come from either `getToken()` or an interactive OAuth flow, and eve injects the resolved token into every outbound request. The token is cached per step and never serialized to durable state.
54
54
 
55
55
  ## Channel verification
56
56
 
@@ -70,7 +70,7 @@ A custom channel that accepts dashboard-style webhooks should follow the same sh
70
70
 
71
71
  ## Authored markdown is data
72
72
 
73
- [Skill](../skills) and [schedule](../schedules) files are markdown with YAML frontmatter, and Eve treats that frontmatter strictly as data. The code-capable engines (`---js` / `---javascript`, which would `eval()` the frontmatter body the moment the file is parsed) are disabled, so such a fence throws rather than running. Frontmatter has to parse to a plain YAML object.
73
+ [Skill](../skills) and [schedule](../schedules) files are markdown with YAML frontmatter, and eve treats that frontmatter strictly as data. The code-capable engines (`---js` / `---javascript`, which would `eval()` the frontmatter body the moment the file is parsed) are disabled, so such a fence throws rather than running. Frontmatter has to parse to a plain YAML object.
74
74
 
75
75
  ## Auth fails closed
76
76
 
@@ -3,7 +3,7 @@ title: "Sessions, Runs & Streaming"
3
3
  description: "The session and run contract you touch: continuation tokens, stream handles, the NDJSON event stream, and reconnecting."
4
4
  ---
5
5
 
6
- Every Eve app speaks the same stable HTTP API to a [durable session](./execution-model-and-durability). This page is the contract you hold: the handles you get back, the events you stream, and how to reconnect.
6
+ Every eve app speaks the same stable HTTP API to a [durable session](./execution-model-and-durability). This page is the contract you hold: the handles you get back, the events you stream, and how to reconnect.
7
7
 
8
8
  ## The two handles
9
9
 
@@ -14,7 +14,7 @@ Two handles do two jobs, and mixing them up is the most common mistake. One hand
14
14
 
15
15
  A session has one active continuation at a time: each follow-up uses the current `continuationToken`, and a stale one is rejected.
16
16
 
17
- React, Vue, and Svelte apps reach for [`useEveAgent()`](../guides/frontend/overview) instead of calling these routes by hand. Next.js and Nuxt apps can proxy them to the Eve runtime from the same origin.
17
+ React, Vue, and Svelte apps reach for [`useEveAgent()`](../guides/frontend/overview) instead of calling these routes by hand. Next.js and Nuxt apps can proxy them to the eve runtime from the same origin.
18
18
 
19
19
  ## Start a session
20
20
 
@@ -24,7 +24,7 @@ curl -X POST http://127.0.0.1:3000/eve/v1/session \
24
24
  -d '{"message":"Summarize the latest forecast."}'
25
25
  ```
26
26
 
27
- Eve responds right away. The JSON body carries a `sessionId` and a `continuationToken`, and the `x-eve-session-id` header names the durable session to stream.
27
+ eve responds right away. The JSON body carries a `sessionId` and a `continuationToken`, and the `x-eve-session-id` header names the durable session to stream.
28
28
 
29
29
  ## Stream a session
30
30
 
@@ -3,7 +3,7 @@ title: "Connections"
3
3
  description: "Expose external MCP and OpenAPI servers to the model, with connection tokens the model never sees."
4
4
  ---
5
5
 
6
- A connection wires an agent into an external server you don't author, either an MCP server (Linear, GitHub, a warehouse) or any HTTP API with an OpenAPI document. Eve handles the parts you'd otherwise hand-roll, discovering the remote tools, surfacing them to the model, and brokering auth.
6
+ A connection wires an agent into an external server you don't author, either an MCP server (Linear, GitHub, a warehouse) or any HTTP API with an OpenAPI document. eve handles the parts you'd otherwise hand-roll, discovering the remote tools, surfacing them to the model, and brokering auth.
7
7
 
8
8
  Connections live under `agent/connections/`. The runtime name comes from the filename, so `agent/connections/linear.ts` registers as `"linear"`. The model never sees a connection's URL or credentials. It discovers tools through the built-in `connection__search` and calls them by their qualified name, `connection__<connection>__<tool>` (e.g. `connection__linear__list_issues`).
9
9
 
@@ -27,11 +27,11 @@ The `url` must speak Streamable HTTP or SSE. Write the `description` for the mod
27
27
 
28
28
  ### Static-token auth
29
29
 
30
- `getToken` returns a `TokenResult` (`{ token, expiresAt? }`), and Eve sends it as `Authorization: Bearer <token>` on every request. Because it runs on each connection attempt, you can mint a fresh token from wherever you keep secrets, including an env var, a secrets manager, an internal vault, or your own OAuth exchange. If the token has a known TTL, set `expiresAt` (milliseconds since epoch) and Eve refreshes ahead of time rather than waiting for a `401`.
30
+ `getToken` returns a `TokenResult` (`{ token, expiresAt? }`), and eve sends it as `Authorization: Bearer <token>` on every request. Because it runs on each connection attempt, you can mint a fresh token from wherever you keep secrets, including an env var, a secrets manager, an internal vault, or your own OAuth exchange. If the token has a known TTL, set `expiresAt` (milliseconds since epoch) and eve refreshes ahead of time rather than waiting for a `401`.
31
31
 
32
32
  When `getToken` is the only auth, `principalType` defaults to `"app"`: one shared credential keyed across all sessions. Switch to `principalType: "user"` when each end-user carries their own token.
33
33
 
34
- Eve resolves and caches connection tokens per step; they never land in conversation history or reach the model.
34
+ eve resolves and caches connection tokens per step; they never land in conversation history or reach the model.
35
35
 
36
36
  ### No auth
37
37
 
@@ -44,7 +44,7 @@ export default defineMcpClientConnection({
44
44
  });
45
45
  ```
46
46
 
47
- We recommend using no-auth connections only for services that are intentionally public, local-only, or otherwise protected outside Eve. Do not use no-auth connections for sensitive third-party services.
47
+ We recommend using no-auth connections only for services that are intentionally public, local-only, or otherwise protected outside eve. Do not use no-auth connections for sensitive third-party services.
48
48
 
49
49
  ### Headers
50
50
 
@@ -92,7 +92,7 @@ For connection tools that can create, modify, delete, transmit, purchase, messag
92
92
 
93
93
  ## OpenAPI connections
94
94
 
95
- `defineOpenAPIConnection` turns any OpenAPI 3.x document into connection tools, one per operation. Pass an HTTPS URL Eve fetches at runtime, or an inline parsed object:
95
+ `defineOpenAPIConnection` turns any OpenAPI 3.x document into connection tools, one per operation. Pass an HTTPS URL eve fetches at runtime, or an inline parsed object:
96
96
 
97
97
  ```ts title="agent/connections/petstore.ts"
98
98
  import { defineOpenAPIConnection } from "eve/connections";
@@ -104,7 +104,7 @@ export default defineOpenAPIConnection({
104
104
  });
105
105
  ```
106
106
 
107
- Each operation becomes `connection__<connection>__<operationId>` (e.g. `connection__petstore__getInventory`). When an operation has no `operationId`, Eve derives a deterministic `<method>_<sanitized-path>` name instead.
107
+ Each operation becomes `connection__<connection>__<operationId>` (e.g. `connection__petstore__getInventory`). When an operation has no `operationId`, eve derives a deterministic `<method>_<sanitized-path>` name instead.
108
108
 
109
109
  `auth`, `headers`, and `approval` work exactly as they do for MCP. There are two fields specific to OpenAPI:
110
110
 
@@ -115,7 +115,7 @@ Each operation becomes `connection__<connection>__<operationId>` (e.g. `connecti
115
115
 
116
116
  ## Interactive OAuth via Vercel Connect
117
117
 
118
- When the server uses OAuth and you want each end-user to sign in through their own browser, turn on interactive authorization with [Vercel Connect](https://vercel.com/docs/connect). The `connect()` helper from `@vercel/connect/eve` handles consent, encrypted token storage, and refresh, then hooks all of that into Eve's authorization flow:
118
+ When the server uses OAuth and you want each end-user to sign in through their own browser, turn on interactive authorization with [Vercel Connect](https://vercel.com/docs/connect). The `connect()` helper from `@vercel/connect/eve` handles consent, encrypted token storage, and refresh, then hooks all of that into eve's authorization flow:
119
119
 
120
120
  ```ts title="agent/connections/linear.ts"
121
121
  import { connect } from "@vercel/connect/eve";
@@ -132,7 +132,7 @@ export default defineMcpClientConnection({
132
132
 
133
133
  ## Self-hosted interactive OAuth
134
134
 
135
- To run your own OAuth, use `defineInteractiveAuthorization` from `eve/connections`, which takes a three-method form and needs no Vercel Connect. Eve mints a callback URL, parks (durably suspends) the turn on a framework-owned webhook, and resumes once the token comes back. Interactive auth is always `principalType: "user"`, and the factory pins that for you.
135
+ To run your own OAuth, use `defineInteractiveAuthorization` from `eve/connections`, which takes a three-method form and needs no Vercel Connect. eve mints a callback URL, parks (durably suspends) the turn on a framework-owned webhook, and resumes once the token comes back. Interactive auth is always `principalType: "user"`, and the factory pins that for you.
136
136
 
137
137
  ```ts title="agent/connections/linear.ts"
138
138
  import {
@@ -205,7 +205,7 @@ To narrow a caught error, use `isConnectionAuthorizationRequiredError(err)` and
205
205
 
206
206
  ### Handling a revoked token mid-call
207
207
 
208
- `getToken` only runs _before_ a tool call, so a grant revoked while a tool is mid-flight first surfaces as a downstream `401` inside your `execute`. A plain throw there is only a tool error, so the model sees a failure and the cached bearer sticks around. Instead, map a provider `401` to `ctx.requireAuth()` (or rethrow `ConnectionAuthorizationRequiredError`). Eve then evicts the rejected token from its per-step cache and re-runs the consent flow with a fresh one, exactly as it does for a connection whose server rejects the bearer.
208
+ `getToken` only runs _before_ a tool call, so a grant revoked while a tool is mid-flight first surfaces as a downstream `401` inside your `execute`. A plain throw there is only a tool error, so the model sees a failure and the cached bearer sticks around. Instead, map a provider `401` to `ctx.requireAuth()` (or rethrow `ConnectionAuthorizationRequiredError`). eve then evicts the rejected token from its per-step cache and re-runs the consent flow with a fresh one, exactly as it does for a connection whose server rejects the bearer.
209
209
 
210
210
  ```ts title="agent/tools/list_issues.ts"
211
211
  import { defineTool } from "eve/tools";
@@ -229,11 +229,11 @@ export default defineTool({
229
229
 
230
230
  ### Authorization and approval together
231
231
 
232
- A tool can require both sign-in (`auth`) and a human approval. The model's approval gate runs before the tool's `execute`, so the order the user sees is **approve, then sign in**. Eve records the approval on session state the moment it's granted, and that record survives the sign-in park, so when the turn resumes after authorization the tool is not put through approval again. You get one approval and one sign-in, never a double prompt.
232
+ A tool can require both sign-in (`auth`) and a human approval. The model's approval gate runs before the tool's `execute`, so the order the user sees is **approve, then sign in**. eve records the approval on session state the moment it's granted, and that record survives the sign-in park, so when the turn resumes after authorization the tool is not put through approval again. You get one approval and one sign-in, never a double prompt.
233
233
 
234
234
  ## What to read next
235
235
 
236
- - [Integrations](/integrations): browse every channel and connection Eve ships, in one gallery.
236
+ - [Integrations](/integrations): browse every channel and connection eve ships, in one gallery.
237
237
  - [Tools](./tools): authored tools live alongside connection-provided tools; the same approval helpers apply.
238
238
  - [Auth & route protection](./guides/auth-and-route-protection): the full interactive-OAuth flow with Vercel Connect.
239
239
  - [Security model](./concepts/security-model): how connection credentials stay out of the model's reach.
@@ -3,7 +3,7 @@ title: "Judge"
3
3
  description: "Grade evals with an LLM judge via t.judge.autoevals, set thresholds on the assertion, and configure the judge model."
4
4
  ---
5
5
 
6
- When no deterministic [assertion](./assertions) captures what "good" means (factual correctness, summary quality, free-form criteria), grade the run with an LLM judge. The `t.judge.*` assertions are the only model-backed ones, and they use a judge model that is resolved separately from the agent under test. Eve only uses it for scoring, never to swap out the agent.
6
+ When no deterministic [assertion](./assertions) captures what "good" means (factual correctness, summary quality, free-form criteria), grade the run with an LLM judge. The `t.judge.*` assertions are the only model-backed ones, and they use a judge model that is resolved separately from the agent under test. eve only uses it for scoring, never to swap out the agent.
7
7
 
8
8
  ```ts
9
9
  import { defineEval } from "eve/evals";
@@ -19,7 +19,7 @@ export default defineEval({
19
19
 
20
20
  ## The graders
21
21
 
22
- The judges live under `t.judge.autoevals`. The namespace names the [Braintrust autoevals](https://github.com/braintrustdata/autoevals) grader family, so the factuality and closedQA semantics are autoevals', not Eve-invented. Each grader scores `t.reply` by default and is soft by default (tracked, no gate):
22
+ The judges live under `t.judge.autoevals`. The namespace names the [Braintrust autoevals](https://github.com/braintrustdata/autoevals) grader family, so the factuality and closedQA semantics are autoevals', not eve-invented. Each grader scores `t.reply` by default and is soft by default (tracked, no gate):
23
23
 
24
24
  | Grader | Grades |
25
25
  | ---------------------------------------- | -------------------------------------------------------------------------------------- |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: "Overview"
3
- description: "Define repeatable scored checks for an Eve agent with defineEval and run them with eve eval."
3
+ description: "Define repeatable scored checks for an eve agent with defineEval and run them with eve eval."
4
4
  ---
5
5
 
6
6
  An eval is a scored check that runs your agent against real sessions and grades the result, catching regressions when you change a prompt or a tool. Drive the agent through one or more turns, assert on what it did (the run completed, the right tool ran, the reply contains the right text), and optionally ship the results to Braintrust.
@@ -9,7 +9,7 @@ Evals exercise the same HTTP surface your users hit. The runner boots (or target
9
9
 
10
10
  ## `defineEval`
11
11
 
12
- Eve discovers evals under the app-root `evals/` directory, in `.eval.ts` files. Each file is one eval by default. A file can also default-export an array to fan out over a dataset (see [Cases](./cases)). The file path is the eval's identity, so you don't author an `id` or `name`. Directories group related evals (`evals/weather/brooklyn-forecast.eval.ts` becomes id `weather/brooklyn-forecast`).
12
+ eve discovers evals under the app-root `evals/` directory, in `.eval.ts` files. Each file is one eval by default. A file can also default-export an array to fan out over a dataset (see [Cases](./cases)). The file path is the eval's identity, so you don't author an `id` or `name`. Directories group related evals (`evals/weather/brooklyn-forecast.eval.ts` becomes id `weather/brooklyn-forecast`).
13
13
 
14
14
  ```text
15
15
  my-agent/
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: "Reporters"
3
- description: "Ship eval results to Braintrust experiments or JUnit XML. Eve runs and scores everything itself."
3
+ description: "Ship eval results to Braintrust experiments or JUnit XML. eve runs and scores everything itself."
4
4
  ---
5
5
 
6
- Eve runs and grades everything itself; reporters ship the results out. The CLI prints a console summary by default (one line per eval, with failed assertions and their messages), and reporters from `eve/evals/reporters` add destinations on top.
6
+ eve runs and grades everything itself; reporters ship the results out. The CLI prints a console summary by default (one line per eval, with failed assertions and their messages), and reporters from `eve/evals/reporters` add destinations on top.
7
7
 
8
8
  You are responsible for ensuring any observability or eval provider is approved for the data exported to it.
9
9
 
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  title: "Getting Started"
3
- description: "Install Eve, scaffold your first agent, give it a tool, and run it locally."
3
+ description: "Install eve, scaffold your first agent, give it a tool, and run it locally."
4
4
  ---
5
5
 
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. You'll scaffold an app, add a tool, run it locally, then create, stream, and continue a session over HTTP.
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. You'll scaffold an app, add a tool, run it locally, then create, stream, and continue a session over HTTP.
7
7
 
8
8
  <Callout>
9
- Eve is currently in beta and subject to the [Vercel beta
9
+ eve is currently in beta and subject to the [Vercel beta
10
10
  terms](https://vercel.com/docs/release-phases/public-beta-agreement); the framework, APIs,
11
11
  documentation, and behavior may change before general availability.
12
12
  </Callout>
@@ -28,7 +28,7 @@ If you skip this, the dev TUI flags the missing credential and its `/model` comm
28
28
 
29
29
  ## Quick start
30
30
 
31
- `npx` runs `eve init` without installing Eve first:
31
+ `npx` runs `eve init` without installing eve first:
32
32
 
33
33
  ```bash
34
34
  npx eve@latest init my-agent
@@ -36,7 +36,7 @@ npx eve@latest init my-agent
36
36
 
37
37
  The command:
38
38
 
39
- - Creates an npm-managed child directory and uses Eve's default model
39
+ - Creates an npm-managed child directory and uses eve's default model
40
40
  - Installs dependencies and initializes Git
41
41
  - Starts the development server and opens the interactive [terminal UI](./guides/dev-tui)
42
42
 
@@ -44,11 +44,11 @@ Type a message and watch the model loop run. Pass `--channel-web-nextjs` to add
44
44
 
45
45
  `eve init` holds the terminal, so stop it with Ctrl+C to get your shell back before editing the generated agent. The command does not create a Vercel project or deploy.
46
46
 
47
- To add Eve to an existing project, run `eve init .` from a directory that already has a `package.json` and no `agent/` files yet. Eve adds the missing `eve`, `ai`, and `zod` dependencies without touching anything else the project owns. The Eve dependency and the Node engine come from the same release. Eve pins `engines.node` to the lowest major that release supports (for example `24.x`). It keeps an existing range only when every version that range allows stays within that major; otherwise it replaces the range and prints a warning.
47
+ To add eve to an existing project, run `eve init .` from a directory that already has a `package.json` and no `agent/` files yet. eve adds the missing `eve`, `ai`, and `zod` dependencies without touching anything else the project owns. The eve dependency and the Node engine come from the same release. eve pins `engines.node` to the lowest major that release supports (for example `24.x`). It keeps an existing range only when every version that range allows stays within that major; otherwise it replaces the range and prints a warning.
48
48
 
49
49
  ## Manual installation
50
50
 
51
- To wire Eve into an existing app by hand instead of using `eve init`, first declare a compatible Node runtime in `package.json`:
51
+ To wire eve into an existing app by hand instead of using `eve init`, first declare a compatible Node runtime in `package.json`:
52
52
 
53
53
  ```json
54
54
  {
@@ -135,7 +135,7 @@ The same CLI can point at a deployment. `npx eve dev https://your-app.vercel.app
135
135
 
136
136
  ## Send a message
137
137
 
138
- Every Eve app exposes the same stable HTTP API. Start a durable session:
138
+ Every eve app exposes the same stable HTTP API. Start a durable session:
139
139
 
140
140
  ```bash
141
141
  curl -X POST http://127.0.0.1:3000/eve/v1/session \
@@ -186,8 +186,8 @@ See [Sessions, runs and streaming](./concepts/sessions-runs-and-streaming) for t
186
186
 
187
187
  If a coding agent (Claude Code, Cursor, and the like) is doing the setup, hand it this prompt:
188
188
 
189
- <CopyPrompt text="Set up an Eve agent for the user. Eve is a filesystem-first TypeScript framework for durable agents, published as the npm package eve. Read its docs: once eve is installed they are bundled in the package at node_modules/eve/docs; before eve is installed, read the published Introduction and Getting Started pages. If the project has no Eve app, scaffold one with `npx eve@latest init <name>`; add `--channel-web-nextjs` only when the user wants Web Chat. The init command installs dependencies, initializes Git, and starts the dev server, so run it in a controllable process and stop it with Ctrl+C before editing. To add Eve to an existing app, run `eve init .`, or install the dependencies by hand with `npm install eve@latest ai zod` (init adds ai and zod; the by-hand path needs all three). Make sure agent/agent.ts and agent/instructions.md exist, then add a first typed tool at agent/tools/get_weather.ts using defineTool from eve/tools with a Zod inputSchema and an inline execute. Start the dev server again, then exercise the HTTP API: create a session with POST /eve/v1/session, attach to GET /eve/v1/session/:id/stream, and send a follow-up with the returned continuationToken. Verify with the project's typecheck, adapt model and provider choices to the project, and do not commit unless the user asks.">
190
- Set up an Eve agent: read the Eve docs (bundled at node_modules/eve/docs once eve is
189
+ <CopyPrompt text="Set up an eve agent for the user. eve is a filesystem-first TypeScript framework for durable agents, published as the npm package eve. Read its docs: once eve is installed they are bundled in the package at node_modules/eve/docs; before eve is installed, read the published Introduction and Getting Started pages. If the project has no eve app, scaffold one with `npx eve@latest init <name>`; add `--channel-web-nextjs` only when the user wants Web Chat. The init command installs dependencies, initializes Git, and starts the dev server, so run it in a controllable process and stop it with Ctrl+C before editing. To add eve to an existing app, run `eve init .`, or install the dependencies by hand with `npm install eve@latest ai zod` (init adds ai and zod; the by-hand path needs all three). Make sure agent/agent.ts and agent/instructions.md exist, then add a first typed tool at agent/tools/get_weather.ts using defineTool from eve/tools with a Zod inputSchema and an inline execute. Start the dev server again, then exercise the HTTP API: create a session with POST /eve/v1/session, attach to GET /eve/v1/session/:id/stream, and send a follow-up with the returned continuationToken. Verify with the project's typecheck, adapt model and provider choices to the project, and do not commit unless the user asks.">
190
+ Set up an eve agent: read the eve docs (bundled at node_modules/eve/docs once eve is
191
191
  installed), scaffold with `npx eve@latest init <name>` (or `npm install eve@latest ai zod` in an existing app), add
192
192
  a typed tool at agent/tools/get_weather.ts, run it with `npm run dev`, then create a session, stream
193
193
  it, and send a follow-up.
@@ -3,7 +3,7 @@ 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
 
6
- Eve has two independent auth systems:
6
+ eve has two independent auth systems:
7
7
 
8
8
  - **Route auth** (inbound) decides who can reach your agent's HTTP routes. It runs at the channel layer, gating the request before any model work runs.
9
9
  - **Tool and connection auth** (outbound) is how your agent signs in to an external service it calls, like an OAuth MCP server. It happens later, when a tool or connection actually reaches out.
@@ -18,7 +18,7 @@ The route-auth policy lives on the HTTP channel factory (`agent/channels/eve.ts`
18
18
  - `POST /eve/v1/session/:sessionId`
19
19
  - `GET /eve/v1/session/:sessionId/stream`
20
20
 
21
- These routes are protected by the channel's auth policy. Eve fails closed by default: production browser traffic is rejected unless you configure an authenticator that accepts it, and anonymous access requires an explicit `none()`.
21
+ These routes are protected by the channel's auth policy. eve fails closed by default: production browser traffic is rejected unless you configure an authenticator that accepts it, and anonymous access requires an explicit `none()`.
22
22
 
23
23
  `GET /eve/v1/health` is always public and skips the walk entirely, so load balancers and uptime monitors can probe it without credentials.
24
24
 
@@ -33,7 +33,7 @@ export default eveChannel({
33
33
 
34
34
  ## The ordered auth walk
35
35
 
36
- `auth` takes a single `AuthFn` or an array that Eve walks in order. Each entry has three possible outcomes:
36
+ `auth` takes a single `AuthFn` or an array that eve walks in order. Each entry has three possible outcomes:
37
37
 
38
38
  - returns a `SessionAuthContext`: accept the request and stop the walk
39
39
  - returns `null` / `undefined`: skip to the next entry
@@ -92,7 +92,7 @@ Any other thrown error follows the normal channel failure path. When building a
92
92
  | `httpBasic(...)` | Operator or service access via a shared username/password. |
93
93
  | `jwtHmac(...)` | You control a shared-secret JWT signer. |
94
94
  | `jwtEcdsa(...)` | You verify asymmetric JWTs minted by another system. |
95
- | `oidc(...)` | You want Eve to verify OIDC-issued tokens from an arbitrary issuer. |
95
+ | `oidc(...)` | You want eve to verify OIDC-issued tokens from an arbitrary issuer. |
96
96
 
97
97
  Exercise caution for agents that process non-public, sensitive, regulated, or production data unless you have implemented other access controls.
98
98
 
@@ -199,7 +199,7 @@ export default eveChannel({
199
199
  });
200
200
  ```
201
201
 
202
- In production, `placeholderAuth()` returns a structured `401` so a generated web chat app can say "auth isn't configured yet" instead of throwing an internal error. Replace it before a browser caller submits a production request: swap in your app's `AuthFn` or one of the shipped helpers. Delete the authored channel file entirely and Eve falls back to the framework default `[localDev(), vercelOidc()]`, which also rejects production browser traffic.
202
+ In production, `placeholderAuth()` returns a structured `401` so a generated web chat app can say "auth isn't configured yet" instead of throwing an internal error. Replace it before a browser caller submits a production request: swap in your app's `AuthFn` or one of the shipped helpers. Delete the authored channel file entirely and eve falls back to the framework default `[localDev(), vercelOidc()]`, which also rejects production browser traffic.
203
203
 
204
204
  Keep secret values (`ROUTE_AUTH_BASIC_PASSWORD`, signing keys) in environment variables. Route-auth secrets never land in compiled artifacts. The runtime re-materializes them from the authored channel definition at boot.
205
205
 
@@ -218,7 +218,7 @@ Route auth does not enforce session ownership. If multiple users or tenants can
218
218
 
219
219
  ## Tool and connection auth
220
220
 
221
- Tool and connection auth is how your agent reaches an external service that wants an interactive sign-in, like an OAuth MCP server. Both a connection and an individual tool can declare an `auth` strategy; Eve drives the sign-in, caches the token per step, and re-runs the call once the caller authorizes.
221
+ Tool and connection auth is how your agent reaches an external service that wants an interactive sign-in, like an OAuth MCP server. Both a connection and an individual tool can declare an `auth` strategy; eve drives the sign-in, caches the token per step, and re-runs the call once the caller authorizes.
222
222
 
223
223
  ### On a connection
224
224
 
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: "Continuations"
3
- description: "Persist and resume Eve client sessions with continuation tokens, session IDs, and stream cursors."
3
+ description: "Persist and resume eve client sessions with continuation tokens, session IDs, and stream cursors."
4
4
  ---
5
5
 
6
- Every Eve client turn returns two handles, and mixing them up is a common mistake. The TypeScript client tracks both for you:
6
+ Every eve client turn returns two handles, and mixing them up is a common mistake. The TypeScript client tracks both for you:
7
7
 
8
8
  - `continuationToken`: the resume handle. Use it to send the next user turn.
9
9
  - `sessionId`: the stream-and-inspect handle. Use it to attach to event history.
@@ -115,4 +115,4 @@ for await (const event of session.stream()) {
115
115
 
116
116
  - [Streaming](./streaming): stream events and reconnect by index
117
117
  - [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming): the raw HTTP contract
118
- - [Eve channel](../../channels/eve): where continuation tokens come from
118
+ - [eve channel](../../channels/eve): where continuation tokens come from
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: "Output Schema"
3
- description: "Request structured results from Eve client turns and read typed data from MessageResult."
3
+ description: "Request structured results from eve client turns and read typed data from MessageResult."
4
4
  ---
5
5
 
6
6
  Pass `outputSchema` on a client turn when the caller needs structured data instead of only assistant text. The runtime makes the model satisfy the schema before the turn settles, then emits the final payload as `result.completed`.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: "TypeScript SDK Overview"
3
- description: "Call an Eve agent from TypeScript with Client, sessions, auth, and health checks."
3
+ description: "Call an eve agent from TypeScript with Client, sessions, auth, and health checks."
4
4
  ---
5
5
 
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 (newline-delimited JSON) stream loop.
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 (newline-delimited JSON) stream loop.
7
7
 
8
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
 
@@ -19,7 +19,7 @@ const client = new Client({
19
19
  });
20
20
  ```
21
21
 
22
- `host` is the origin where the Eve routes are mounted. In a same-origin browser integration this is often `""`; scripts and backend services usually name the full URL.
22
+ `host` is the origin where the eve routes are mounted. In a same-origin browser integration this is often `""`; scripts and backend services usually name the full URL.
23
23
 
24
24
  ## Check health
25
25
 
@@ -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](../../channels/eve) route requires credentials:
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](../../channels/eve): the HTTP API this client calls
114
+ - [eve channel](../../channels/eve): the HTTP API this client calls
115
115
  - [Sessions, runs & streaming](../../concepts/sessions-runs-and-streaming): the raw HTTP contract
116
116
  - [Frontend](../frontend/overview): browser UI with `useEveAgent`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: "Streaming"
3
- description: "Consume Eve client stream events live, reconnect by event index, and aggregate turn results."
3
+ description: "Consume eve client stream events live, reconnect by event index, and aggregate turn results."
4
4
  ---
5
5
 
6
6
  Every `ClientSession.send()` call posts the turn, then reads the session's NDJSON (newline-delimited JSON) event stream. `MessageResponse` gives you two ways to consume that stream, aggregating it with `result()` or iterating it live.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: "Deployment"
3
- description: "A production checklist for shipping an Eve agent on Vercel, covering build output, env and secrets, sandbox backend, prewarm, auth, deploy, and verify."
3
+ description: "A production checklist for shipping an eve agent on Vercel, covering build output, env and secrets, sandbox backend, prewarm, auth, deploy, and verify."
4
4
  ---
5
5
 
6
- Eve runs the same way locally and on Vercel, so taking an agent from `eve dev` to production is mostly mechanical. Work through this checklist in order.
6
+ eve runs the same way locally and on Vercel, so taking an agent from `eve dev` to production is mostly mechanical. Work through this checklist in order.
7
7
 
8
8
  ## 1. Build
9
9
 
@@ -13,7 +13,7 @@ Eve runs the same way locally and on Vercel, so taking an agent from `eve dev` t
13
13
  eve build
14
14
  ```
15
15
 
16
- When `VERCEL` is set (every hosted Vercel build sets it), `eve build` writes the Vercel output bundle under `.vercel/output`. A plain local `eve build` skips that bundle. Either way you get Eve's compiled framework artifacts under `.eve/`, including the discovery manifest, compiled manifest, diagnostics, and module map. Open those to see which authored surface a deployment will load. For the artifact guide and what to do when `eve build` fails, see [Observability](./instrumentation).
16
+ When `VERCEL` is set (every hosted Vercel build sets it), `eve build` writes the Vercel output bundle under `.vercel/output`. A plain local `eve build` skips that bundle. Either way you get eve's compiled framework artifacts under `.eve/`, including the discovery manifest, compiled manifest, diagnostics, and module map. Open those to see which authored surface a deployment will load. For the artifact guide and what to do when `eve build` fails, see [Observability](./instrumentation).
17
17
 
18
18
  ## 2. Environment variables and secrets
19
19
 
@@ -37,11 +37,11 @@ export default defineSandbox({
37
37
  });
38
38
  ```
39
39
 
40
- Leave `backend` off and Eve falls back to `defaultBackend()`, which picks the Vercel backend on hosted builds and the local backend everywhere else. One definition, both environments.
40
+ Leave `backend` off and eve falls back to `defaultBackend()`, which picks the Vercel backend on hosted builds and the local backend everywhere else. One definition, both environments.
41
41
 
42
42
  ## 4. Build-time sandbox prewarm
43
43
 
44
- During hosted builds, Eve prewarms reusable Vercel sandbox templates so the first session doesn't pay the cold-start cost:
44
+ During hosted builds, eve prewarms reusable Vercel sandbox templates so the first session doesn't pay the cold-start cost:
45
45
 
46
46
  - Prewarm runs only when both `VERCEL` and `VERCEL_DEPLOYMENT_ID` are present.
47
47
  - A sandbox with no `bootstrap()` and no workspace seed files gets skipped.
@@ -103,9 +103,9 @@ Once the agent is deployed, the platform auto-detects `eve` as the framework and
103
103
 
104
104
  Agent Runs is separate from the OpenTelemetry exporters configured in [Observability](./instrumentation). Those still work and are the recommended path if you want spans in Braintrust, Datadog, or another third-party backend.
105
105
 
106
- ## How Eve sits behind a host framework
106
+ ## How eve sits behind a host framework
107
107
 
108
- 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. Either way, the agent surface and HTTP contract are identical. For mounting Eve in Next.js (`withEve`) and the other supported frameworks, see [Frontend](./frontend/nextjs).
108
+ 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. Either way, the agent surface and HTTP contract are identical. For mounting eve in Next.js (`withEve`) and the other supported frameworks, see [Frontend](./frontend/nextjs).
109
109
 
110
110
  ## Checklist
111
111
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: "Dev TUI"
3
- description: "Drive an Eve agent locally in an interactive terminal UI. Chat, stream, approve tools, answer questions, tune the display, and point it at a deployment."
3
+ description: "Drive an eve agent locally in an interactive terminal UI. Chat, stream, approve tools, answer questions, tune the display, and point it at a deployment."
4
4
  ---
5
5
 
6
6
  `eve dev` boots the local runtime and drops you into an interactive terminal UI. You chat with the agent, watch it stream, approve its tool calls, and answer the questions it asks back.
@@ -46,7 +46,7 @@ Each command echoes as an invocation line, asks through a bordered panel that ta
46
46
 
47
47
  ### Configure the model and provider
48
48
 
49
- Bare `/model` opens the configure menu. "Change model" runs the same searchable model picker setup uses (the Vercel AI Gateway catalog, pre-selected on the model the runtime is serving). A model change is written into your agent's authored source, and the command reports success only after Eve confirms the new id. `/model <provider/model-id>` applies one directly, skipping the menu.
49
+ Bare `/model` opens the configure menu. "Change model" runs the same searchable model picker setup uses (the Vercel AI Gateway catalog, pre-selected on the model the runtime is serving). A model change is written into your agent's authored source, and the command reports success only after eve confirms the new id. `/model <provider/model-id>` applies one directly, skipping the menu.
50
50
 
51
51
  The provider row opens the provider questions: which model provider to use, and how to connect. Picking something other than Vercel AI Gateway shows wiring instructions for your own provider and stops there, leaving any existing setup untouched. For Vercel AI Gateway, you either paste your own `AI_GATEWAY_API_KEY` (saved straight to `.env.local`) or connect via a project. Connecting via a project asks for a Vercel team, opens that team's existing-project list (picking again re-links), then pulls the project's environment so an AI Gateway credential lands in `.env.local`. The dev server reloads env files automatically, with no restart needed.
52
52