[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vapi-simulations":3,"mdc--66vjr-key":43,"related-org-vapi-simulations":891,"related-repo-vapi-simulations":1049},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":38,"sourceUrl":41,"mdContent":42},"simulations","design and run Vapi simulations","Design, create, run, monitor, and maintain Vapi Simulations for assistants and squads. Use for simulation personalities, scenarios, structured-output success criteria, simulations, suites, chat or voice runs, tool mocks, target variables, lifecycle webhooks, regression coverage, CI quality gates, run-result analysis, and simulation API validation errors. Do not use for fixed-turn mock-conversation Evals unless the user is deciding between Evals and Simulations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"vapi","Vapi","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvapi.png","VapiAI",[13,17,20,23],{"name":14,"slug":15,"type":16},"Automation","automation","tag",{"name":18,"slug":19,"type":16},"Simulation","simulation",{"name":21,"slug":22,"type":16},"Agents","agents",{"name":24,"slug":25,"type":16},"Testing","testing",53,"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fskills","2026-08-15T03:47:29.005508","MIT",7,[32,33,34,35,36,8,37],"agent-skills","claude-code","codex-skills","openclaw-skills","skills","vapi-ai",{"repoUrl":27,"stars":26,"forks":30,"topics":39,"description":40},[32,33,34,35,36,8,37],"A set of skills and MCP connector to allow agents to build Vapi AI agents, from creating tools and assistants to a phone call","https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fskills\u002Ftree\u002FHEAD\u002Fsimulations","---\nname: simulations\ndescription: Design, create, run, monitor, and maintain Vapi Simulations for assistants and squads. Use for simulation personalities, scenarios, structured-output success criteria, simulations, suites, chat or voice runs, tool mocks, target variables, lifecycle webhooks, regression coverage, CI quality gates, run-result analysis, and simulation API validation errors. Do not use for fixed-turn mock-conversation Evals unless the user is deciding between Evals and Simulations.\nlicense: MIT\ncompatibility: Internet access is recommended for current Vapi schema verification; VAPI_API_KEY is required for live simulation resource operations and runs.\nmetadata:\n  author: vapi\n  version: \"1.0\"\n---\n\n# Vapi Simulations\n\nBuild realistic conversation tests in five layers: a personality controls the AI tester, a scenario defines its intent and measurable outcomes, a simulation pairs them, a suite groups simulations, and a run executes them against an assistant or squad.\n\n## Source and Safety Rules\n\n- Verify live payloads against the current Vapi documentation MCP, API reference, or public OpenAPI before sending them. Simulations use the `\u002Feval\u002Fsimulation` API family.\n- Never print, request in chat, or embed API keys, provider secrets, credential values, private webhook URLs, or real customer data.\n- Treat running a simulation as an external action. It can consume credits, use concurrency, send webhooks, and call the target's real tools unless they are mocked.\n- Do not run, cancel, update, or delete resources unless the user clearly requests that operation. Draft configurations when mutation is not requested.\n- Resolve every assistant, squad, personality, scenario, simulation, suite, tool, structured-output, and credential ID from user input or the API. Never invent an ID.\n- Do not create legacy Test Suites. Use Evals for deterministic turn-by-turn checks and Simulations for dynamic conversations over chat or voice.\n\n## Procedure\n\n1. Choose the test type and execution mode.\n   - Use Simulations for multi-turn behavior, personality variation, squad handoffs, realistic tool paths, or audio behavior.\n   - Use Evals instead when the requirement is an exact response, regex, fixed mock conversation, or precise tool-call argument check.\n   - Return a test plan or payload when the user asks to design, draft, review, or explain. Perform live mutations only when explicitly requested and `VAPI_API_KEY` is available.\n\n2. Inspect the target and existing test resources.\n   - Fetch the assistant or squad and identify its core paths, guardrails, tools, variables, languages, and failure behavior.\n   - List existing personalities, scenarios, simulations, suites, and reusable structured outputs before creating duplicates.\n   - Reuse an existing resource only when its intent and configuration match unambiguously. Otherwise create a clearly named new resource or ask the user to choose among plausible matches.\n\n3. Design coverage before payloads.\n   - Start with one smoke simulation for the core path, one or two required Boolean outcomes, chat transport, and one iteration.\n   - Add regression simulations for repaired defects. Add separate edge cases for ambiguity, interruption, refusal, unavailable dependencies, failed tools, escalation, and handoffs.\n   - Keep scenario intent, personality behavior, and evaluation criteria independent so each can be reused.\n   - Name resources by behavior and expected outcome, not implementation details.\n\n4. Define the personality.\n   - Prefer a suitable existing personality when available.\n   - When creating one, provide a complete valid assistant configuration for the AI tester. Put stable temperament, speaking style, and caller behavior in its system prompt; put the situation-specific goal in the scenario.\n   - Use the `create-assistant` skill to assemble or validate the personality's assistant configuration when available.\n   - Configure voice and transcriber only when voice runs need them. Chat runs use the personality's model but skip its audio path.\n\n5. Define the scenario and evaluations.\n   - Write `instructions` as the AI tester's intent and facts. Describe the goal and constraints without scripting the target assistant's answer.\n   - Make each evaluation measure one observable outcome. Prefer descriptive Boolean outputs for pass\u002Ffail facts and numeric outputs for thresholds.\n   - Provide either `structuredOutputId` or inline `structuredOutput`, never both. Inline outputs require `name` and a JSON `schema`.\n   - Match the expected `value` type to the evaluated primitive. Use `=` or `!=` for Boolean and string; numeric types also support `>`, `\u003C`, `>=`, and `\u003C=`.\n   - Keep important criteria `required: true`. Use optional criteria only for diagnostics that must not fail the simulation.\n   - Object structured outputs may be evaluated through a primitive leaf using `path`. Do not compare an object or array directly.\n\n6. Isolate side effects and runtime context.\n   - Inspect the target's configured tools before every run. Mock any tool whose real execution could write data, contact people, spend money, or make the test non-deterministic.\n   - Match each `toolMocks[].toolName` exactly. The mock `result` is always a string; encode JSON as a string when the target expects JSON-shaped output.\n   - Assume every unmocked tool remains live in both chat and voice simulations.\n   - Put test values for `{{variables}}` in `targetOverrides.variableValues`. Use synthetic data and keep secrets in Vapi credentials.\n   - Configure `simulation.run.started` or `simulation.run.ended` hooks only when requested. Prefer `server.credentialId` to inline authorization headers.\n\n7. Create and verify reusable resources.\n   - Create in dependency order: personality and scenario, then simulation, then optional suite.\n   - Require `201` for create operations. Verify returned IDs and the fields that define the test.\n   - For updates, fetch the current resource first. Omit unrelated scalar fields and send the complete intended value for any array being changed; suite `simulationIds` and `targetAssignments` replace their existing arrays.\n   - Re-fetch after update. Deleting a suite or other simulation resource is permanent; verify the exact ID and dependency impact first.\n\n8. Run deliberately.\n   - Prefer `vapi.webchat` for fast prompt, tool, and conversation-logic iteration.\n   - Use `vapi.websocket` for speech recognition, voice output, interruptions, recordings, or final end-to-end validation.\n   - Start with one iteration. Increase iterations only to measure behavioral consistency after a single run is valid.\n   - Before sending the run, recap the target, simulations or suite, transport, iterations, tool mocks, and any remaining live side effects.\n   - Create the run with `POST \u002Feval\u002Fsimulation\u002Frun` and require `201`. Return the run ID and dashboard `url` when present.\n\n9. Monitor and diagnose results.\n   - Poll `GET \u002Feval\u002Fsimulation\u002Frun\u002F{id}` until `status` is `ended`; do not treat `queued` or `running` as success.\n   - Fetch `GET \u002Feval\u002Fsimulation\u002Frun\u002F{id}\u002Fitem` and inspect every item. A passing group has items to evaluate, zero failed or canceled items, and every required evaluation passes.\n   - Report actual versus expected values, extraction errors, skipped evaluations, failure reasons, transcript evidence, transport, and iteration number.\n   - Diagnose the failing layer before changing the assistant: target runtime failure, scenario ambiguity, personality behavior, tool mock mismatch, structured-output extraction, or genuine assistant behavior.\n   - Keep the evaluation stable when fixing the assistant. Change expected criteria only when the business requirement changed.\n\n10. Handle failures honestly.\n   - On `400`, compare the request with the current schema and correct one unambiguous validation issue before at most one retry.\n   - On `401` or `403`, stop for authentication or permission. On `404`, report the missing dependency. On `409` or concurrency errors, inspect `GET \u002Feval\u002Fsimulation\u002Fconcurrency` and active runs. On `5xx`, report the service failure.\n   - Cancel only queued or running groups or items. Never claim a run, cancellation, mutation, or pass succeeded until the corresponding API response is verified.\n\n## API Implementation\n\nRead [Simulation API Reference](references\u002Fapi-reference.md) before producing REST code, making a live request, configuring hooks or mocks, or interpreting run results. Use direct REST unless the current official Vapi SDK documentation explicitly exposes the required simulation resource and method; never invent SDK method names.\n\n## Output Contract\n\nReturn only the sections relevant to the request:\n\n- Test strategy: target behavior, coverage, and why Simulation rather than Eval\n- Resource plan: personality, scenario, evaluations, simulation, and suite\n- Side-effect review: mocked tools, live tools, hooks, variables, transport, iterations, and expected cost\u002Fconcurrency impact\n- Save-ready JSON or implementation code\n- Created resource IDs and verified fields, when mutations succeeded\n- Run ID, dashboard URL, status, item counts, and per-evaluation evidence, when a run was requested\n- Failure diagnosis and the smallest recommended next change\n\n## Public Sources\n\n- [Simulations overview](https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-overview)\n- [Simulations quickstart](https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-quickstart)\n- [Simulations advanced](https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-advanced)\n- [Manage simulations](https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-manage)\n- [Vapi API reference index and OpenAPI](https:\u002F\u002Fdocs.vapi.ai\u002Fllms.txt)\n",{"data":44,"body":48},{"name":4,"description":6,"license":29,"compatibility":45,"metadata":46},"Internet access is recommended for current Vapi schema verification; VAPI_API_KEY is required for live simulation resource operations and runs.",{"author":8,"version":47},"1.0",{"type":49,"children":50},"root",[51,60,66,73,117,123,690,762,768,782,788,793,831,837],{"type":52,"tag":53,"props":54,"children":56},"element","h1",{"id":55},"vapi-simulations",[57],{"type":58,"value":59},"text","Vapi Simulations",{"type":52,"tag":61,"props":62,"children":63},"p",{},[64],{"type":58,"value":65},"Build realistic conversation tests in five layers: a personality controls the AI tester, a scenario defines its intent and measurable outcomes, a simulation pairs them, a suite groups simulations, and a run executes them against an assistant or squad.",{"type":52,"tag":67,"props":68,"children":70},"h2",{"id":69},"source-and-safety-rules",[71],{"type":58,"value":72},"Source and Safety Rules",{"type":52,"tag":74,"props":75,"children":76},"ul",{},[77,92,97,102,107,112],{"type":52,"tag":78,"props":79,"children":80},"li",{},[81,83,90],{"type":58,"value":82},"Verify live payloads against the current Vapi documentation MCP, API reference, or public OpenAPI before sending them. Simulations use the ",{"type":52,"tag":84,"props":85,"children":87},"code",{"className":86},[],[88],{"type":58,"value":89},"\u002Feval\u002Fsimulation",{"type":58,"value":91}," API family.",{"type":52,"tag":78,"props":93,"children":94},{},[95],{"type":58,"value":96},"Never print, request in chat, or embed API keys, provider secrets, credential values, private webhook URLs, or real customer data.",{"type":52,"tag":78,"props":98,"children":99},{},[100],{"type":58,"value":101},"Treat running a simulation as an external action. It can consume credits, use concurrency, send webhooks, and call the target's real tools unless they are mocked.",{"type":52,"tag":78,"props":103,"children":104},{},[105],{"type":58,"value":106},"Do not run, cancel, update, or delete resources unless the user clearly requests that operation. Draft configurations when mutation is not requested.",{"type":52,"tag":78,"props":108,"children":109},{},[110],{"type":58,"value":111},"Resolve every assistant, squad, personality, scenario, simulation, suite, tool, structured-output, and credential ID from user input or the API. Never invent an ID.",{"type":52,"tag":78,"props":113,"children":114},{},[115],{"type":58,"value":116},"Do not create legacy Test Suites. Use Evals for deterministic turn-by-turn checks and Simulations for dynamic conversations over chat or voice.",{"type":52,"tag":67,"props":118,"children":120},{"id":119},"procedure",[121],{"type":58,"value":122},"Procedure",{"type":52,"tag":124,"props":125,"children":126},"ol",{},[127,158,181,209,245,393,481,533,605,685],{"type":52,"tag":78,"props":128,"children":129},{},[130,132],{"type":58,"value":131},"Choose the test type and execution mode.",{"type":52,"tag":74,"props":133,"children":134},{},[135,140,145],{"type":52,"tag":78,"props":136,"children":137},{},[138],{"type":58,"value":139},"Use Simulations for multi-turn behavior, personality variation, squad handoffs, realistic tool paths, or audio behavior.",{"type":52,"tag":78,"props":141,"children":142},{},[143],{"type":58,"value":144},"Use Evals instead when the requirement is an exact response, regex, fixed mock conversation, or precise tool-call argument check.",{"type":52,"tag":78,"props":146,"children":147},{},[148,150,156],{"type":58,"value":149},"Return a test plan or payload when the user asks to design, draft, review, or explain. Perform live mutations only when explicitly requested and ",{"type":52,"tag":84,"props":151,"children":153},{"className":152},[],[154],{"type":58,"value":155},"VAPI_API_KEY",{"type":58,"value":157}," is available.",{"type":52,"tag":78,"props":159,"children":160},{},[161,163],{"type":58,"value":162},"Inspect the target and existing test resources.",{"type":52,"tag":74,"props":164,"children":165},{},[166,171,176],{"type":52,"tag":78,"props":167,"children":168},{},[169],{"type":58,"value":170},"Fetch the assistant or squad and identify its core paths, guardrails, tools, variables, languages, and failure behavior.",{"type":52,"tag":78,"props":172,"children":173},{},[174],{"type":58,"value":175},"List existing personalities, scenarios, simulations, suites, and reusable structured outputs before creating duplicates.",{"type":52,"tag":78,"props":177,"children":178},{},[179],{"type":58,"value":180},"Reuse an existing resource only when its intent and configuration match unambiguously. Otherwise create a clearly named new resource or ask the user to choose among plausible matches.",{"type":52,"tag":78,"props":182,"children":183},{},[184,186],{"type":58,"value":185},"Design coverage before payloads.",{"type":52,"tag":74,"props":187,"children":188},{},[189,194,199,204],{"type":52,"tag":78,"props":190,"children":191},{},[192],{"type":58,"value":193},"Start with one smoke simulation for the core path, one or two required Boolean outcomes, chat transport, and one iteration.",{"type":52,"tag":78,"props":195,"children":196},{},[197],{"type":58,"value":198},"Add regression simulations for repaired defects. Add separate edge cases for ambiguity, interruption, refusal, unavailable dependencies, failed tools, escalation, and handoffs.",{"type":52,"tag":78,"props":200,"children":201},{},[202],{"type":58,"value":203},"Keep scenario intent, personality behavior, and evaluation criteria independent so each can be reused.",{"type":52,"tag":78,"props":205,"children":206},{},[207],{"type":58,"value":208},"Name resources by behavior and expected outcome, not implementation details.",{"type":52,"tag":78,"props":210,"children":211},{},[212,214],{"type":58,"value":213},"Define the personality.",{"type":52,"tag":74,"props":215,"children":216},{},[217,222,227,240],{"type":52,"tag":78,"props":218,"children":219},{},[220],{"type":58,"value":221},"Prefer a suitable existing personality when available.",{"type":52,"tag":78,"props":223,"children":224},{},[225],{"type":58,"value":226},"When creating one, provide a complete valid assistant configuration for the AI tester. Put stable temperament, speaking style, and caller behavior in its system prompt; put the situation-specific goal in the scenario.",{"type":52,"tag":78,"props":228,"children":229},{},[230,232,238],{"type":58,"value":231},"Use the ",{"type":52,"tag":84,"props":233,"children":235},{"className":234},[],[236],{"type":58,"value":237},"create-assistant",{"type":58,"value":239}," skill to assemble or validate the personality's assistant configuration when available.",{"type":52,"tag":78,"props":241,"children":242},{},[243],{"type":58,"value":244},"Configure voice and transcriber only when voice runs need them. Chat runs use the personality's model but skip its audio path.",{"type":52,"tag":78,"props":246,"children":247},{},[248,250],{"type":58,"value":249},"Define the scenario and evaluations.",{"type":52,"tag":74,"props":251,"children":252},{},[253,266,271,308,367,380],{"type":52,"tag":78,"props":254,"children":255},{},[256,258,264],{"type":58,"value":257},"Write ",{"type":52,"tag":84,"props":259,"children":261},{"className":260},[],[262],{"type":58,"value":263},"instructions",{"type":58,"value":265}," as the AI tester's intent and facts. Describe the goal and constraints without scripting the target assistant's answer.",{"type":52,"tag":78,"props":267,"children":268},{},[269],{"type":58,"value":270},"Make each evaluation measure one observable outcome. Prefer descriptive Boolean outputs for pass\u002Ffail facts and numeric outputs for thresholds.",{"type":52,"tag":78,"props":272,"children":273},{},[274,276,282,284,290,292,298,300,306],{"type":58,"value":275},"Provide either ",{"type":52,"tag":84,"props":277,"children":279},{"className":278},[],[280],{"type":58,"value":281},"structuredOutputId",{"type":58,"value":283}," or inline ",{"type":52,"tag":84,"props":285,"children":287},{"className":286},[],[288],{"type":58,"value":289},"structuredOutput",{"type":58,"value":291},", never both. Inline outputs require ",{"type":52,"tag":84,"props":293,"children":295},{"className":294},[],[296],{"type":58,"value":297},"name",{"type":58,"value":299}," and a JSON ",{"type":52,"tag":84,"props":301,"children":303},{"className":302},[],[304],{"type":58,"value":305},"schema",{"type":58,"value":307},".",{"type":52,"tag":78,"props":309,"children":310},{},[311,313,319,321,327,329,335,337,343,345,351,352,358,360,366],{"type":58,"value":312},"Match the expected ",{"type":52,"tag":84,"props":314,"children":316},{"className":315},[],[317],{"type":58,"value":318},"value",{"type":58,"value":320}," type to the evaluated primitive. Use ",{"type":52,"tag":84,"props":322,"children":324},{"className":323},[],[325],{"type":58,"value":326},"=",{"type":58,"value":328}," or ",{"type":52,"tag":84,"props":330,"children":332},{"className":331},[],[333],{"type":58,"value":334},"!=",{"type":58,"value":336}," for Boolean and string; numeric types also support ",{"type":52,"tag":84,"props":338,"children":340},{"className":339},[],[341],{"type":58,"value":342},">",{"type":58,"value":344},", ",{"type":52,"tag":84,"props":346,"children":348},{"className":347},[],[349],{"type":58,"value":350},"\u003C",{"type":58,"value":344},{"type":52,"tag":84,"props":353,"children":355},{"className":354},[],[356],{"type":58,"value":357},">=",{"type":58,"value":359},", and ",{"type":52,"tag":84,"props":361,"children":363},{"className":362},[],[364],{"type":58,"value":365},"\u003C=",{"type":58,"value":307},{"type":52,"tag":78,"props":368,"children":369},{},[370,372,378],{"type":58,"value":371},"Keep important criteria ",{"type":52,"tag":84,"props":373,"children":375},{"className":374},[],[376],{"type":58,"value":377},"required: true",{"type":58,"value":379},". Use optional criteria only for diagnostics that must not fail the simulation.",{"type":52,"tag":78,"props":381,"children":382},{},[383,385,391],{"type":58,"value":384},"Object structured outputs may be evaluated through a primitive leaf using ",{"type":52,"tag":84,"props":386,"children":388},{"className":387},[],[389],{"type":58,"value":390},"path",{"type":58,"value":392},". Do not compare an object or array directly.",{"type":52,"tag":78,"props":394,"children":395},{},[396,398],{"type":58,"value":397},"Isolate side effects and runtime context.",{"type":52,"tag":74,"props":399,"children":400},{},[401,406,427,432,453],{"type":52,"tag":78,"props":402,"children":403},{},[404],{"type":58,"value":405},"Inspect the target's configured tools before every run. Mock any tool whose real execution could write data, contact people, spend money, or make the test non-deterministic.",{"type":52,"tag":78,"props":407,"children":408},{},[409,411,417,419,425],{"type":58,"value":410},"Match each ",{"type":52,"tag":84,"props":412,"children":414},{"className":413},[],[415],{"type":58,"value":416},"toolMocks[].toolName",{"type":58,"value":418}," exactly. The mock ",{"type":52,"tag":84,"props":420,"children":422},{"className":421},[],[423],{"type":58,"value":424},"result",{"type":58,"value":426}," is always a string; encode JSON as a string when the target expects JSON-shaped output.",{"type":52,"tag":78,"props":428,"children":429},{},[430],{"type":58,"value":431},"Assume every unmocked tool remains live in both chat and voice simulations.",{"type":52,"tag":78,"props":433,"children":434},{},[435,437,443,445,451],{"type":58,"value":436},"Put test values for ",{"type":52,"tag":84,"props":438,"children":440},{"className":439},[],[441],{"type":58,"value":442},"{{variables}}",{"type":58,"value":444}," in ",{"type":52,"tag":84,"props":446,"children":448},{"className":447},[],[449],{"type":58,"value":450},"targetOverrides.variableValues",{"type":58,"value":452},". Use synthetic data and keep secrets in Vapi credentials.",{"type":52,"tag":78,"props":454,"children":455},{},[456,458,464,465,471,473,479],{"type":58,"value":457},"Configure ",{"type":52,"tag":84,"props":459,"children":461},{"className":460},[],[462],{"type":58,"value":463},"simulation.run.started",{"type":58,"value":328},{"type":52,"tag":84,"props":466,"children":468},{"className":467},[],[469],{"type":58,"value":470},"simulation.run.ended",{"type":58,"value":472}," hooks only when requested. Prefer ",{"type":52,"tag":84,"props":474,"children":476},{"className":475},[],[477],{"type":58,"value":478},"server.credentialId",{"type":58,"value":480}," to inline authorization headers.",{"type":52,"tag":78,"props":482,"children":483},{},[484,486],{"type":58,"value":485},"Create and verify reusable resources.",{"type":52,"tag":74,"props":487,"children":488},{},[489,494,507,528],{"type":52,"tag":78,"props":490,"children":491},{},[492],{"type":58,"value":493},"Create in dependency order: personality and scenario, then simulation, then optional suite.",{"type":52,"tag":78,"props":495,"children":496},{},[497,499,505],{"type":58,"value":498},"Require ",{"type":52,"tag":84,"props":500,"children":502},{"className":501},[],[503],{"type":58,"value":504},"201",{"type":58,"value":506}," for create operations. Verify returned IDs and the fields that define the test.",{"type":52,"tag":78,"props":508,"children":509},{},[510,512,518,520,526],{"type":58,"value":511},"For updates, fetch the current resource first. Omit unrelated scalar fields and send the complete intended value for any array being changed; suite ",{"type":52,"tag":84,"props":513,"children":515},{"className":514},[],[516],{"type":58,"value":517},"simulationIds",{"type":58,"value":519}," and ",{"type":52,"tag":84,"props":521,"children":523},{"className":522},[],[524],{"type":58,"value":525},"targetAssignments",{"type":58,"value":527}," replace their existing arrays.",{"type":52,"tag":78,"props":529,"children":530},{},[531],{"type":58,"value":532},"Re-fetch after update. Deleting a suite or other simulation resource is permanent; verify the exact ID and dependency impact first.",{"type":52,"tag":78,"props":534,"children":535},{},[536,538],{"type":58,"value":537},"Run deliberately.",{"type":52,"tag":74,"props":539,"children":540},{},[541,554,567,572,577],{"type":52,"tag":78,"props":542,"children":543},{},[544,546,552],{"type":58,"value":545},"Prefer ",{"type":52,"tag":84,"props":547,"children":549},{"className":548},[],[550],{"type":58,"value":551},"vapi.webchat",{"type":58,"value":553}," for fast prompt, tool, and conversation-logic iteration.",{"type":52,"tag":78,"props":555,"children":556},{},[557,559,565],{"type":58,"value":558},"Use ",{"type":52,"tag":84,"props":560,"children":562},{"className":561},[],[563],{"type":58,"value":564},"vapi.websocket",{"type":58,"value":566}," for speech recognition, voice output, interruptions, recordings, or final end-to-end validation.",{"type":52,"tag":78,"props":568,"children":569},{},[570],{"type":58,"value":571},"Start with one iteration. Increase iterations only to measure behavioral consistency after a single run is valid.",{"type":52,"tag":78,"props":573,"children":574},{},[575],{"type":58,"value":576},"Before sending the run, recap the target, simulations or suite, transport, iterations, tool mocks, and any remaining live side effects.",{"type":52,"tag":78,"props":578,"children":579},{},[580,582,588,590,595,597,603],{"type":58,"value":581},"Create the run with ",{"type":52,"tag":84,"props":583,"children":585},{"className":584},[],[586],{"type":58,"value":587},"POST \u002Feval\u002Fsimulation\u002Frun",{"type":58,"value":589}," and require ",{"type":52,"tag":84,"props":591,"children":593},{"className":592},[],[594],{"type":58,"value":504},{"type":58,"value":596},". Return the run ID and dashboard ",{"type":52,"tag":84,"props":598,"children":600},{"className":599},[],[601],{"type":58,"value":602},"url",{"type":58,"value":604}," when present.",{"type":52,"tag":78,"props":606,"children":607},{},[608,610],{"type":58,"value":609},"Monitor and diagnose results.",{"type":52,"tag":74,"props":611,"children":612},{},[613,657,670,675,680],{"type":52,"tag":78,"props":614,"children":615},{},[616,618,624,626,632,634,640,642,648,649,655],{"type":58,"value":617},"Poll ",{"type":52,"tag":84,"props":619,"children":621},{"className":620},[],[622],{"type":58,"value":623},"GET \u002Feval\u002Fsimulation\u002Frun\u002F{id}",{"type":58,"value":625}," until ",{"type":52,"tag":84,"props":627,"children":629},{"className":628},[],[630],{"type":58,"value":631},"status",{"type":58,"value":633}," is ",{"type":52,"tag":84,"props":635,"children":637},{"className":636},[],[638],{"type":58,"value":639},"ended",{"type":58,"value":641},"; do not treat ",{"type":52,"tag":84,"props":643,"children":645},{"className":644},[],[646],{"type":58,"value":647},"queued",{"type":58,"value":328},{"type":52,"tag":84,"props":650,"children":652},{"className":651},[],[653],{"type":58,"value":654},"running",{"type":58,"value":656}," as success.",{"type":52,"tag":78,"props":658,"children":659},{},[660,662,668],{"type":58,"value":661},"Fetch ",{"type":52,"tag":84,"props":663,"children":665},{"className":664},[],[666],{"type":58,"value":667},"GET \u002Feval\u002Fsimulation\u002Frun\u002F{id}\u002Fitem",{"type":58,"value":669}," and inspect every item. A passing group has items to evaluate, zero failed or canceled items, and every required evaluation passes.",{"type":52,"tag":78,"props":671,"children":672},{},[673],{"type":58,"value":674},"Report actual versus expected values, extraction errors, skipped evaluations, failure reasons, transcript evidence, transport, and iteration number.",{"type":52,"tag":78,"props":676,"children":677},{},[678],{"type":58,"value":679},"Diagnose the failing layer before changing the assistant: target runtime failure, scenario ambiguity, personality behavior, tool mock mismatch, structured-output extraction, or genuine assistant behavior.",{"type":52,"tag":78,"props":681,"children":682},{},[683],{"type":58,"value":684},"Keep the evaluation stable when fixing the assistant. Change expected criteria only when the business requirement changed.",{"type":52,"tag":78,"props":686,"children":687},{},[688],{"type":58,"value":689},"Handle failures honestly.",{"type":52,"tag":74,"props":691,"children":692},{},[693,706,757],{"type":52,"tag":78,"props":694,"children":695},{},[696,698,704],{"type":58,"value":697},"On ",{"type":52,"tag":84,"props":699,"children":701},{"className":700},[],[702],{"type":58,"value":703},"400",{"type":58,"value":705},", compare the request with the current schema and correct one unambiguous validation issue before at most one retry.",{"type":52,"tag":78,"props":707,"children":708},{},[709,710,716,717,723,725,731,733,739,741,747,749,755],{"type":58,"value":697},{"type":52,"tag":84,"props":711,"children":713},{"className":712},[],[714],{"type":58,"value":715},"401",{"type":58,"value":328},{"type":52,"tag":84,"props":718,"children":720},{"className":719},[],[721],{"type":58,"value":722},"403",{"type":58,"value":724},", stop for authentication or permission. On ",{"type":52,"tag":84,"props":726,"children":728},{"className":727},[],[729],{"type":58,"value":730},"404",{"type":58,"value":732},", report the missing dependency. On ",{"type":52,"tag":84,"props":734,"children":736},{"className":735},[],[737],{"type":58,"value":738},"409",{"type":58,"value":740}," or concurrency errors, inspect ",{"type":52,"tag":84,"props":742,"children":744},{"className":743},[],[745],{"type":58,"value":746},"GET \u002Feval\u002Fsimulation\u002Fconcurrency",{"type":58,"value":748}," and active runs. On ",{"type":52,"tag":84,"props":750,"children":752},{"className":751},[],[753],{"type":58,"value":754},"5xx",{"type":58,"value":756},", report the service failure.",{"type":52,"tag":78,"props":758,"children":759},{},[760],{"type":58,"value":761},"Cancel only queued or running groups or items. Never claim a run, cancellation, mutation, or pass succeeded until the corresponding API response is verified.",{"type":52,"tag":67,"props":763,"children":765},{"id":764},"api-implementation",[766],{"type":58,"value":767},"API Implementation",{"type":52,"tag":61,"props":769,"children":770},{},[771,773,780],{"type":58,"value":772},"Read ",{"type":52,"tag":774,"props":775,"children":777},"a",{"href":776},"references\u002Fapi-reference.md",[778],{"type":58,"value":779},"Simulation API Reference",{"type":58,"value":781}," before producing REST code, making a live request, configuring hooks or mocks, or interpreting run results. Use direct REST unless the current official Vapi SDK documentation explicitly exposes the required simulation resource and method; never invent SDK method names.",{"type":52,"tag":67,"props":783,"children":785},{"id":784},"output-contract",[786],{"type":58,"value":787},"Output Contract",{"type":52,"tag":61,"props":789,"children":790},{},[791],{"type":58,"value":792},"Return only the sections relevant to the request:",{"type":52,"tag":74,"props":794,"children":795},{},[796,801,806,811,816,821,826],{"type":52,"tag":78,"props":797,"children":798},{},[799],{"type":58,"value":800},"Test strategy: target behavior, coverage, and why Simulation rather than Eval",{"type":52,"tag":78,"props":802,"children":803},{},[804],{"type":58,"value":805},"Resource plan: personality, scenario, evaluations, simulation, and suite",{"type":52,"tag":78,"props":807,"children":808},{},[809],{"type":58,"value":810},"Side-effect review: mocked tools, live tools, hooks, variables, transport, iterations, and expected cost\u002Fconcurrency impact",{"type":52,"tag":78,"props":812,"children":813},{},[814],{"type":58,"value":815},"Save-ready JSON or implementation code",{"type":52,"tag":78,"props":817,"children":818},{},[819],{"type":58,"value":820},"Created resource IDs and verified fields, when mutations succeeded",{"type":52,"tag":78,"props":822,"children":823},{},[824],{"type":58,"value":825},"Run ID, dashboard URL, status, item counts, and per-evaluation evidence, when a run was requested",{"type":52,"tag":78,"props":827,"children":828},{},[829],{"type":58,"value":830},"Failure diagnosis and the smallest recommended next change",{"type":52,"tag":67,"props":832,"children":834},{"id":833},"public-sources",[835],{"type":58,"value":836},"Public Sources",{"type":52,"tag":74,"props":838,"children":839},{},[840,851,861,871,881],{"type":52,"tag":78,"props":841,"children":842},{},[843],{"type":52,"tag":774,"props":844,"children":848},{"href":845,"rel":846},"https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-overview",[847],"nofollow",[849],{"type":58,"value":850},"Simulations overview",{"type":52,"tag":78,"props":852,"children":853},{},[854],{"type":52,"tag":774,"props":855,"children":858},{"href":856,"rel":857},"https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-quickstart",[847],[859],{"type":58,"value":860},"Simulations quickstart",{"type":52,"tag":78,"props":862,"children":863},{},[864],{"type":52,"tag":774,"props":865,"children":868},{"href":866,"rel":867},"https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-advanced",[847],[869],{"type":58,"value":870},"Simulations advanced",{"type":52,"tag":78,"props":872,"children":873},{},[874],{"type":52,"tag":774,"props":875,"children":878},{"href":876,"rel":877},"https:\u002F\u002Fdocs.vapi.ai\u002Fobservability\u002Fsimulations-manage",[847],[879],{"type":58,"value":880},"Manage simulations",{"type":52,"tag":78,"props":882,"children":883},{},[884],{"type":52,"tag":774,"props":885,"children":888},{"href":886,"rel":887},"https:\u002F\u002Fdocs.vapi.ai\u002Fllms.txt",[847],[889],{"type":58,"value":890},"Vapi API reference index and OpenAPI",{"items":892,"total":1048},[893,912,923,934,948,960,973,986,1000,1013,1020,1035],{"slug":8,"name":8,"fn":894,"description":895,"org":896,"tags":897,"stars":909,"repoUrl":910,"updatedAt":911},"build AI voice assistants with Vapi","Build AI voice assistants and phone agents with Vapi. Use this skill when users want to create voice agents, phone bots, IVR systems, outbound calling campaigns, or any voice-based AI application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[898,899,900,903,906],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":901,"slug":902,"type":16},"Speech","speech",{"name":904,"slug":905,"type":16},"Text-to-Speech","text-to-speech",{"name":907,"slug":908,"type":16},"Voice","voice",56,"https:\u002F\u002Fgithub.com\u002FVapiAI\u002Fmcp-server","2026-08-15T03:21:18.708423",{"slug":237,"name":237,"fn":913,"description":914,"org":915,"tags":916,"stars":26,"repoUrl":27,"updatedAt":922},"create Vapi voice AI assistants","Design, create, or validate saved and transient Vapi voice assistants. Use for new phone or web agents, production system prompts and first messages, saved-versus-transient architecture, model\u002Fvoice\u002Ftranscriber selection, multilingual compatibility, existing tool attachment, native call-control tools, assistant hooks, and Create Assistant API validation errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[917,918,921],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},"API Development","api-development",{"name":907,"slug":908,"type":16},"2026-08-15T03:21:06.672037",{"slug":924,"name":924,"fn":925,"description":926,"org":927,"tags":928,"stars":26,"repoUrl":27,"updatedAt":933},"create-call","create automated phone calls with Vapi","Create outbound phone calls, web calls, and batch calls using the Vapi API. Use when making automated calls, testing voice assistants, scheduling call campaigns, or initiating conversations programmatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[929,930,931,932],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":901,"slug":902,"type":16},{"name":907,"slug":908,"type":16},"2026-07-20T05:57:32.68652",{"slug":935,"name":935,"fn":936,"description":937,"org":938,"tags":939,"stars":26,"repoUrl":27,"updatedAt":947},"create-phone-number","manage Vapi phone numbers","Plan, provision, import, route, update, and verify Vapi phone numbers through the public API. Use for Vapi-hosted US PSTN numbers, explicitly requested SIP addresses, Twilio\u002FVonage\u002FTelnyx or BYO carrier numbers, secure credential handling, assistant or squad routing, area-code requests, outbound limitations, and phone-provider troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[940,943,946],{"name":941,"slug":942,"type":16},"Operations","operations",{"name":944,"slug":945,"type":16},"Twilio","twilio",{"name":907,"slug":908,"type":16},"2026-08-15T03:21:07.855739",{"slug":949,"name":949,"fn":950,"description":951,"org":952,"tags":953,"stars":26,"repoUrl":27,"updatedAt":959},"create-squad","create multi-assistant voice agent squads","Design, create, update, and verify Vapi Squads and documented handoff tools through the public API. Use for choosing a single assistant versus a multi-assistant Squad, persistent or transient members, entry-member ordering, specialization boundaries, context engineering, variable extraction, model-specific handoff patterns, assistant-version pins, and safe Squad updates.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[954,955,958],{"name":21,"slug":22,"type":16},{"name":956,"slug":957,"type":16},"Multi-Agent","multi-agent",{"name":907,"slug":908,"type":16},"2026-08-15T03:21:08.661686",{"slug":961,"name":961,"fn":962,"description":963,"org":964,"tags":965,"stars":26,"repoUrl":27,"updatedAt":972},"create-structured-output","create Vapi structured outputs","Design, create, inspect, update, attach, detach, preview, execute, and verify reusable Vapi Structured Outputs through public API or Server SDK workflows. Use for post-call extraction, typed call artifacts, AI-versus-regex extraction, JSON Schema design, backfilling existing calls, or retrieving structured results programmatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[966,967,968,969],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},{"name":14,"slug":15,"type":16},{"name":970,"slug":971,"type":16},"Data Extraction","data-extraction","2026-08-15T03:47:29.348015",{"slug":974,"name":974,"fn":975,"description":976,"org":977,"tags":978,"stars":26,"repoUrl":27,"updatedAt":985},"create-tool","create custom tools for Vapi assistants","Select, define, create, inspect, update, attach, detach, and verify reusable Vapi tools through the public API. Use for native call-control tools, supported provider integrations, API Request tools, custom function tools, MCP tools, tool messages, credentials, or configuration-preserving assistant attachment changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[979,980,981,982],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},{"name":14,"slug":15,"type":16},{"name":983,"slug":984,"type":16},"Integrations","integrations","2026-08-15T03:21:05.673225",{"slug":987,"name":987,"fn":988,"description":989,"org":990,"tags":991,"stars":26,"repoUrl":27,"updatedAt":999},"setup-api-key","configure Vapi API authentication","Guide users through obtaining and configuring a Vapi API key. Use when the user needs to set up Vapi, when API calls fail due to missing keys, or when the user mentions needing access to Vapi's voice AI platform.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[992,993,996],{"name":919,"slug":920,"type":16},{"name":994,"slug":995,"type":16},"Auth","auth",{"name":997,"slug":998,"type":16},"Configuration","configuration","2026-07-20T05:57:25.717229",{"slug":1001,"name":1001,"fn":1002,"description":1003,"org":1004,"tags":1005,"stars":26,"repoUrl":27,"updatedAt":1012},"setup-webhook","configure Vapi webhooks for call events","Configure Vapi server URLs and webhooks to receive real-time call events, transcripts, tool calls, and end-of-call reports. Use when setting up webhook endpoints, building tool servers, or integrating Vapi events into your application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1006,1007,1008,1009],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},{"name":14,"slug":15,"type":16},{"name":1010,"slug":1011,"type":16},"Webhooks","webhooks","2026-07-20T05:57:31.703006",{"slug":4,"name":4,"fn":5,"description":6,"org":1014,"tags":1015,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1016,1017,1018,1019],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"slug":1021,"name":1021,"fn":1022,"description":1023,"org":1024,"tags":1025,"stars":26,"repoUrl":27,"updatedAt":1034},"vapi-bootstrap-framework","scaffold Vapi voice agent projects","Opt-in recreation of the Bun + TypeScript framework used to build Vapi's landing-page voice agents from a ROUGH_DRAFT.md spec, including a scenario registry, language stacks, prompt composer, assistant builder, and idempotent bootstrap script. Use only when the user explicitly invokes vapi-bootstrap-framework or specifically asks to reproduce or experiment with the landing-page-agent architecture. Do not use for ordinary Vapi assistant builds; use create-assistant, create-tool, create-squad, and vapi-prompt-builder instead. Targets Bun + TypeScript + @vapi-ai\u002Fserver-sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1026,1027,1030,1033],{"name":21,"slug":22,"type":16},{"name":1028,"slug":1029,"type":16},"Engineering","engineering",{"name":1031,"slug":1032,"type":16},"TypeScript","typescript",{"name":907,"slug":908,"type":16},"2026-08-15T03:21:04.726284",{"slug":1036,"name":1036,"fn":1037,"description":1038,"org":1039,"tags":1040,"stars":26,"repoUrl":27,"updatedAt":1047},"vapi-prompt-builder","design and audit Vapi voice agent prompts","Create, improve, or audit Vapi voice agent and Squad system prompts for production phone and web based voice agents. Use when the user wants help designing a Vapi assistant prompt, multi-assistant Squad prompt set, refining an existing prompt, creating prompt sections, building an intake or handoff workflow, improving tool-use instructions, adding guardrails, or optimizing voice-agent behavior for brevity, turn-taking, error handling, caller data collection, escalation, handoffs, and spoken formatting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1041,1042,1045,1046],{"name":21,"slug":22,"type":16},{"name":1043,"slug":1044,"type":16},"Prompt Engineering","prompt-engineering",{"name":901,"slug":902,"type":16},{"name":907,"slug":908,"type":16},"2026-07-17T06:08:21.647767",12,{"items":1050,"total":1096},[1051,1057,1064,1070,1076,1083,1090],{"slug":237,"name":237,"fn":913,"description":914,"org":1052,"tags":1053,"stars":26,"repoUrl":27,"updatedAt":922},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1054,1055,1056],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},{"name":907,"slug":908,"type":16},{"slug":924,"name":924,"fn":925,"description":926,"org":1058,"tags":1059,"stars":26,"repoUrl":27,"updatedAt":933},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1060,1061,1062,1063],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":901,"slug":902,"type":16},{"name":907,"slug":908,"type":16},{"slug":935,"name":935,"fn":936,"description":937,"org":1065,"tags":1066,"stars":26,"repoUrl":27,"updatedAt":947},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1067,1068,1069],{"name":941,"slug":942,"type":16},{"name":944,"slug":945,"type":16},{"name":907,"slug":908,"type":16},{"slug":949,"name":949,"fn":950,"description":951,"org":1071,"tags":1072,"stars":26,"repoUrl":27,"updatedAt":959},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1073,1074,1075],{"name":21,"slug":22,"type":16},{"name":956,"slug":957,"type":16},{"name":907,"slug":908,"type":16},{"slug":961,"name":961,"fn":962,"description":963,"org":1077,"tags":1078,"stars":26,"repoUrl":27,"updatedAt":972},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1079,1080,1081,1082],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},{"name":14,"slug":15,"type":16},{"name":970,"slug":971,"type":16},{"slug":974,"name":974,"fn":975,"description":976,"org":1084,"tags":1085,"stars":26,"repoUrl":27,"updatedAt":985},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1086,1087,1088,1089],{"name":21,"slug":22,"type":16},{"name":919,"slug":920,"type":16},{"name":14,"slug":15,"type":16},{"name":983,"slug":984,"type":16},{"slug":987,"name":987,"fn":988,"description":989,"org":1091,"tags":1092,"stars":26,"repoUrl":27,"updatedAt":999},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1093,1094,1095],{"name":919,"slug":920,"type":16},{"name":994,"slug":995,"type":16},{"name":997,"slug":998,"type":16},11]