[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-livekit-livekit-simulations":3,"mdc-9mfao9-key":42,"related-org-livekit-livekit-simulations":634,"related-repo-livekit-livekit-simulations":656},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":37,"sourceUrl":40,"mdContent":41},"livekit-simulations","run simulations for LiveKit agents","Generate targeted test scenarios for a LiveKit voice or chat agent and run them as simulations — locally, from the agent's own code plus what the user wants stress-tested. Use whenever the user wants to \"test my agent\", \"what should I test\", \"create\u002Fgenerate simulation scenarios\", \"make a sim test suite\", \"use lk agent simulate\", \"stress-test the X flow\", \"set up scenarios for my agent\", or wants to probe edge cases \u002F refusals \u002F regressions before shipping. Generates scenarios on the user's machine (their code is never uploaded) and lets the user deeply steer what gets tested. Trigger even without the word \"simulation\" when the user clearly wants to decide what to test and verify how their agent behaves across realistic conversations. Not for building a new agent from scratch (use the livekit-agents skill), load-testing, or ordinary unit tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"livekit","LiveKit","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Flivekit.png",[12,16,19,22,25],{"name":13,"slug":14,"type":15},"Agents","agents","tag",{"name":17,"slug":18,"type":15},"Messaging","messaging",{"name":20,"slug":21,"type":15},"Audio","audio",{"name":23,"slug":24,"type":15},"Testing","testing",{"name":9,"slug":8,"type":15},60,"https:\u002F\u002Fgithub.com\u002Flivekit\u002Fagent-skills","2026-06-17T08:25:03.103077","MIT",8,[14,32,8,33,34,35,36],"ai","realtime","skills","voice-agents","voice-ai",{"repoUrl":27,"stars":26,"forks":30,"topics":38,"description":39},[14,32,8,33,34,35,36],"Reusable AI coding agent skills for building voice AI with LiveKit","https:\u002F\u002Fgithub.com\u002Flivekit\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Flivekit-simulations","---\nname: livekit-simulations\ndescription: 'Generate targeted test scenarios for a LiveKit voice or chat agent and run them as simulations — locally, from the agent''s own code plus what the user wants stress-tested. Use whenever the user wants to \"test my agent\", \"what should I test\", \"create\u002Fgenerate simulation scenarios\", \"make a sim test suite\", \"use lk agent simulate\", \"stress-test the X flow\", \"set up scenarios for my agent\", or wants to probe edge cases \u002F refusals \u002F regressions before shipping. Generates scenarios on the user''s machine (their code is never uploaded) and lets the user deeply steer what gets tested. Trigger even without the word \"simulation\" when the user clearly wants to decide what to test and verify how their agent behaves across realistic conversations. Not for building a new agent from scratch (use the livekit-agents skill), load-testing, or ordinary unit tests.'\nlicense: MIT\nmetadata:\n  author: livekit\n  version: \"0.4.0\"\n---\n\n\u003C!-- ============================================================\n     BETA NOTICE — TEMPORARY. Delete this whole block (down to the\n     END BETA NOTICE marker) at GA. Everything from the\n     \"# Generating Simulation Scenarios\" heading onward is the\n     permanent, production-oriented skill.\n     ============================================================ -->\n\n> **⚠️ Simulations are in private beta (not yet generally available).**\n> - **No docs\u002FMCP coverage yet.** For the `lk agent simulate` command surface,\n>   use `lk agent simulate --help` and the LiveKit Cloud dashboard rather than\n>   `lk docs` \u002F MCP until simulations are documented.\n> - **Recent SDK required.** Running simulations needs the 1.6 line of\n>   `livekit-agents`. Confirm the installed version rather than assuming.\n> - **Limited availability \u002F auth.** Creating runs needs the project enabled for\n>   simulations and a current `lk cloud auth` session. (Generating scenarios —\n>   the main job of this skill — needs neither; it's fully local.)\n\n\u003C!-- ===================== END BETA NOTICE ====================== -->\n\n# Generating Simulation Scenarios\n\nThe most valuable thing you can do with simulations is **generate good test scenarios for the user's agent** — grounded in the agent's actual code and in what *the user* wants stress-tested — then run them. You do this **locally**: you read the code with your normal tools (nothing is uploaded), and you (the coding agent) are the model that does the generation, so no extra API keys or services are needed.\n\nA **scenario** = a simulated user's persona + goals (`instructions`) and the pass criteria (`agent_expectations`). A simulation plays each scenario against the agent over text and an LLM judge scores it. Your job is to produce a high-quality, diverse, *on-target* set of scenarios and write them to a YAML scenarios file the CLI can run.\n\n## What makes this better than autopilot\nA naive \"just generate some tests\" misses the point. Three things make this skill worth using:\n1. **It reads the agent's real code** — so scenarios respect what the agent can actually do and where it blocks (especially constraints\u002Funavailable items), instead of guessing from the name.\n2. **It is steered by the user.** The user knows what they're worried about. Always capture that intent and thread it through. This is the headline — see `references\u002Fuser-guidance.md`.\n3. **It guarantees coverage of every risk.** Left alone, generation drifts to plausible happy-path calls and silently skips the hard cases — withholding a required field, supplying an invalid value, an empty lookup, and the guardrail\u002Fabuse surface (out-of-scope, harmful, professional-advice, sensitive-data, prompt-extraction). This skill turns the agent's constraints into an explicit **risk checklist** and requires at least one scenario per item — see `references\u002Fanalyzing-the-agent.md` and `references\u002Fwriting-scenarios.md`.\n\n## The flow\n\n1. **Describe the agent + build the risk checklist** — read its code locally and write a test-oriented description (Identity \u002F Capabilities \u002F **Constraints**) to `description.md`, and an explicit **risk checklist** to `risks.yaml` (one entry per must-test constraint\u002Fguardrail, each with an `id` and `category`). Follow `references\u002Fanalyzing-the-agent.md`. Never upload the code.\n2. **Get the user's test focus** — if they didn't say what to probe, ask. Apply it per `references\u002Fuser-guidance.md` (append a `# Test Focus` to `description.md`, and bias authoring). Focus is **additive** — it deepens chosen risks but never drops the per-risk coverage floor. If they truly have no preference, generate broad and say so.\n3. **Author the scenarios — at least one per risk** — write a diverse set of ~10 scenarios grounded in `description.md` and the focus, generating the persona \u002F mood \u002F situation variety **from your own judgment** (this version ships no attribute libraries). **Guarantee coverage**: every `risks.yaml` item gets ≥1 dedicated scenario, written with the shape that actually exercises it, and tagged with `covers: [\u003Crisk id>, …]`. Follow `references\u002Fwriting-scenarios.md` (schema, the \"Party A talks to the agent\" rules, no prior state, no real PII, outcome-based expectations, the adversarial-shape taxonomy, the coverage check, don't write bad tests). Write them to `authored.yaml`. Add any user-pinned must-tests here too.\n4. **Assemble the config (coverage-enforced)** —\n   `python scripts\u002Fbuild_scenarios.py assemble --in authored.yaml --agent-description-file description.md --risks risks.yaml --strict --out scenarios.yaml`\n   (validates the schema, **fails if any risk is uncovered**, and emits the YAML scenarios file `lk agent simulate --scenarios` loads). Fix gaps and re-run until it passes.\n5. **Run it** — `lk agent simulate --scenarios scenarios.yaml` (confirm exact flags with `--help`; needs the SDK\u002Fauth noted in the beta block). Show the user the results and offer to re-roll, re-focus, or add scenarios.\n\nReuse saved `scenarios.yaml` files as a regression suite — re-run them after prompt\u002Fmodel\u002Ftool changes.\n\n## Principles\n- **Never upload the user's code.** Reading it locally is the point; it's their IP.\n- **The user's intent is the differentiator** — incorporate it every time; don't silently autopilot.\n- **Ground every scenario in the description**, especially Constraints — a scenario the agent can't possibly satisfy (or a guardrail it *should* refuse) must have expectations that reflect that.\n- **The script is deterministic glue; you are the generator.** Let `build_scenarios.py` handle assembly + the coverage check; you do the reading, the judgement, the diversity, and the authoring.\n\n## Verify, don't invent (freeze-forever)\nThis skill is the method (no bundled libraries — you supply diversity yourself). The exact `lk agent simulate` flags, the CI wait\u002Ffail flag, the minimum SDK version, and the dashboard come from live sources because they change — use `lk agent simulate --help` and (post-beta) `lk docs` \u002F the LiveKit MCP server. A wrong flag wastes a run; look it up rather than guessing.\n\n## After running: acting on results (secondary)\nOnce a run completes, read the per-scenario pass\u002Ffail, the run summary, and the transcripts of failures. Fix the agent where a failure is real (and re-run); recognize when a failure is actually a bad scenario and fix the scenario instead. Keep this lightweight — modern models are already good at the fix step; the durable value of this skill is the scenarios you generate and keep.\n",{"data":43,"body":46},{"name":4,"description":6,"license":29,"metadata":44},{"author":8,"version":45},"0.4.0",{"type":47,"children":48},"root",[49,141,148,175,210,217,222,286,292,514,527,533,591,597,623,629],{"type":50,"tag":51,"props":52,"children":53},"element","blockquote",{},[54,65],{"type":50,"tag":55,"props":56,"children":57},"p",{},[58],{"type":50,"tag":59,"props":60,"children":61},"strong",{},[62],{"type":63,"value":64},"text","⚠️ Simulations are in private beta (not yet generally available).",{"type":50,"tag":66,"props":67,"children":68},"ul",{},[69,105,123],{"type":50,"tag":70,"props":71,"children":72},"li",{},[73,78,80,87,89,95,97,103],{"type":50,"tag":59,"props":74,"children":75},{},[76],{"type":63,"value":77},"No docs\u002FMCP coverage yet.",{"type":63,"value":79}," For the ",{"type":50,"tag":81,"props":82,"children":84},"code",{"className":83},[],[85],{"type":63,"value":86},"lk agent simulate",{"type":63,"value":88}," command surface,\nuse ",{"type":50,"tag":81,"props":90,"children":92},{"className":91},[],[93],{"type":63,"value":94},"lk agent simulate --help",{"type":63,"value":96}," and the LiveKit Cloud dashboard rather than\n",{"type":50,"tag":81,"props":98,"children":100},{"className":99},[],[101],{"type":63,"value":102},"lk docs",{"type":63,"value":104}," \u002F MCP until simulations are documented.",{"type":50,"tag":70,"props":106,"children":107},{},[108,113,115,121],{"type":50,"tag":59,"props":109,"children":110},{},[111],{"type":63,"value":112},"Recent SDK required.",{"type":63,"value":114}," Running simulations needs the 1.6 line of\n",{"type":50,"tag":81,"props":116,"children":118},{"className":117},[],[119],{"type":63,"value":120},"livekit-agents",{"type":63,"value":122},". Confirm the installed version rather than assuming.",{"type":50,"tag":70,"props":124,"children":125},{},[126,131,133,139],{"type":50,"tag":59,"props":127,"children":128},{},[129],{"type":63,"value":130},"Limited availability \u002F auth.",{"type":63,"value":132}," Creating runs needs the project enabled for\nsimulations and a current ",{"type":50,"tag":81,"props":134,"children":136},{"className":135},[],[137],{"type":63,"value":138},"lk cloud auth",{"type":63,"value":140}," session. (Generating scenarios —\nthe main job of this skill — needs neither; it's fully local.)",{"type":50,"tag":142,"props":143,"children":145},"h1",{"id":144},"generating-simulation-scenarios",[146],{"type":63,"value":147},"Generating Simulation Scenarios",{"type":50,"tag":55,"props":149,"children":150},{},[151,153,158,160,166,168,173],{"type":63,"value":152},"The most valuable thing you can do with simulations is ",{"type":50,"tag":59,"props":154,"children":155},{},[156],{"type":63,"value":157},"generate good test scenarios for the user's agent",{"type":63,"value":159}," — grounded in the agent's actual code and in what ",{"type":50,"tag":161,"props":162,"children":163},"em",{},[164],{"type":63,"value":165},"the user",{"type":63,"value":167}," wants stress-tested — then run them. You do this ",{"type":50,"tag":59,"props":169,"children":170},{},[171],{"type":63,"value":172},"locally",{"type":63,"value":174},": you read the code with your normal tools (nothing is uploaded), and you (the coding agent) are the model that does the generation, so no extra API keys or services are needed.",{"type":50,"tag":55,"props":176,"children":177},{},[178,180,185,187,193,195,201,203,208],{"type":63,"value":179},"A ",{"type":50,"tag":59,"props":181,"children":182},{},[183],{"type":63,"value":184},"scenario",{"type":63,"value":186}," = a simulated user's persona + goals (",{"type":50,"tag":81,"props":188,"children":190},{"className":189},[],[191],{"type":63,"value":192},"instructions",{"type":63,"value":194},") and the pass criteria (",{"type":50,"tag":81,"props":196,"children":198},{"className":197},[],[199],{"type":63,"value":200},"agent_expectations",{"type":63,"value":202},"). A simulation plays each scenario against the agent over text and an LLM judge scores it. Your job is to produce a high-quality, diverse, ",{"type":50,"tag":161,"props":204,"children":205},{},[206],{"type":63,"value":207},"on-target",{"type":63,"value":209}," set of scenarios and write them to a YAML scenarios file the CLI can run.",{"type":50,"tag":211,"props":212,"children":214},"h2",{"id":213},"what-makes-this-better-than-autopilot",[215],{"type":63,"value":216},"What makes this better than autopilot",{"type":50,"tag":55,"props":218,"children":219},{},[220],{"type":63,"value":221},"A naive \"just generate some tests\" misses the point. Three things make this skill worth using:",{"type":50,"tag":223,"props":224,"children":225},"ol",{},[226,236,254],{"type":50,"tag":70,"props":227,"children":228},{},[229,234],{"type":50,"tag":59,"props":230,"children":231},{},[232],{"type":63,"value":233},"It reads the agent's real code",{"type":63,"value":235}," — so scenarios respect what the agent can actually do and where it blocks (especially constraints\u002Funavailable items), instead of guessing from the name.",{"type":50,"tag":70,"props":237,"children":238},{},[239,244,246,252],{"type":50,"tag":59,"props":240,"children":241},{},[242],{"type":63,"value":243},"It is steered by the user.",{"type":63,"value":245}," The user knows what they're worried about. Always capture that intent and thread it through. This is the headline — see ",{"type":50,"tag":81,"props":247,"children":249},{"className":248},[],[250],{"type":63,"value":251},"references\u002Fuser-guidance.md",{"type":63,"value":253},".",{"type":50,"tag":70,"props":255,"children":256},{},[257,262,264,269,271,277,279,285],{"type":50,"tag":59,"props":258,"children":259},{},[260],{"type":63,"value":261},"It guarantees coverage of every risk.",{"type":63,"value":263}," Left alone, generation drifts to plausible happy-path calls and silently skips the hard cases — withholding a required field, supplying an invalid value, an empty lookup, and the guardrail\u002Fabuse surface (out-of-scope, harmful, professional-advice, sensitive-data, prompt-extraction). This skill turns the agent's constraints into an explicit ",{"type":50,"tag":59,"props":265,"children":266},{},[267],{"type":63,"value":268},"risk checklist",{"type":63,"value":270}," and requires at least one scenario per item — see ",{"type":50,"tag":81,"props":272,"children":274},{"className":273},[],[275],{"type":63,"value":276},"references\u002Fanalyzing-the-agent.md",{"type":63,"value":278}," and ",{"type":50,"tag":81,"props":280,"children":282},{"className":281},[],[283],{"type":63,"value":284},"references\u002Fwriting-scenarios.md",{"type":63,"value":253},{"type":50,"tag":211,"props":287,"children":289},{"id":288},"the-flow",[290],{"type":63,"value":291},"The flow",{"type":50,"tag":223,"props":293,"children":294},{},[295,356,394,455,488],{"type":50,"tag":70,"props":296,"children":297},{},[298,303,305,310,312,318,320,324,326,332,334,340,341,347,349,354],{"type":50,"tag":59,"props":299,"children":300},{},[301],{"type":63,"value":302},"Describe the agent + build the risk checklist",{"type":63,"value":304}," — read its code locally and write a test-oriented description (Identity \u002F Capabilities \u002F ",{"type":50,"tag":59,"props":306,"children":307},{},[308],{"type":63,"value":309},"Constraints",{"type":63,"value":311},") to ",{"type":50,"tag":81,"props":313,"children":315},{"className":314},[],[316],{"type":63,"value":317},"description.md",{"type":63,"value":319},", and an explicit ",{"type":50,"tag":59,"props":321,"children":322},{},[323],{"type":63,"value":268},{"type":63,"value":325}," to ",{"type":50,"tag":81,"props":327,"children":329},{"className":328},[],[330],{"type":63,"value":331},"risks.yaml",{"type":63,"value":333}," (one entry per must-test constraint\u002Fguardrail, each with an ",{"type":50,"tag":81,"props":335,"children":337},{"className":336},[],[338],{"type":63,"value":339},"id",{"type":63,"value":278},{"type":50,"tag":81,"props":342,"children":344},{"className":343},[],[345],{"type":63,"value":346},"category",{"type":63,"value":348},"). Follow ",{"type":50,"tag":81,"props":350,"children":352},{"className":351},[],[353],{"type":63,"value":276},{"type":63,"value":355},". Never upload the code.",{"type":50,"tag":70,"props":357,"children":358},{},[359,364,366,371,373,379,380,385,387,392],{"type":50,"tag":59,"props":360,"children":361},{},[362],{"type":63,"value":363},"Get the user's test focus",{"type":63,"value":365}," — if they didn't say what to probe, ask. Apply it per ",{"type":50,"tag":81,"props":367,"children":369},{"className":368},[],[370],{"type":63,"value":251},{"type":63,"value":372}," (append a ",{"type":50,"tag":81,"props":374,"children":376},{"className":375},[],[377],{"type":63,"value":378},"# Test Focus",{"type":63,"value":325},{"type":50,"tag":81,"props":381,"children":383},{"className":382},[],[384],{"type":63,"value":317},{"type":63,"value":386},", and bias authoring). Focus is ",{"type":50,"tag":59,"props":388,"children":389},{},[390],{"type":63,"value":391},"additive",{"type":63,"value":393}," — it deepens chosen risks but never drops the per-risk coverage floor. If they truly have no preference, generate broad and say so.",{"type":50,"tag":70,"props":395,"children":396},{},[397,402,404,409,411,416,418,423,425,430,432,438,440,445,447,453],{"type":50,"tag":59,"props":398,"children":399},{},[400],{"type":63,"value":401},"Author the scenarios — at least one per risk",{"type":63,"value":403}," — write a diverse set of ~10 scenarios grounded in ",{"type":50,"tag":81,"props":405,"children":407},{"className":406},[],[408],{"type":63,"value":317},{"type":63,"value":410}," and the focus, generating the persona \u002F mood \u002F situation variety ",{"type":50,"tag":59,"props":412,"children":413},{},[414],{"type":63,"value":415},"from your own judgment",{"type":63,"value":417}," (this version ships no attribute libraries). ",{"type":50,"tag":59,"props":419,"children":420},{},[421],{"type":63,"value":422},"Guarantee coverage",{"type":63,"value":424},": every ",{"type":50,"tag":81,"props":426,"children":428},{"className":427},[],[429],{"type":63,"value":331},{"type":63,"value":431}," item gets ≥1 dedicated scenario, written with the shape that actually exercises it, and tagged with ",{"type":50,"tag":81,"props":433,"children":435},{"className":434},[],[436],{"type":63,"value":437},"covers: [\u003Crisk id>, …]",{"type":63,"value":439},". Follow ",{"type":50,"tag":81,"props":441,"children":443},{"className":442},[],[444],{"type":63,"value":284},{"type":63,"value":446}," (schema, the \"Party A talks to the agent\" rules, no prior state, no real PII, outcome-based expectations, the adversarial-shape taxonomy, the coverage check, don't write bad tests). Write them to ",{"type":50,"tag":81,"props":448,"children":450},{"className":449},[],[451],{"type":63,"value":452},"authored.yaml",{"type":63,"value":454},". Add any user-pinned must-tests here too.",{"type":50,"tag":70,"props":456,"children":457},{},[458,463,465,471,473,478,480,486],{"type":50,"tag":59,"props":459,"children":460},{},[461],{"type":63,"value":462},"Assemble the config (coverage-enforced)",{"type":63,"value":464}," —\n",{"type":50,"tag":81,"props":466,"children":468},{"className":467},[],[469],{"type":63,"value":470},"python scripts\u002Fbuild_scenarios.py assemble --in authored.yaml --agent-description-file description.md --risks risks.yaml --strict --out scenarios.yaml",{"type":63,"value":472},"\n(validates the schema, ",{"type":50,"tag":59,"props":474,"children":475},{},[476],{"type":63,"value":477},"fails if any risk is uncovered",{"type":63,"value":479},", and emits the YAML scenarios file ",{"type":50,"tag":81,"props":481,"children":483},{"className":482},[],[484],{"type":63,"value":485},"lk agent simulate --scenarios",{"type":63,"value":487}," loads). Fix gaps and re-run until it passes.",{"type":50,"tag":70,"props":489,"children":490},{},[491,496,498,504,506,512],{"type":50,"tag":59,"props":492,"children":493},{},[494],{"type":63,"value":495},"Run it",{"type":63,"value":497}," — ",{"type":50,"tag":81,"props":499,"children":501},{"className":500},[],[502],{"type":63,"value":503},"lk agent simulate --scenarios scenarios.yaml",{"type":63,"value":505}," (confirm exact flags with ",{"type":50,"tag":81,"props":507,"children":509},{"className":508},[],[510],{"type":63,"value":511},"--help",{"type":63,"value":513},"; needs the SDK\u002Fauth noted in the beta block). Show the user the results and offer to re-roll, re-focus, or add scenarios.",{"type":50,"tag":55,"props":515,"children":516},{},[517,519,525],{"type":63,"value":518},"Reuse saved ",{"type":50,"tag":81,"props":520,"children":522},{"className":521},[],[523],{"type":63,"value":524},"scenarios.yaml",{"type":63,"value":526}," files as a regression suite — re-run them after prompt\u002Fmodel\u002Ftool changes.",{"type":50,"tag":211,"props":528,"children":530},{"id":529},"principles",[531],{"type":63,"value":532},"Principles",{"type":50,"tag":66,"props":534,"children":535},{},[536,546,556,573],{"type":50,"tag":70,"props":537,"children":538},{},[539,544],{"type":50,"tag":59,"props":540,"children":541},{},[542],{"type":63,"value":543},"Never upload the user's code.",{"type":63,"value":545}," Reading it locally is the point; it's their IP.",{"type":50,"tag":70,"props":547,"children":548},{},[549,554],{"type":50,"tag":59,"props":550,"children":551},{},[552],{"type":63,"value":553},"The user's intent is the differentiator",{"type":63,"value":555}," — incorporate it every time; don't silently autopilot.",{"type":50,"tag":70,"props":557,"children":558},{},[559,564,566,571],{"type":50,"tag":59,"props":560,"children":561},{},[562],{"type":63,"value":563},"Ground every scenario in the description",{"type":63,"value":565},", especially Constraints — a scenario the agent can't possibly satisfy (or a guardrail it ",{"type":50,"tag":161,"props":567,"children":568},{},[569],{"type":63,"value":570},"should",{"type":63,"value":572}," refuse) must have expectations that reflect that.",{"type":50,"tag":70,"props":574,"children":575},{},[576,581,583,589],{"type":50,"tag":59,"props":577,"children":578},{},[579],{"type":63,"value":580},"The script is deterministic glue; you are the generator.",{"type":63,"value":582}," Let ",{"type":50,"tag":81,"props":584,"children":586},{"className":585},[],[587],{"type":63,"value":588},"build_scenarios.py",{"type":63,"value":590}," handle assembly + the coverage check; you do the reading, the judgement, the diversity, and the authoring.",{"type":50,"tag":211,"props":592,"children":594},{"id":593},"verify-dont-invent-freeze-forever",[595],{"type":63,"value":596},"Verify, don't invent (freeze-forever)",{"type":50,"tag":55,"props":598,"children":599},{},[600,602,607,609,614,616,621],{"type":63,"value":601},"This skill is the method (no bundled libraries — you supply diversity yourself). The exact ",{"type":50,"tag":81,"props":603,"children":605},{"className":604},[],[606],{"type":63,"value":86},{"type":63,"value":608}," flags, the CI wait\u002Ffail flag, the minimum SDK version, and the dashboard come from live sources because they change — use ",{"type":50,"tag":81,"props":610,"children":612},{"className":611},[],[613],{"type":63,"value":94},{"type":63,"value":615}," and (post-beta) ",{"type":50,"tag":81,"props":617,"children":619},{"className":618},[],[620],{"type":63,"value":102},{"type":63,"value":622}," \u002F the LiveKit MCP server. A wrong flag wastes a run; look it up rather than guessing.",{"type":50,"tag":211,"props":624,"children":626},{"id":625},"after-running-acting-on-results-secondary",[627],{"type":63,"value":628},"After running: acting on results (secondary)",{"type":50,"tag":55,"props":630,"children":631},{},[632],{"type":63,"value":633},"Once a run completes, read the per-scenario pass\u002Ffail, the run summary, and the transcripts of failures. Fix the agent where a failure is real (and re-run); recognize when a failure is actually a bad scenario and fix the scenario instead. Keep this lightweight — modern models are already good at the fix step; the durable value of this skill is the scenarios you generate and keep.",{"items":635,"total":655},[636,647],{"slug":120,"name":120,"fn":637,"description":638,"org":639,"tags":640,"stars":26,"repoUrl":27,"updatedAt":646},"build voice AI agents with LiveKit","Build voice AI agents with LiveKit Cloud and the Agents SDK. Use when the user asks to \"build a voice agent\", \"create a LiveKit agent\", \"add voice AI\", \"implement handoffs\", \"structure agent workflows\", or is working with LiveKit Agents SDK. Provides opinionated guidance for the recommended path: LiveKit Cloud + LiveKit Inference. REQUIRES writing tests for all implementations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[641,642,643],{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":644,"slug":645,"type":15},"Workflow Automation","workflow-automation","2026-04-06T18:28:00.485904",{"slug":4,"name":4,"fn":5,"description":6,"org":648,"tags":649,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[650,651,652,653,654],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},2,{"items":657,"total":655},[658,664],{"slug":120,"name":120,"fn":637,"description":638,"org":659,"tags":660,"stars":26,"repoUrl":27,"updatedAt":646},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[661,662,663],{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":644,"slug":645,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":665,"tags":666,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[667,668,669,670,671],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15}]