Skip to main content

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.

Zavu Functions

Zavu Functions let you run TypeScript in our cloud and wire it directly to your WhatsApp/SMS/Email senders. You write the code locally, run zavu deploy, and seconds later your agent is live with tools backed by real business logic.
import { defineAgent, defineTool } from "@zavu/functions"

defineAgent({
  senderId: process.env.SENDER_ID!,
  name: "Bella",
  provider: "zavu",
  model: "openai/gpt-4o-mini",
  prompt: "Eres Bella, anfitriona de la Pizzeria. Sé breve.",
  channels: ["whatsapp"],
})

defineTool({
  name: "check_availability",
  description: "Get free reservation slots for a date and party size.",
  parameters: {
    type: "object",
    properties: {
      date: { type: "string" },
      partySize: { type: "number" },
    },
    required: ["date", "partySize"],
  },
  handler: async ({ date, partySize }) => {
    // your real booking logic — DB, POS, external API, whatever
    return { available: true, slots: ["19:00", "21:00"] }
  },
})
That’s the entire integration. One file. zavu deploy. Done.

When to use Functions

AI agent with real actions

Customer asks something, the LLM decides which tool to call, your code runs, real data goes back as the answer.

Custom webhooks

Receive inbound from Stripe, GitHub, your own systems, then forward as a WhatsApp message.

Scheduled jobs

Daily report digests, reminder broadcasts, cleanup tasks.

Event-driven automation

React to message.inbound, broadcast.completed, etc. with custom logic without managing webhook receivers yourself.

How it relates to AI Agents

Zavu has two complementary ways to build agents:
You wantUse
A no-code agent configured from the dashboardAI Agents
An agent with custom business logic in your own codeZavu Functions (this guide)
Both — start no-code, evolve to codeStart with AI Agents, migrate when you need tools or custom flows
Functions can fully manage an AI Agent: the defineAgent call creates and keeps the agent config in sync with your code. Once your function declares defineAgent, the agent is “managed by the function” — the dashboard surfaces this and disables manual edits to prevent drift.

Mental model

+----------------+        +--------------------+        +-----------+
| WhatsApp user  | -----> | Zavu sender (WABA) | -----> | AI Agent  |
+----------------+        +--------------------+        +-----------+
                                                              |
                                                       (tool call)
                                                              v
                                            +-------------------------------+
                                            | Your Zavu Function (Lambda)   |
                                            |  defineTool(handler)          |
                                            +-------------------------------+
                                                              |
                                                       (return result)
                                                              v
                                                       Agent answers user
  • Lambda-backed. Each function compiles to an AWS Lambda owned by Zavu. You don’t see AWS — zavu deploy handles bundling, dependencies, and publishing.
  • Internal invocation. When the agent calls a tool, we use AWS IAM-signed Lambda invokes — your function is not publicly exposed. No HTTP, no HMAC secrets to rotate, no DDoS surface.
  • Native event binding. Functions can also subscribe to Zavu events (message.inbound, broadcast.completed, etc) via triggers.
  • Auto-provisioned credentials. Every function gets a scoped ZAVU_API_KEY in its environment so it can call our SDK without you handling key distribution.

Quick tour

1

Install the CLI

brew install zavudev/tools/zavu
# or grab a standalone binary from
# https://github.com/zavudev/zavu-cli/releases
2

Login (one time)

zavu login
Opens your browser, lets you pick a project. The API key is saved to ~/.zavu/credentials.json and used by every later command.
3

Scaffold a function

zavu fn init --template restaurant-booking -y
cd reservations
Creates index.ts with defineAgent + defineTool boilerplate.
4

Set secrets

zavu fn secrets set SENDER_ID jn76vnxet8g5nq661by3v06y1581bmmn
The agent will run on this WhatsApp sender. Get the ID from zavu senders list.
5

Deploy

zavu deploy
Bundle, upload, agent + tools synced to your sender.
6

Try it

Send a WhatsApp to the sender’s number. The agent answers, calls your tool handlers, returns real data.

Continue

Quickstart

Full step-by-step from zero to live agent in 10 minutes.

CLI reference

Every zavu command, flag by flag.

Define an agent

defineAgent API, providers, prompts, models.

Define tools

defineTool API, schemas, handlers, error handling.

Secrets

Environment variables encrypted at rest.

Triggers

Listen to Zavu events from your function.

Runtime versions

How pinning works, when to upgrade.

Examples

Complete restaurant booking agent, walked through.