$npx -y skills add calesthio/OpenMontage --skill agentsBuild voice AI agents with ElevenLabs. Use when creating voice assistants, customer service bots, interactive voice characters, or any real-time voice conversation experience.
| 1 | # ElevenLabs Agents Platform |
| 2 | |
| 3 | Build voice AI agents with natural conversations, multiple LLM providers, custom tools, and easy web embedding. |
| 4 | |
| 5 | > **Setup:** See [Installation Guide](references/installation.md) for CLI and SDK setup. |
| 6 | |
| 7 | ## Quick Start with CLI |
| 8 | |
| 9 | The ElevenLabs CLI is the recommended way to create and manage agents: |
| 10 | |
| 11 | ```bash |
| 12 | # Install CLI and authenticate |
| 13 | npm install -g @elevenlabs/cli |
| 14 | elevenlabs auth login |
| 15 | |
| 16 | # Initialize project and create an agent |
| 17 | elevenlabs agents init |
| 18 | elevenlabs agents add "My Assistant" --template complete |
| 19 | |
| 20 | # Push to ElevenLabs platform |
| 21 | elevenlabs agents push |
| 22 | ``` |
| 23 | |
| 24 | **Available templates:** `complete`, `minimal`, `voice-only`, `text-only`, `customer-service`, `assistant` |
| 25 | |
| 26 | ### Python |
| 27 | |
| 28 | ```python |
| 29 | from elevenlabs import ElevenLabs |
| 30 | |
| 31 | client = ElevenLabs() |
| 32 | |
| 33 | agent = client.conversational_ai.agents.create( |
| 34 | name="My Assistant", |
| 35 | enable_versioning=True, |
| 36 | conversation_config={ |
| 37 | "agent": { |
| 38 | "first_message": "Hello! How can I help?", |
| 39 | "language": "en", |
| 40 | "prompt": { |
| 41 | "prompt": "You are a helpful assistant. Be concise and friendly.", |
| 42 | "llm": "gemini-2.0-flash", |
| 43 | "temperature": 0.7 |
| 44 | } |
| 45 | }, |
| 46 | "tts": {"voice_id": "JBFqnCBsd6RMkjVDRZzb"} |
| 47 | } |
| 48 | ) |
| 49 | ``` |
| 50 | |
| 51 | ### JavaScript |
| 52 | |
| 53 | ```javascript |
| 54 | import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js"; |
| 55 | const client = new ElevenLabsClient(); |
| 56 | |
| 57 | const agent = await client.conversationalAi.agents.create({ |
| 58 | name: "My Assistant", |
| 59 | enableVersioning: true, |
| 60 | conversationConfig: { |
| 61 | agent: { |
| 62 | firstMessage: "Hello! How can I help?", |
| 63 | language: "en", |
| 64 | prompt: { |
| 65 | prompt: "You are a helpful assistant.", |
| 66 | llm: "gemini-2.0-flash", |
| 67 | temperature: 0.7 |
| 68 | } |
| 69 | }, |
| 70 | tts: { voiceId: "JBFqnCBsd6RMkjVDRZzb" } |
| 71 | } |
| 72 | }); |
| 73 | ``` |
| 74 | |
| 75 | ### cURL |
| 76 | |
| 77 | ```bash |
| 78 | curl -X POST "https://api.elevenlabs.io/v1/convai/agents/create?enable_versioning=true" \ |
| 79 | -H "xi-api-key: $ELEVENLABS_API_KEY" -H "Content-Type: application/json" \ |
| 80 | -d '{"name": "My Assistant", "conversation_config": {"agent": {"first_message": "Hello!", "language": "en", "prompt": {"prompt": "You are helpful.", "llm": "gemini-2.0-flash"}}, "tts": {"voice_id": "JBFqnCBsd6RMkjVDRZzb"}}}' |
| 81 | ``` |
| 82 | |
| 83 | ## Starting Conversations |
| 84 | |
| 85 | **Server-side (Python):** Get signed URL for client connection: |
| 86 | ```python |
| 87 | signed_url = client.conversational_ai.conversations.get_signed_url( |
| 88 | agent_id="your-agent-id", |
| 89 | environment="staging", |
| 90 | ) |
| 91 | ``` |
| 92 | |
| 93 | **Client-side (JavaScript):** |
| 94 | ```javascript |
| 95 | import { Conversation } from "@elevenlabs/client"; |
| 96 | |
| 97 | const conversation = await Conversation.startSession({ |
| 98 | agentId: "your-agent-id", |
| 99 | environment: "staging", |
| 100 | onMessage: (msg) => console.log("Agent:", msg.message), |
| 101 | onUserTranscript: (t) => console.log("User:", t.message), |
| 102 | onError: (e) => console.error(e) |
| 103 | }); |
| 104 | ``` |
| 105 | |
| 106 | **React Hook:** |
| 107 | ```typescript |
| 108 | import { useConversation } from "@elevenlabs/react"; |
| 109 | |
| 110 | const conversation = useConversation({ onMessage: (msg) => console.log(msg) }); |
| 111 | // Get a signed URL for the target environment from your backend, then: |
| 112 | await conversation.startSession({ signedUrl: token }); |
| 113 | ``` |
| 114 | |
| 115 | ## Configuration |
| 116 | |
| 117 | | Provider | Models | |
| 118 | |----------|--------| |
| 119 | | OpenAI | `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-4o`, `gpt-4o-mini`, `gpt-4-turbo` | |
| 120 | | Anthropic | `claude-sonnet-4-6`, `claude-sonnet-4-5`, `claude-sonnet-4`, `claude-haiku-4-5`, `claude-3-7-sonnet`, `claude-3-5-sonnet`, `claude-3-haiku` | |
| 121 | | Google | `gemini-3.1-flash-lite-preview`, `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-2.5-flash`, `gemini-2.5-flash-lite`, `gemini-2.0-flash`, `gemini-2.0-flash-lite` | |
| 122 | | ElevenLabs | `glm-45-air-fp8`, `qwen3-30b-a3b`, `gpt-oss-120b` | |
| 123 | | Custom | `custom-llm` (bring your own endpoint) | |
| 124 | |
| 125 | Use `GET /v1/convai/llm/list` to inspect the current model catalog, including deprecation state, token/context limits, and capability flags such as image-input support. |
| 126 | |
| 127 | **Popular voices:** `JBFqnCBsd6RMkjVDRZzb` (George), `EXAVITQu4vr4xnSDxMaL` (Sarah), `onwK4e9ZLuTAKqWW03F9` (Daniel), `XB0fDUnXU5powFXDhCwa` (Charlotte) |
| 128 | |
| 129 | **Turn eagerness:** `patient` (waits longer for user to finish), `normal`, or `eager` (responds quickly) |
| 130 | |
| 131 | See [Agent Configuration](references/agent-configuration.md) for all options. |
| 132 | |
| 133 | ## Tools |
| 134 | |
| 135 | Extend agents with webhook, client, or built-in system tools. Tools are defined inside `conversation_config.agent.prompt`: |
| 136 | |
| 137 | Workspace environment variables can resolve per-environment server tool URLs, headers, and auth connections, and runtime system vari |