Skip to content
Tone is open sourcestar us on GitHub to follow along

getting started

Your first agent

Configure an agent, point a phone number at it, and answer a real call.

This page walks you from a fresh install to a working voice agent that answers a phone call. It takes about ten minutes.

Define the agent

Agents are declared in YAML. Create agents/scheduler.yaml:

id: scheduler
name: Appointment scheduler
voice: openai.alloy
language: en-US
greeting: "Hi, this is Tone. How can I help?"
tools:
  - check_availability
  - book_appointment

Register your tools

Tools are TypeScript functions. Create tools/availability.ts:

import { defineTool } from 'tone/tools';
import { z } from 'zod';
 
export const checkAvailability = defineTool({
  name: 'check_availability',
  description: 'Check available slots for a given day.',
  schema: z.object({ date: z.string() }),
  handler: async ({ date }) => {
    return await calendar.findSlots(date);
  },
});

Connect a number

In the dashboard at localhost:3000, paste your Twilio credentials and pick a number to route to the scheduler agent. Or use the CLI:

tone numbers connect +14155551234 --agent scheduler

Call it

Call the number from your phone. The agent should answer with the greeting you configured, then walk through booking an appointment.

If it doesn't, check the call logs in the dashboard — every turn, every tool call, and every model response is captured for replay.