# Curb > Curb is a React and TypeScript framework for production voice agents: the tree you render becomes the LLM context and tools. Curb runs on LiveKit Agents. You write an agent as React components, with skills, tools and state in plain code, and test whole conversations from the command line before they ship. It needs Node.js 22.12 or newer. Start a project with `npm create curb.js .`. Everything on one page: https://curbjs.com/llms-full.txt ## Getting Started - [Introduction](https://curbjs.com/docs/index.md): Curb is a React framework for voice agents: the tree you render becomes the model's context and tools. How these docs are organized. - [Installation](https://curbjs.com/docs/installation.md): Create a Curb project, sign in, talk to your agent and change it. - [Project structure](https://curbjs.com/docs/project-structure.md): What each file in a Curb project does, and where a skill lives. - [Agents and skills](https://curbjs.com/docs/agents-and-skills.md): Write agent.tsx and your skills: what is in every request, and what the model opens when it needs it. - [Tools](https://curbjs.com/docs/tools.md): Give the agent actions: schemas, results, calling your own API and the tools Curb provides. - [State and conditional tools](https://curbjs.com/docs/state.md): Keep state for the whole call, and render a tool only when it should exist. - [Instructions and context](https://curbjs.com/docs/instructions-and-context.md): Write what the model reads: instructions, facts and files from context/. - [Voice](https://curbjs.com/docs/voice.md): Choose the LLM, speech-to-text and text-to-speech of an agent, and of each skill. - [Testing](https://curbjs.com/docs/testing.md): Test an agent from the command line: curb check, curb say and curb test. - [Deploying](https://curbjs.com/docs/deploying.md): Put an agent live with curb deploy, or on your own servers. - [Upgrading](https://curbjs.com/docs/upgrading.md): Update Curb in a project, and what to do after an upgrade. ## Guides - [Human handoff](https://curbjs.com/docs/human-handoff.md): Put the caller through to a person, with a way out when nobody answers. - [Complex handoffs](https://curbjs.com/docs/complex-handoffs.md): Hand over by code, to a skill with its own voice, or to a person with a note. - [Confirmations](https://curbjs.com/docs/confirmations.md): Hold an action until the caller says yes, with the exact question they hear. - [Step-by-step procedures](https://curbjs.com/docs/procedures.md): Take the model through ordered steps, and unlock the last tool only when every step is done. - [Who speaks first](https://curbjs.com/docs/who-speaks-first.md): Set who opens the call, and the exact words when they must not vary. - [Mid-call changes](https://curbjs.com/docs/mid-call-changes.md): Change language, voice or model during a call, from the agent, the page or the host. - [Override the LiveKit pipeline](https://curbjs.com/docs/livekit-pipeline.md): Edit the LiveKit session and agent on every route, or write your own worker. - [Knowing the caller](https://curbjs.com/docs/knowing-the-caller.md): Use what a call already knows, and what the caller's page said, without trusting it. - [Pronunciation](https://curbjs.com/docs/pronunciation.md): Make the agent hear and say your product's names correctly. - [Your own LLM](https://curbjs.com/docs/custom-llm.md): Run an agent on Anthropic, OpenAI or any OpenAI-compatible endpoint. - [MCP servers](https://curbjs.com/docs/mcp.md): Give an agent tools from remote MCP servers. - [App messages](https://curbjs.com/docs/app-messages.md): Exchange messages with the caller's page and the host, without the model. - [Goals and experiments](https://curbjs.com/docs/goals-and-experiments.md): Say what a successful call is, and compare variants of an agent. - [Outbound calls](https://curbjs.com/docs/outbound-calls.md): The agent's side of a call it places: what it knows, and how it opens. - [Calls from your website](https://curbjs.com/docs/web-calls.md): Start a call from a page, and tell the agent where it came from. - [Improve from real calls](https://curbjs.com/docs/improve-from-calls.md): Fix an agent from a real call's transcript, and test the fix. - [Working with a coding agent](https://curbjs.com/docs/coding-agents.md): Build a Curb agent with a coding agent: the loop, the rules and connecting KugelAudio. - [The preview](https://curbjs.com/docs/preview.md): The curb dev page: chat, voice, the context the model reads, tools and recorded conversations. - [Self-hosting](https://curbjs.com/docs/hosting.md): Run an agent on your own servers: dev, the LiveKit worker, a built artifact or a managed runner. - [Migrate from ElevenLabs](https://curbjs.com/docs/migrate-from-elevenlabs.md): Rebuild an ElevenLabs agent in Curb, test it and move your numbers. - [Example projects](https://curbjs.com/docs/examples.md): Five complete projects with scenarios you can run. ## Concepts - [How Curb works](https://curbjs.com/docs/how-it-works.md): Curb is a real React renderer that targets a model's context. The renderer and the turn loop. - [What the model receives](https://curbjs.com/docs/what-the-model-receives.md): The real requests of a conversation, and how state changes the tools in them. - [Skill lifecycle](https://curbjs.com/docs/skill-lifecycle.md): When a skill joins the request, what it takes with it when it leaves, and how much history the model reads. - [Voice sessions](https://curbjs.com/docs/voice-sessions.md): The one voice session every route runs: how a call opens, its identity, how it ends and what happens when something fails. - [Architecture](https://curbjs.com/docs/architecture.md): What Curb does, what a host does, and how they talk. ## API Reference - [Overview](https://curbjs.com/docs/api-reference.md): Every part of Curb's API, by kind. - [Components](https://curbjs.com/docs/components.md): Agent, Skill, Tool, Procedure and every other component, with props and examples. - [Hooks](https://curbjs.com/docs/hooks.md): useRouter, useSession, useSend and every other hook, with signatures and examples. - [Functions](https://curbjs.com/docs/functions.md): defineAgent, createAgentStore, defineTool, the errors, and what programs built on Curb use. - [Providers](https://curbjs.com/docs/providers.md): Every LLM, speech-to-text and text-to-speech provider of curb/providers, and its options. - [Client](https://curbjs.com/docs/client.md): curb/client: the browser side of a call, for your own page. - [Testing](https://curbjs.com/docs/testing-api.md): curb/testing: the scenario function and its checks. - [Orchestration](https://curbjs.com/docs/orchestration-api.md): curb/orchestration: server-only exports for scripts. - [Configuration](https://curbjs.com/docs/configuration.md): Every environment variable Curb reads, and the package.json settings. - [CLI](https://curbjs.com/docs/cli.md): Every curb command and its options. - [Diagnostics](https://curbjs.com/docs/diagnostics.md): The check and fix loop, and every code curb check can report. - [Host protocol](https://curbjs.com/docs/host-protocol.md): How a host starts, follows and ends calls on a runner, with app messages and live settings. ## More - [Glossary](https://curbjs.com/docs/glossary.md): What the terms in these docs mean. - [Changelog](https://curbjs.com/docs/changelog.md): What changed in each version of Curb.