skills/elevenlabs-agent-builder/SKILL.md
Build, validate, and deploy ElevenLabs Conversational AI voice agents from any source material. Use whenever someone wants to create a voice agent, phone bot, IVR agent, or conversational AI on ElevenLabs. Also use when migrating from Retell, Vapi, Bland, or other voice platforms. Triggers on ElevenLabs agent JSON, voice agent architecture, agent deployment, agent validation, knowledge base prep for voice agents, fixing agent errors, or building phone/web voice bots. Even casual mentions like 'build me a phone bot' or 'convert this Retell agent' should trigger this skill.
npx skillsauth add jakerains/agentskills elevenlabs-agent-builderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build production-ready ElevenLabs voice agents from any source: natural language descriptions, call scripts, SOPs, documentation, competitor configs (Retell/Vapi/Bland), or existing ElevenLabs agents.
elevenlabs-agent-builder/
├── SKILL.md ← You are here (workflow + routing)
├── scripts/
│ ├── validate_el_json.py ← Pre-deployment structural validator
│ ├── deploy_with_tools.py ← Deploy agent + tools + KB + tests
│ ├── deploy_kb.py ← Upload knowledge base articles
│ └── update_agent.py ← PATCH an existing agent
└── references/
├── reference.md ← Schema bible: JSON structure, nodes, edges, tools, RAG, V3
├── architecture_framework.md ← 5-phase pipeline, split-point assessment, model selection
├── edge_failures.md ← Why edges fail (mechanical + config + platform pitfalls)
├── pipeline.md ← Single-pass analyze + generate prompt
├── correct_prompt.md ← Fix validation/deployment errors (E-codes + B-codes)
├── prepare_kb.md ← Knowledge base article design for RAG
├── cheatsheet_retell.md ← Retell → ElevenLabs migration mapping
├── cheatsheet_vapi.md ← Vapi → ElevenLabs migration mapping
└── cheatsheet_bland.md ← Bland → ElevenLabs migration mapping
ALWAYS read before generating any agent JSON:
references/reference.md — the schema bible. Every constraint, node type, edge type, tool format, and the complete payload structure lives here.Read based on task:
| Task | Read These |
|------|-----------|
| Building any agent | reference.md + architecture_framework.md |
| Complex agent (5+ tools, routing forks, high-risk tools) | Above + edge_failures.md |
| Migrating from Retell | Above + cheatsheet_retell.md |
| Migrating from Vapi | Above + cheatsheet_vapi.md |
| Migrating from Bland | Above + cheatsheet_bland.md |
| Fixing agent errors | correct_prompt.md + reference.md (Common Errors section) |
| Preparing a knowledge base | prepare_kb.md + reference.md (Knowledge Base section) |
| Quick single-pass generation | pipeline.md (self-contained analyze+generate) |
When the user provides source material:
Identify input type:
states[], nodes[], assistant, pathway, conversation_configRead the ENTIRE source material. Do not skim.
Read the appropriate reference files from the routing table above.
Apply the PREPARE phase (details in architecture_framework.md):
Determine complexity:
| Simple | Complex | |--------|---------| | Fewer than 5 tools | 5+ tools | | Under 1500 words combined instructions | Over 1500 words | | No data-driven routing forks | Data-driven routing forks | | Linear flow | Multiple branches | | Low-risk tools only | High-risk tools (booking, cancellation, payment) |
For simple agents:
For complex agents:
Present full analysis:
Say: "Review the proposed architecture. Type 'continue' to generate, or adjust anything."
STOP AND WAIT for user response.
After confirmation: generate ElevenLabs agent JSON.
Validate → output.
Before writing any JSON, read references/reference.md for the full payload structure and constraints. Read references/architecture_framework.md for model selection and telephony patterns.
Generation checklist:
# Goal, # Instructions, # Tools, # Boundaries, # Exittool_ids: [] at root, additional_tool_ids per nodeend_call; add others as neededreferences/prepare_kb.mdYou can ONLY have ONE edge between any two nodes. Forward AND backward directions go on the SAME edge object.
// WRONG — TWO edges between same nodes = "Duplicate edge found" error
"edge-router-to-handler": {"source": "router", "target": "handler", ...}
"edge-handler-to-router": {"source": "handler", "target": "router", ...}
// CORRECT — ONE edge with both directions
"edge-router-handler": {
"source": "router",
"target": "handler",
"forward_condition": {"type": "llm", "label": "...", "condition": "..."},
"backward_condition": {"type": "llm", "label": "...", "condition": "..."}
}
Pre-generation: List ALL unique node pairs needing connections. For each: one-way or bidirectional? Create exactly ONE edge per pair. Report: "Analyzed X unique node pairs, Y require bidirectional edges."
Post-generation: Scan all edges. If any two have swapped source/target → DUPLICATE. Merge into one with backward_condition. Report: "Duplicate edge check: Scanned X edges. No duplicates." or fix if found.
tool_ids: [] at root; use additional_tool_ids per node (tools accumulate — can't remove base tools)"start_node""blind", "conference", or "sip_refer"{{variable}} in paths"turn" or "silence" (never "conversational")| Good (observable + concrete) | Bad (vague + speculatable) | |------------------------------|---------------------------| | "'client_lookup' tool returned a matching record" | "Customer is identified" | | "Caller confirmed name AND 'generate_auth_token' returned success" | "Authentication complete" | | "'book_appointment' returned a confirmation with booking ID" | "Appointment booked" |
Run the structural validator:
python scripts/validate_el_json.py agents/{agent_name}_EL.json
Fix any errors and re-validate until Status: PASSED. Only output after clean validation.
Common error fixes are cataloged in references/correct_prompt.md:
Save to agents/{agent_name}_EL.json. Provide deployment instructions:
# Deploy agent with tools
python scripts/deploy_with_tools.py agents/{agent_name}_EL.json
# Deploy with knowledge base
python scripts/deploy_with_tools.py agents/{agent_name}_EL.json \
--kb-manifest knowledge-base/kb_manifest.json
# Update existing agent
python scripts/update_agent.py <agent_id> agents/{agent_name}_EL.json
When user requests "test mode": generate a testable version without working backends.
type: "webhook" toolsend_call, transfer_to_number){{variables}} with hardcoded test values; remove dynamic_variablesreferences/pipeline.md "Test Mode" section.Save as agents/{agent_name}_EL_testmode.json.
When user requests "v3" or "v3 mode": generate a personality-driven agent with expression tags.
eleven_v3_conversational, expressive_mode: true, 8-12 suggested_audio_tagsFull V3 reference (tag categories, energy profiles, TTS rules): references/reference.md "V3 Mode" section.
When source material includes large reference content that would bloat the prompt:
references/prepare_kb.md for article design rulesreferences/reference.md "Knowledge Base (RAG)" section for RAG internalspython scripts/deploy_kb.py knowledge-base/ --root-name my_kb--kb-manifest flag on deploy_with_tools.pyWhen user reports deployment or behavioral errors:
references/correct_prompt.md for E-code and B-code fix catalog{
"name": "Agent Name",
"conversation_config": {
"agent": {
"first_message": "...",
"language": "en",
"dynamic_variables": {"dynamic_variable_placeholders": {}},
"prompt": {"prompt": "...", "tool_ids": [], "tools": [...]}
},
"tts": {"voice_id": "...", "model_id": "..."}
},
"platform_settings": {
"data_collection": {...},
"evaluation": {"criteria": [...]}
},
"workflow": {
"prevent_subagent_loops": true,
"nodes": {"start_node": {...}, "node_name": {...}},
"edges": {"edge-id": {...}}
}
}
For the complete schema with all node types, edge types, tool formats, expression operators, and constraints: read references/reference.md.
development
Build durable workflows with Vercel Workflow DevKit using "use workflow" and "use step" directives. Use for long-running tasks, background jobs, AI agents, webhooks, scheduled tasks, retries, and workflow orchestration. Supports Next.js, Vite, Astro, Express, Fastify, Hono, Nitro, Nuxt, SvelteKit.
documentation
Automate changelog management, version bumping, release tracking, tags, and GitHub Releases. Sets up a changelog system (CHANGELOG.md, UI modal, version display) if none exists, or updates an existing one. Use when: updating changelog, bumping version, creating release entry, promoting [Unreleased], tagging, publishing GitHub Release notes, handling prerelease versions, setting up changelog, adding version display, managing semver, commit/push/release workflow. Triggers on: changelog, version bump, release notes, semver, CHANGELOG.md, release entry, what's new, patch/minor/major/prerelease bump, tag release, GitHub Release, update the changelog, release, new version.
development
Convert documentation websites, GitHub repositories, and PDFs into Claude AI skills. Use when creating Claude skills from docs, scraping documentation, packaging websites into skills, or converting repos/PDFs to Claude knowledge.
development
Generate professional shot lists from screenplays and scripts. Use when user uploads a screenplay (.fountain, .fdx, .txt, .pdf, .docx) or describes scenes for production planning. Parses scripts to extract scenes, helps determine camera setups, shot types, framing, and movement through collaborative discussion, then generates beautifully formatted PDF shot lists for production. Triggers include requests to create shot lists, plan shots, break down scripts for filming, or organize camera coverage.