Skip to main content
An agent on Zavu is one object that answers on every channel. The same prompt, model, knowledge base and skills serve a WhatsApp message and a phone call. There are two ways to get one, and they produce the same thing:
  • In code — declare it with defineAgent in a Zavu Function and deploy. The code is the source of truth.
  • In the dashboard or over the API — create and configure it directly.
This page follows the code-first path end to end, because it is the one with moving parts you cannot see.

The pieces

Two things live in Zavu Cloud that are easy to conflate:
  • Your Function is your TypeScript, running in its own isolated runtime. It holds your tool handlers — the code that talks to your systems.
  • The Agent is the configuration a conversation runs against: the prompt, the model, which channels trigger it, its knowledge bases, and pointers to your tools.
zavu deploy publishes the first and derives the second from it.

What a deploy actually does

The step worth understanding is the manifest. After publishing, Zavu asks your function what it declared, and reconciles reality to match it. That is what makes the code the source of truth:
  • A defineAgent you added becomes a new agent.
  • A field you changed is updated.
  • A defineAgent you deleted deletes the agent.
Read the lines above the ✓. zavu deploy prints warnings before the success line, and exits non-zero when your declarations were not synced at all. 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.

A message arrives

A call arrives

Voice adds speech in and out around the same agent, and one important difference: on a call the model is offered your tools. The caller can interrupt while the agent is speaking (barge-in) and the agent stops to listen. It can also transfer to a human, or end the call.

Where tools run

This is the single most common surprise, so it is worth stating plainly. A text agent with tools attached does not refuse — it answers “let me check that, one moment” and then does nothing, which is the worst outcome on a messaging channel. Use a flow with a tool step when a text agent needs to reach your backend. zavu agents test warns you whenever an agent has tools its channels will never call.

What you can verify, and when

Most of the loop is free and instant. The last step is not.
agents test runs the text path. It exercises the prompt, the model and the knowledge base, and it reports what it could not prove — a disabled agent, tools its channels will not call, flows it did not evaluate. Treat those warnings as part of the result.

Agents and senders

A sender is the identity a conversation happens on: a phone number, a WhatsApp account, an email address. An agent can answer on several senders. A sender answers with at most one agent — connecting one that is already in use is rejected, naming the agent that holds it.
An agent can also exist with no sender at all while you build it. It will not receive anything until you connect one and enable it.

Where to go next

Functions quickstart

Write and deploy your first agent in code.

Factory agents

Start from a production agent instead of a blank file.

Voice agents

Answer and place phone calls.

Agent setup

Create and configure an agent without writing code.