> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zavu.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# eve

> Use Zavu from an agent built with eve — as an API connection today, or deploy the whole project onto Zavu.

## Zavu + eve

[eve](https://eve.dev) is Vercel's open-source agent framework. There are two
ways to combine it with Zavu, depending on where you want the agent to run.

## Option 1: deploy the eve project on Zavu

If your agent is instructions + tools, deploy it directly — it becomes a
first-class Zavu agent answering on your senders:

```sh theme={null}
npx zavudev import owner/repo --sender sndr_123
```

See [Deploy an eve project](/guides/functions/deploy-eve-project) for what
maps, what doesn't, and the compatibility report.

## Option 2: keep the agent on eve, call Zavu as a connection

If your agent relies on eve's own runtime (sandbox, subagents, durable
sessions), keep it there and give it Zavu's messaging API as tools. eve's
OpenAPI connections turn our spec into one tool per operation:

```ts theme={null}
// agent/connections/zavu.ts
import { defineOpenAPIConnection } from "eve/connections"

export default defineOpenAPIConnection({
  spec: "https://docs.zavu.dev/openapi.json",
  description: "Send SMS, WhatsApp, email, and voice messages via Zavu.",
  auth: { getToken: async () => ({ token: process.env.ZAVU_API_KEY! }) },
  operations: {
    // Start narrow; every operation is available if you want it.
    allow: ["sendMessage", "getMessage", "introspectPhone", "introspectEmail"],
  },
})
```

The agent then gets tools like `zavu__sendMessage`. Recommendations:

* Gate sends behind an approval so the model cannot message people
  unsupervised: add `approval: once()` (from `eve/tools/approval`) to the
  connection config if your review policy calls for it.
* Scope the API key: create a key for this agent, and use a
  [sub-account](/guides/sub-accounts/overview) with a spending cap if the
  agent messages on behalf of a client.
* `sendMessage` accepts phone numbers (E.164), email addresses, and chat IDs
  in the same `to` field, with `channel: "auto"` routing — one tool covers
  every channel.

## Which option to pick

| Your agent needs                                               | Run it on                    |
| -------------------------------------------------------------- | ---------------------------- |
| Messaging channels, voice calls, an inbox, per-message billing | Zavu (option 1)              |
| Sandboxed compute, subagents, durable multi-day sessions       | eve, calling Zavu (option 2) |

Both directions use the same account, senders, and message history — you can
prototype with option 2 and migrate to option 1 (or the reverse) without
changing anything else.
