
Description
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.
SKILL.md
Vapi Simulations
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.
Source and Safety Rules
- Verify live payloads against the current Vapi documentation MCP, API reference, or public OpenAPI before sending them. Simulations use the
/eval/simulationAPI family. - Never print, request in chat, or embed API keys, provider secrets, credential values, private webhook URLs, or real customer data.
- 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.
- Do not run, cancel, update, or delete resources unless the user clearly requests that operation. Draft configurations when mutation is not requested.
- Resolve every assistant, squad, personality, scenario, simulation, suite, tool, structured-output, and credential ID from user input or the API. Never invent an ID.
- Do not create legacy Test Suites. Use Evals for deterministic turn-by-turn checks and Simulations for dynamic conversations over chat or voice.
Procedure
- Choose the test type and execution mode.
- Use Simulations for multi-turn behavior, personality variation, squad handoffs, realistic tool paths, or audio behavior.
- Use Evals instead when the requirement is an exact response, regex, fixed mock conversation, or precise tool-call argument check.
- 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_KEYis available.
- Inspect the target and existing test resources.
- Fetch the assistant or squad and identify its core paths, guardrails, tools, variables, languages, and failure behavior.
- List existing personalities, scenarios, simulations, suites, and reusable structured outputs before creating duplicates.
- 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.
- Design coverage before payloads.
- Start with one smoke simulation for the core path, one or two required Boolean outcomes, chat transport, and one iteration.
- Add regression simulations for repaired defects. Add separate edge cases for ambiguity, interruption, refusal, unavailable dependencies, failed tools, escalation, and handoffs.
- Keep scenario intent, personality behavior, and evaluation criteria independent so each can be reused.
- Name resources by behavior and expected outcome, not implementation details.
- Define the personality.
- Prefer a suitable existing personality when available.
- 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.
- Use the
create-assistantskill to assemble or validate the personality's assistant configuration when available. - Configure voice and transcriber only when voice runs need them. Chat runs use the personality's model but skip its audio path.
- Define the scenario and evaluations.
- Write
instructionsas the AI tester's intent and facts. Describe the goal and constraints without scripting the target assistant's answer. - Make each evaluation measure one observable outcome. Prefer descriptive Boolean outputs for pass/fail facts and numeric outputs for thresholds.
- Provide either
structuredOutputIdor inlinestructuredOutput, never both. Inline outputs requirenameand a JSONschema. - Match the expected
valuetype to the evaluated primitive. Use=or!=for Boolean and string; numeric types also support>,<,>=, and<=. - Keep important criteria
required: true. Use optional criteria only for diagnostics that must not fail the simulation. - Object structured outputs may be evaluated through a primitive leaf using
path. Do not compare an object or array directly.
- Write
- Isolate side effects and runtime context.
- 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.
- Match each
toolMocks[].toolNameexactly. The mockresultis always a string; encode JSON as a string when the target expects JSON-shaped output. - Assume every unmocked tool remains live in both chat and voice simulations.
- Put test values for
{{variables}}intargetOverrides.variableValues. Use synthetic data and keep secrets in Vapi credentials. - Configure
simulation.run.startedorsimulation.run.endedhooks only when requested. Preferserver.credentialIdto inline authorization headers.
- Create and verify reusable resources.
- Create in dependency order: personality and scenario, then simulation, then optional suite.
- Require
201for create operations. Verify returned IDs and the fields that define the test. - For updates, fetch the current resource first. Omit unrelated scalar fields and send the complete intended value for any array being changed; suite
simulationIdsandtargetAssignmentsreplace their existing arrays. - Re-fetch after update. Deleting a suite or other simulation resource is permanent; verify the exact ID and dependency impact first.
- Run deliberately.
- Prefer
vapi.webchatfor fast prompt, tool, and conversation-logic iteration. - Use
vapi.websocketfor speech recognition, voice output, interruptions, recordings, or final end-to-end validation. - Start with one iteration. Increase iterations only to measure behavioral consistency after a single run is valid.
- Before sending the run, recap the target, simulations or suite, transport, iterations, tool mocks, and any remaining live side effects.
- Create the run with
POST /eval/simulation/runand require201. Return the run ID and dashboardurlwhen present.
- Prefer
- Monitor and diagnose results.
- Poll
GET /eval/simulation/run/{id}untilstatusisended; do not treatqueuedorrunningas success. - Fetch
GET /eval/simulation/run/{id}/itemand inspect every item. A passing group has items to evaluate, zero failed or canceled items, and every required evaluation passes. - Report actual versus expected values, extraction errors, skipped evaluations, failure reasons, transcript evidence, transport, and iteration number.
- 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.
- Keep the evaluation stable when fixing the assistant. Change expected criteria only when the business requirement changed.
- Poll
- Handle failures honestly.
- On
400, compare the request with the current schema and correct one unambiguous validation issue before at most one retry. - On
401or403, stop for authentication or permission. On404, report the missing dependency. On409or concurrency errors, inspectGET /eval/simulation/concurrencyand active runs. On5xx, report the service failure. - Cancel only queued or running groups or items. Never claim a run, cancellation, mutation, or pass succeeded until the corresponding API response is verified.
API Implementation
Read Simulation API Reference 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.
Output Contract
Return only the sections relevant to the request:
- Test strategy: target behavior, coverage, and why Simulation rather than Eval
- Resource plan: personality, scenario, evaluations, simulation, and suite
- Side-effect review: mocked tools, live tools, hooks, variables, transport, iterations, and expected cost/concurrency impact
- Save-ready JSON or implementation code
- Created resource IDs and verified fields, when mutations succeeded
- Run ID, dashboard URL, status, item counts, and per-evaluation evidence, when a run was requested
- Failure diagnosis and the smallest recommended next change
Public Sources
More skills from the skills repository
View all 11 skillscreate-assistant
create Vapi voice AI assistants
Aug 15AgentsAPI DevelopmentVoicecreate-call
create automated phone calls with Vapi
Jul 20AgentsAutomationSpeechVoicecreate-phone-number
manage Vapi phone numbers
Aug 15OperationsTwilioVoicecreate-squad
create multi-assistant voice agent squads
Aug 15AgentsMulti-AgentVoicecreate-structured-output
create Vapi structured outputs
Aug 15AgentsAPI DevelopmentAutomationData Extractioncreate-tool
create custom tools for Vapi assistants
Aug 15AgentsAPI DevelopmentAutomationIntegrations
More from Vapi
View publishervapi
build AI voice assistants with Vapi
mcp-server
Aug 15AgentsAutomationSpeechText-to-Speech +1setup-api-key
configure Vapi API authentication
skills
Jul 20API DevelopmentAuthConfigurationsetup-webhook
configure Vapi webhooks for call events
skills
Jul 20AgentsAPI DevelopmentAutomationWebhooksvapi-bootstrap-framework
scaffold Vapi voice agent projects
skills
Aug 15AgentsEngineeringTypeScriptVoicevapi-prompt-builder
design and audit Vapi voice agent prompts
skills
Jul 17AgentsPrompt EngineeringSpeechVoice