Skip to main content
By the end of this page an agent you own, as editable TypeScript, is answering messages on one of your channels.
Prefer to send messages from your own backend instead of deploying code here? Start with the messaging quickstart.

1. Install the CLI

Working with a coding agent? Install the skills first and it will know every command on this page, plus defineAgent and defineTool:

2. Log in

Your browser opens, you sign in, pick the project this agent will live in, and authorize. The CLI stores the key in ~/.zavu/credentials.json with mode 0600. Confirm which project you are pointed at:

3. Scaffold an agent

agents init is the guided path. It picks a factory agent, finds or creates the sender it runs on, writes the files, and registers the function.
To see what you can start from first:
Seven factory agents ship today, across sales, support and front desk. Some are voice agents that answer the phone; all of them also run on text channels.
Scaffolds into ./fermi, registers the function, and sets the SENDER_ID secret from the sender you passed. Use --dir to scaffold elsewhere.
Gives you a bare index.ts to write defineAgent yourself. The Functions quickstart walks that path in full.
An agent answers on a sender, and a sender needs at least one channel. The fastest channel to turn on needs no phone number and no external account:
Recipients cannot reply on one-way SMS, so use it to verify the deploy works, then add a real channel. npx zavudev agents init --buy-number buys a number and creates the sender for you instead.

4. Install dependencies

Deploy works without this, but every local check does not: fn invoke, tsc --noEmit, and your editor all need the dev dependencies installed.

5. Look at what you got

The scaffold is one file, and it is the whole agent. (You can split it up later — imports between your files are resolved on deploy.)
index.ts
provider: "zavu" is our managed AI gateway. No API key of your own required; model usage is billed from your Zavu balance. Bring your own key by setting provider to openai, anthropic, google or mistral.
Any secret the agent needs beyond SENDER_ID is listed by agents pull when it finishes. Set each one before deploying:

6. Try a tool without deploying

This runs the handler on your machine, with no cloud round-trip and nothing charged. Use it to get the business logic right before anyone can talk to the agent.

7. Deploy

Read the lines above the checkmark. Deploy prints its warnings before the success line, and they cover the cases where a green deploy did not do what it looks like: tools attached to an agent whose channels will never call them, or a second agent landing on a sender that already has one.
Your code is now the source of truth. Every deploy reconciles the live agent to match the file, so a defineAgent you delete deletes the agent.

8. Talk to it

Message the sender’s number from your phone, or call it if the agent has voice enabled. To check the reply without touching a real channel:
A dry run never executes tools, because a test must not cause real side effects. It tells you so in its warnings. Live conversations on every channel do call them.

9. Watch it run

Next steps

How agents work

What a deploy actually does, and what happens when a message arrives

Defining agents

Every field of defineAgent, including voice

Defining tools

Give the agent access to your systems

Knowledge bases

Ground the answers in your own documents

Voice agents

Answer and place phone calls with the same agent

Bring your framework

Deploy an eve project without restructuring it