[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71EQ1F0FT6CYHTGV5PQNX18":3,"skill-same:01M71EQ1F0FT6CYHTGV5PQNX18":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M71EQ1F0FT6CYHTGV5PQNX18","agents",null,"Build voice AI agents with ElevenLabs. Use when creating voice assistants, customer service bots, interactive voice characters, or any real-time voice conversation experience.","iDorgham\u002FWorkspace-Factory","iDorgham","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F136521493?v=4","01M6CNGBDAHE4ARW3YJEF4X2FD","Dorgham","01M71E8H3CXZ7DJX59MTM9JEB2",1,"MIT","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002F.ai\u002Fskills\u002Fofficial_elevenlabs_agents\u002Fskill.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"interactive","elevenlabs","service","voice","build","customer","voice ai agents","with","api","ai agents","characters","when","access","use","internet","time","real-time","bots","conversation","2026-11-10 10:12:30",false,"---\nname: agents\ndescription: Build voice AI agents with ElevenLabs. Use when creating voice assistants, customer service bots, interactive voice characters, or any real-time voice conversation experience.\nlicense: MIT\ncompatibility: Requires internet access and an ElevenLabs API key (ELEVENLABS_API_KEY).\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"ELEVENLABS_API_KEY\"]}, \"primaryEnv\": \"ELEVENLABS_API_KEY\"}}\n---\n\n# ElevenLabs Agents Platform\n\nBuild voice AI agents with natural conversations, multiple LLM providers, custom tools, and easy web embedding.\n\n> **Setup:** See Installation Guide (`references\u002Finstallation.md`) for CLI and SDK setup.\n\n## Quick Start with CLI\n\nThe ElevenLabs CLI is the recommended way to create and manage agents:\n\n```bash\n# Install CLI and authenticate\nnpm install -g @elevenlabs\u002Fcli\nelevenlabs auth login\n\n# Initialize project and create an agent\nelevenlabs agents init\nelevenlabs agents add \"My Assistant\" --template complete\n\n# Push to ElevenLabs platform\nelevenlabs agents push\n```\n\n**Available templates:** `complete`, `minimal`, `voice-only`, `text-only`, `customer-service`, `assistant`\n\n### Python\n\n```python\nfrom elevenlabs import ElevenLabs\n\nclient = ElevenLabs()\n\nagent = client.conversational_ai.agents.create(\n    name=\"My Assistant\",\n    enable_versioning=True,\n    conversation_config={\n        \"agent\": {\n            \"first_message\": \"Hello! How can I help?\",\n            \"language\": \"en\",\n            \"prompt\": {\n                \"prompt\": \"You are a helpful assistant. Be concise and friendly.\",\n                \"llm\": \"gemini-2.0-flash\",\n                \"temperature\": 0.7\n            }\n        },\n        \"tts\": {\"voice_id\": \"JBFqnCBsd6RMkjVDRZzb\"}\n    }\n)\n```\n\n### JavaScript\n\n```javascript\nimport { ElevenLabsClient } from \"@elevenlabs\u002Felevenlabs-js\";\nconst client = new ElevenLabsClient();\n\nconst agent = await client.conversationalAi.agents.create({\n  name: \"My Assistant\",\n  enableVersioning: true,\n  conversationConfig: {\n    agent: {\n      firstMessage: \"Hello! How can I help?\",\n      language: \"en\",\n      prompt: {\n        prompt: \"You are a helpful assistant.\",\n        llm: \"gemini-2.0-flash\",\n        temperature: 0.7\n      }\n    },\n    tts: { voiceId: \"JBFqnCBsd6RMkjVDRZzb\" }\n  }\n});\n```\n\n### cURL\n\n```bash\ncurl -X POST \"https:\u002F\u002Fapi.elevenlabs.io\u002Fv1\u002Fconvai\u002Fagents\u002Fcreate?enable_versioning=true\" \\\n  -H \"xi-api-key: $ELEVENLABS_API_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -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\"}}}'\n```\n\n## Starting Conversations\n\n**Server-side (Python):** Get signed URL for client connection:\n```python\nsigned_url = client.conversational_ai.conversations.get_signed_url(\n    agent_id=\"your-agent-id\",\n    environment=\"staging\",\n)\n```\n\n**Client-side (JavaScript):**\n```javascript\nimport { Conversation } from \"@elevenlabs\u002Fclient\";\n\nconst conversation = await Conversation.startSession({\n  agentId: \"your-agent-id\",\n  environment: \"staging\",\n  onMessage: (msg) => console.log(\"Agent:\", msg.message),\n  onUserTranscript: (t) => console.log(\"User:\", t.message),\n  onError: (e) => console.error(e)\n});\n```\n\n**React Hook:** Wrap hook consumers in `ConversationProvider`. Prefer granular hooks such as\n`useConversationControls` and `useConversationStatus` for session controls and UI state;\n`useConversation` remains available as the convenience all-in-one hook. Pass provider-level\ncallbacks such as `onError` when you want React to handle conversation errors in one place.\n```typescript\nimport {\n  ConversationProvider,\n  useConversationControls,\n  useConversationStatus,\n} from \"@elevenlabs\u002Freact\";\n\nfunction Agent({ signedUrl }: { signedUrl: string }) {\n  const { startSession, endSession } = useConversationControls();\n  const { status } = useConversationStatus();\n\n  if (status === \"connected\") {\n    return \u003Cbutton onClick={endSession}>End conversation\u003C\u002Fbutton>;\n  }\n\n  return (\n    \u003Cbutton onClick={() => startSession({ signedUrl })}>\n      Start conversation\n    \u003C\u002Fbutton>\n  );\n}\n\nfunction App({ signedUrl }: { signedUrl: string }) {\n  return (\n    \u003CConversationProvider\n      onError={(error) => console.error(\"Conversation error:\", error)}\n    >\n      \u003CAgent signedUrl={signedUrl} \u002F>\n    \u003C\u002FConversationProvider>\n  );\n}\n```\n\n## Configuration\n\n| Provider | Models |\n|----------|--------|\n| 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` |\n| 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` |\n| Google | `gemini-3.1-flash-lite-preview`, `gemini-3.1-pro-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` |\n| ElevenLabs | `glm-45-air-fp8`, `qwen3-30b-a3b`, `qwen35-35b-a3b`, `qwen35-397b-a17b`, `gpt-oss-120b` |\n| Custom | `custom-llm` (bring your own endpoint) |\n\nUse `GET \u002Fv1\u002Fconvai\u002Fllm\u002Flist` to inspect the current model catalog, including deprecation state, token\u002Fcontext limits, and capability flags such as image-input support.\n\n**Popular voices:** `JBFqnCBsd6RMkjVDRZzb` (George), `EXAVITQu4vr4xnSDxMaL` (Sarah), `onwK4e9ZLuTAKqWW03F9` (Daniel), `XB0fDUnXU5powFXDhCwa` (Charlotte)\n\n**Turn eagerness:** `patient` (waits longer for user to finish), `normal`, or `eager` (responds quickly)\n\nSee Agent Configuration (`references\u002Fagent_configuration.md`) for all options.\n\n## Tools\n\nExtend agents with webhook, client, or built-in system tools. Tools are defined inside `conversation_config.agent.prompt`:\n\nWorkspace environment variables can resolve per-environment server tool URLs, headers, and auth connections, and runtime system variables such as `{{system__conversation_history}}` can pass full conversation context into tool calls when needed.\n\n```python\n\"prompt\": {\n    \"prompt\": \"You are a helpful assistant that can check the weather.\",\n    \"llm\": \"gemini-2.0-flash\",\n    \"tools\": [\n        # Webhook: server-side API call\n        {\"type\": \"webhook\", \"name\": \"get_weather\", \"description\": \"Get weather\",\n         \"api_schema\": {\"url\": \"https:\u002F\u002Fapi.example.com\u002Fweather\", \"method\": \"POST\",\n             \"request_body_schema\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\"}}, \"required\": [\"location\"]}}},\n        # Client: runs in the browser\n        {\"type\": \"client\", \"name\": \"show_product\", \"description\": \"Display a product\",\n         \"parameters\": {\"type\": \"object\", \"properties\": {\"productId\": {\"type\": \"string\"}}, \"required\": [\"productId\"]}}\n    ],\n    \"built_in_tools\": {\n        \"end_call\": {},\n        \"transfer_to_number\": {\"transfers\": [{\"transfer_destination\": {\"type\": \"phone\", \"phone_number\": \"+1234567890\"}, \"condition\": \"User asks for human support\"}]}\n    }\n}\n```\n\n**Client tools** run in browser:\n```javascript\nclientTools: {\n  show_product: async ({ productId }) => {\n    document.getElementById(\"product\").src = `\u002Fproducts\u002F${productId}`;\n    return { success: true };\n  }\n}\n```\n\nSee Client Tools Reference (`references\u002Fclient_tools.md`) for complete documentation.\n\n## Widget Embedding\n\n```html\n\u003Celevenlabs-convai agent-id=\"your-agent-id\">\u003C\u002Felevenlabs-convai>\n\u003Cscript src=\"https:\u002F\u002Funpkg.com\u002F@elevenlabs\u002Fconvai-widget-embed\" async type=\"text\u002Fjavascript\">\u003C\u002Fscript>\n```\n\nCustomize with attributes: `avatar-image-url`, `action-text`, `start-call-text`, `end-call-text`.\n\nSee Widget Embedding Reference (`references\u002Fwidget_embedding.md`) for all options.\n\n## Outbound Calls\n\nMake outbound phone calls using your agent via Twilio integration:\n\n### Python\n\n```python\nresponse = client.conversational_ai.twilio.outbound_call(\n    agent_id=\"your-agent-id\",\n    agent_phone_number_id=\"your-phone-number-id\",\n    to_number=\"+1234567890\",\n    call_recording_enabled=True\n)\nprint(f\"Call initiated: {response.conversation_id}\")\n```\n\n### JavaScript\n\n```javascript\nconst response = await client.conversationalAi.twilio.outboundCall({\n  agentId: \"your-agent-id\",\n  agentPhoneNumberId: \"your-phone-number-id\",\n  toNumber: \"+1234567890\",\n  callRecordingEnabled: true,\n});\n```\n\n### cURL\n\n```bash\ncurl -X POST \"https:\u002F\u002Fapi.elevenlabs.io\u002Fv1\u002Fconvai\u002Ftwilio\u002Foutbound-call\" \\\n  -H \"xi-api-key: $ELEVENLABS_API_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"agent_id\": \"your-agent-id\", \"agent_phone_number_id\": \"your-phone-number-id\", \"to_number\": \"+1234567890\", \"call_recording_enabled\": true}'\n```\n\nSee Outbound Calls Reference (`references\u002Foutbound_calls.md`) for configuration overrides and dynamic variables.\n\n## Managing Agents\n\n### Using CLI (Recommended)\n\n```bash\n# List agents and check status\nelevenlabs agents list\nelevenlabs agents status\n\n# Import agents from platform to local config\nelevenlabs agents pull                      # Import all agents\nelevenlabs agents pull --agent \u003Cagent-id>   # Import specific agent\n\n# Push local changes to platform\nelevenlabs agents push              # Upload configurations\nelevenlabs agents push --dry-run    # Preview changes first\n\n# Add tools\nelevenlabs tools add-webhook \"Weather API\"\nelevenlabs tools add-client \"UI Tool\"\n```\n\n### Project Structure\n\nThe CLI creates a project structure for managing agents:\n\n```\nyour_project\u002F\n├── agents.json       # Agent definitions\n├── tools.json        # Tool configurations\n├── tests.json        # Test configurations\n├── agent_configs\u002F    # Individual agent configs\n├── tool_configs\u002F     # Individual tool configs\n└── test_configs\u002F     # Individual test configs\n```\n\n### SDK Examples\n\n```python\n# List\nagents = client.conversational_ai.agents.list()\n\n# Get\nagent = client.conversational_ai.agents.get(agent_id=\"your-agent-id\")\n\n# Update (partial - only include fields to change)\nclient.conversational_ai.agents.update(agent_id=\"your-agent-id\", name=\"New Name\")\nclient.conversational_ai.agents.update(agent_id=\"your-agent-id\",\n    conversation_config={\n        \"agent\": {\"prompt\": {\"prompt\": \"New instructions\", \"llm\": \"claude-sonnet-4\"}}\n    })\n\n# Delete\nclient.conversational_ai.agents.delete(agent_id=\"your-agent-id\")\n```\n\nSee Agent Configuration (`references\u002Fagent_configuration.md`) for all configuration options and SDK examples.\n\n## Error Handling\n\n```python\ntry:\n    agent = client.conversational_ai.agents.create(...)\nexcept Exception as e:\n    print(f\"API error: {e}\")\n```\n\nCommon errors: **401** (invalid key), **404** (not found), **422** (invalid config), **429** (rate limit)\n\n## References\n\n- Installation Guide (`references\u002Finstallation.md`) - SDK setup and migration\n- Agent Configuration (`references\u002Fagent_configuration.md`) - All config options and CRUD examples\n- Client Tools (`references\u002Fclient_tools.md`) - Webhook, client, and system tools\n- Widget Embedding (`references\u002Fwidget_embedding.md`) - Website integration\n- Outbound Calls (`references\u002Foutbound_calls.md`) - Twilio phone call integration\n","# ElevenLabs Agents Platform\n\nBuild voice AI agents with natural conversations, multiple LLM providers, custom tools, and easy web embedding.\n\n> **Setup:** See Installation Guide (`references\u002Finstallation.md`) for CLI and SDK setup.\n\n## Quick Start with CLI\n\nThe ElevenLabs CLI is the recommended way to create and manage agents:\n\n```bash\n# Install CLI and authenticate\nnpm install -g @elevenlabs\u002Fcli\nelevenlabs auth login\n\n# Initialize project and create an agent\nelevenlabs agents init\nelevenlabs agents add \"My Assistant\" --template complete\n\n# Push to ElevenLabs platform\nelevenlabs agents push\n```\n\n**Available templates:** `complete`, `minimal`, `voice-only`, `text-only`, `customer-service`, `assistant`\n\n### Python\n\n```python\nfrom elevenlabs import ElevenLabs\n\nclient = ElevenLabs()\n\nagent = client.conversational_ai.agents.create(\n    name=\"My Assistant\",\n    enable_versioning=True,\n    conversation_config={\n        \"agent\": {\n            \"first_message\": \"Hello! How can I help?\",\n            \"language\": \"en\",\n            \"prompt\": {\n                \"prompt\": \"You are a helpful assistant. Be concise and friendly.\",\n                \"llm\": \"gemini-2.0-flash\",\n                \"temperature\": 0.7\n            }\n        },\n        \"tts\": {\"voice_id\": \"JBFqnCBsd6RMkjVDRZzb\"}\n    }\n)\n```\n\n### JavaScript\n\n```javascript\nimport { ElevenLabsClient } from \"@elevenlabs\u002Felevenlabs-js\";\nconst client = new ElevenLabsClient();\n\nconst agent = await client.conversationalAi.agents.create({\n  name: \"My Assistant\",\n  enableVersioning: true,\n  conversationConfig: {\n    agent: {\n      firstMessage: \"Hello! How can I help?\",\n      language: \"en\",\n      prompt: {\n        prompt: \"You are a helpful assistant.\",\n        llm: \"gemini-2.0-flash\",\n        temperature: 0.7\n      }\n    },\n    tts: { voiceId: \"JBFqnCBsd6RMkjVDRZzb\" }\n  }\n});\n```\n\n### cURL\n\n```bash\ncurl -X POST \"https:\u002F\u002Fapi.elevenlabs.io\u002Fv1\u002Fconvai\u002Fagents\u002Fcreate?enable_versioning=true\" \\\n  -H \"xi-api-key: $ELEVENLABS_API_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -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\"}}}'\n```\n\n## Starting Conversations\n\n**Server-side (Python):** Get signed URL for client connection:\n```python\nsigned_url = client.conversational_ai.conversations.get_signed_url(\n    agent_id=\"your-agent-id\",\n    environment=\"staging\",\n)\n```\n\n**Client-side (JavaScript):**\n```javascript\nimport { Conversation } from \"@elevenlabs\u002Fclient\";\n\nconst conversation = await Conversation.startSession({\n  agentId: \"your-agent-id\",\n  environment: \"staging\",\n  onMessage: (msg) => console.log(\"Agent:\", msg.message),\n  onUserTranscript: (t) => console.log(\"User:\", t.message),\n  onError: (e) => console.error(e)\n});\n```\n\n**React Hook:** Wrap hook consumers in `ConversationProvider`. Prefer granular hooks such as\n`useConversationControls` and `useConversationStatus` for session controls and UI state;\n`useConversation` remains available as the convenience all-in-one hook. Pass provider-level\ncallbacks such as `onError` when you want React to handle conversation errors in one place.\n```typescript\nimport {\n  ConversationProvider,\n  useConversationControls,\n  useConversationStatus,\n} from \"@elevenlabs\u002Freact\";\n\nfunction Agent({ signedUrl }: { signedUrl: string }) {\n  const { startSession, endSession } = useConversationControls();\n  const { status } = useConversationStatus();\n\n  if (status === \"connected\") {\n    return \u003Cbutton onClick={endSession}>End conversation\u003C\u002Fbutton>;\n  }\n\n  return (\n    \u003Cbutton onClick={() => startSession({ signedUrl })}>\n      Start conversation\n    \u003C\u002Fbutton>\n  );\n}\n\nfunction App({ signedUrl }: { signedUrl: string }) {\n  return (\n    \u003CConversationProvider\n      onError={(error) => console.error(\"Conversation error:\", error)}\n    >\n      \u003CAgent signedUrl={signedUrl} \u002F>\n    \u003C\u002FConversationProvider>\n  );\n}\n```\n\n## Configuration\n\n| Provider | Models |\n|----------|--------|\n| 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` |\n| 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` |\n| Google | `gemini-3.1-flash-lite-preview`, `gemini-3.1-pro-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` |\n| ElevenLabs | `glm-45-air-fp8`, `qwen3-30b-a3b`, `qwen35-35b-a3b`, `qwen35-397b-a17b`, `gpt-oss-120b` |\n| Custom | `custom-llm` (bring your own endpoint) |\n\nUse `GET \u002Fv1\u002Fconvai\u002Fllm\u002Flist` to inspect the current model catalog, including deprecation state, token\u002Fcontext limits, and capability flags such as image-input support.\n\n**Popular voices:** `JBFqnCBsd6RMkjVDRZzb` (George), `EXAVITQu4vr4xnSDxMaL` (Sarah), `onwK4e9ZLuTAKqWW03F9` (Daniel), `XB0fDUnXU5powFXDhCwa` (Charlotte)\n\n**Turn eagerness:** `patient` (waits longer for user to finish), `normal`, or `eager` (responds quickly)\n\nSee Agent Configuration (`references\u002Fagent_configuration.md`) for all options.\n\n## Tools\n\nExtend agents with webhook, client, or built-in system tools. Tools are defined inside `conversation_config.agent.prompt`:\n\nWorkspace environment variables can resolve per-environment server tool URLs, headers, and auth connections, and runtime system variables such as `{{system__conversation_history}}` can pass full conversation context into tool calls when needed.\n\n```python\n\"prompt\": {\n    \"prompt\": \"You are a helpful assistant that can check the weather.\",\n    \"llm\": \"gemini-2.0-flash\",\n    \"tools\": [\n        # Webhook: server-side API call\n        {\"type\": \"webhook\", \"name\": \"get_weather\", \"description\": \"Get weather\",\n         \"api_schema\": {\"url\": \"https:\u002F\u002Fapi.example.com\u002Fweather\", \"method\": \"POST\",\n             \"request_body_schema\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\"}}, \"required\": [\"location\"]}}},\n        # Client: runs in the browser\n        {\"type\": \"client\", \"name\": \"show_product\", \"description\": \"Display a product\",\n         \"parameters\": {\"type\": \"object\", \"properties\": {\"productId\": {\"type\": \"string\"}}, \"required\": [\"productId\"]}}\n    ],\n    \"built_in_tools\": {\n        \"end_call\": {},\n        \"transfer_to_number\": {\"transfers\": [{\"transfer_destination\": {\"type\": \"phone\", \"phone_number\": \"+1234567890\"}, \"condition\": \"User asks for human support\"}]}\n    }\n}\n```\n\n**Client tools** run in browser:\n```javascript\nclientTools: {\n  show_product: async ({ productId }) => {\n    document.getElementById(\"product\").src = `\u002Fproducts\u002F${productId}`;\n    return { success: true };\n  }\n}\n```\n\nSee Client Tools Reference (`references\u002Fclient_tools.md`) for complete documentation.\n\n## Widget Embedding\n\n```html\n\u003Celevenlabs-convai agent-id=\"your-agent-id\">\u003C\u002Felevenlabs-convai>\n\u003Cscript src=\"https:\u002F\u002Funpkg.com\u002F@elevenlabs\u002Fconvai-widget-embed\" async type=\"text\u002Fjavascript\">\u003C\u002Fscript>\n```\n\nCustomize with attributes: `avatar-image-url`, `action-text`, `start-call-text`, `end-call-text`.\n\nSee Widget Embedding Reference (`references\u002Fwidget_embedding.md`) for all options.\n\n## Outbound Calls\n\nMake outbound phone calls using your agent via Twilio integration:\n\n### Python\n\n```python\nresponse = client.conversational_ai.twilio.outbound_call(\n    agent_id=\"your-agent-id\",\n    agent_phone_number_id=\"your-phone-number-id\",\n    to_number=\"+1234567890\",\n    call_recording_enabled=True\n)\nprint(f\"Call initiated: {response.conversation_id}\")\n```\n\n### JavaScript\n\n```javascript\nconst response = await client.conversationalAi.twilio.outboundCall({\n  agentId: \"your-agent-id\",\n  agentPhoneNumberId: \"your-phone-number-id\",\n  toNumber: \"+1234567890\",\n  callRecordingEnabled: true,\n});\n```\n\n### cURL\n\n```bash\ncurl -X POST \"https:\u002F\u002Fapi.elevenlabs.io\u002Fv1\u002Fconvai\u002Ftwilio\u002Foutbound-call\" \\\n  -H \"xi-api-key: $ELEVENLABS_API_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"agent_id\": \"your-agent-id\", \"agent_phone_number_id\": \"your-phone-number-id\", \"to_number\": \"+1234567890\", \"call_recording_enabled\": true}'\n```\n\nSee Outbound Calls Reference (`references\u002Foutbound_calls.md`) for configuration overrides and dynamic variables.\n\n## Managing Agents\n\n### Using CLI (Recommended)\n\n```bash\n# List agents and check status\nelevenlabs agents list\nelevenlabs agents status\n\n# Import agents from platform to local config\nelevenlabs agents pull                      # Import all agents\nelevenlabs agents pull --agent \u003Cagent-id>   # Import specific agent\n\n# Push local changes to platform\nelevenlabs agents push              # Upload configurations\nelevenlabs agents push --dry-run    # Preview changes first\n\n# Add tools\nelevenlabs tools add-webhook \"Weather API\"\nelevenlabs tools add-client \"UI Tool\"\n```\n\n### Project Structure\n\nThe CLI creates a project structure for managing agents:\n\n```\nyour_project\u002F\n├── agents.json       # Agent definitions\n├── tools.json        # Tool configurations\n├── tests.json        # Test configurations\n├── agent_configs\u002F    # Individual agent configs\n├── tool_configs\u002F     # Individual tool configs\n└── test_configs\u002F     # Individual test configs\n```\n\n### SDK Examples\n\n```python\n# List\nagents = client.conversational_ai.agents.list()\n\n# Get\nagent = client.conversational_ai.agents.get(agent_id=\"your-agent-id\")\n\n# Update (partial - only include fields to change)\nclient.conversational_ai.agents.update(agent_id=\"your-agent-id\", name=\"New Name\")\nclient.conversational_ai.agents.update(agent_id=\"your-agent-id\",\n    conversation_config={\n        \"agent\": {\"prompt\": {\"prompt\": \"New instructions\", \"llm\": \"claude-sonnet-4\"}}\n    })\n\n# Delete\nclient.conversational_ai.agents.delete(agent_id=\"your-agent-id\")\n```\n\nSee Agent Configuration (`references\u002Fagent_configuration.md`) for all configuration options and SDK examples.\n\n## Error Handling\n\n```python\ntry:\n    agent = client.conversational_ai.agents.create(...)\nexcept Exception as e:\n    print(f\"API error: {e}\")\n```\n\nCommon errors: **401** (invalid key), **404** (not found), **422** (invalid config), **429** (rate limit)\n\n## References\n\n- Installation Guide (`references\u002Finstallation.md`) - SDK setup and migration\n- Agent Configuration (`references\u002Fagent_configuration.md`) - All config options and CRUD examples\n- Client Tools (`references\u002Fclient_tools.md`) - Webhook, client, and system tools\n- Widget Embedding (`references\u002Fwidget_embedding.md`) - Website integration\n- Outbound Calls (`references\u002Foutbound_calls.md`) - Twilio phone call integration\n",{"name":5,"license":15,"metadata":43,"description":7,"compatibility":48},{"openclaw":44},{"requires":45,"primaryEnv":47},{"env":46},[47],"ELEVENLABS_API_KEY","Requires internet access and an ElevenLabs API key (ELEVENLABS_API_KEY).","master","c2e410e11df4d80d885e0ecf0583ef3c926df736",".ai\u002Fskills\u002Fofficial_elevenlabs_agents",0,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory","https:\u002F\u002Fgithub.com\u002FiDorgham","Dorgham.me","hey I'm Dorgham \r\nI code, I create, and AI codes back. \r\nMaybe we can give AI the chance!! now we begin. 🚀🤖\r\n... . . . git commit -m \"Hello, Future\" ","2026-05-04 18:39:09",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add iDorgham\u002FWorkspace-Factory --skill agents",{"tool":64,"command":65},"bunx","bunx skills add iDorgham\u002FWorkspace-Factory --skill agents",{"tool":67,"command":68},"pnpm","pnpm dlx skills add iDorgham\u002FWorkspace-Factory --skill agents","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002F.ai\u002Fskills\u002Fofficial_elevenlabs_agents\u002Fskill.md",true,[],[73,104,127,149,168,191],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":103},"01M71P8WVBMB2X3D24R0YT0B0E","vercel-react-view-transitions","Guide for implementing smooth, native-feeling animations using React's View Transition API (`\u003CViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter\u002Fexit of components, animate list reorder, implement directional (forward\u002Fback) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Fskills\u002Fofficial_vercel_labs_react_view_transitions\u002Fskill.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[85,86,87,88,89,90,91,92,93,94,95,96,97,98,30,99,27,100,101,102],"react","vercel react view transitions","view","react view transitions","vercel","transitions","shared","back","Animation","css","types","states","element","implementing","components","route","create","libraries","2026-11-10 13:02:02",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":103},"01M71P8TDGHZ289TSAC5VTG2EW","vercel-react-native-skills","React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Fskills\u002Fofficial_vercel_labs_react_native_skills\u002Fskill.md",[110],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[85,112,113,89,114,115,116,117,98,118,30,119,99,120,121,122,123,124,125,126],"react native","native","vercel react native skills","react native skills","modules","performance","apps","tasks","mobile","expo","list","mobile performance","platform","animations","for",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":134,"publishedAt":103},"01M71P8QK4JF5BYRGYDDGPZQG9","vercel-react-best-practices","React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React\u002FNext.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Fskills\u002Fofficial_vercel_labs_react_best_practices\u002Fskill.md",[133],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[85,135,136,89,137,117,138,30,139,119,99,140,141,142,143,144,145,146,147,148],"react best practices","vercel react best practices","best practices","writing","code","data fetching","react components","next","refactoring","data","patterns","Optimization","guidelines","triggers",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":156,"publishedAt":103},"01M71P8HVEA70K5N6ZVJCG2ED3","vercel-composition-patterns","React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Fskills\u002Fofficial_vercel_labs_composition_patterns\u002Fskill.md",[155],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[157,89,158,145,159,160,161,162,148,163,164,32,30,165,119,99,166,167,27,85],"Composition","composition patterns","vercel composition patterns","react composition patterns","react 19","render","boolean","component architecture","reusable","architecture","react composition",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":177,"publishedAt":103},"01M71P60XXKKP222ZFJRG7R373","supabase-postgres-best-practices","Postgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations.","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Fskills\u002Fofficial_supabase_supabase_postgres_best_practices\u002Fskill.md",[174],{"categoryNo":175,"categoryName":176,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000010","后端与接口",[178,179,180,181,137,182,183,184,126,146,117,185,186,138,187,32,188,189,190,30],"postgres best practices","supabase","postgres","supabase postgres best practices","categories","postgres performance","advanced","correct","schema","impact","Rules","critical","database",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":198,"publishedAt":214},"01M71P2ZCEJD0PKC458YTP1FJW","portable-text-serialization","Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text. Use when implementing Portable Text rendering in any frontend framework, building custom serializers for non-standard block types, converting Portable Text to HTML strings server-side, converting Portable Text to Markdown, extracting plain text from Portable Text, or troubleshooting rendering issues with marks, blocks, lists, or custom types.","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Fskills\u002Fofficial_sanity_io_portable_text_serialization\u002Fskill.md",[197],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[199,200,201,202,203,95,204,162,205,98,206,207,30,85,208,209,210,211,212,213],"text","portable text serialization","portable","serialization","extracting","strings","issues","frontend","svelte","sanity","astro","server","markdown","rendering","vue","2026-11-10 10:56:23"]