| name | run-scenario |
| description | Execute a ScenarioConfiguration and stream ScenarioRun status with per-action breakdown until terminal state. |
RunScenario — Scenario Execution & Status Streaming
⛔ ABSOLUTE RULE: Do NOT improvise, skip, or substitute any step. On ANY error, STOP and wait for the user.
When to use this skill (vs. the MCP server)
This skill is the human-interactive path: it reads run context from startchaos-state.json, renders status cards, and persists the run result. Use it when there is a user in the loop.
If you are an autonomous agent with no user to prompt, use chaos_execute_scenario + chaos_get_scenario_run (MCP) for a non-interactive run-and-poll flow. Cancellation: chaos_cancel_scenario_run. See mcp/README.md.
Both surfaces target Microsoft.Chaos 2026-05-01-preview and use the local az login session for auth.
How It Works
All execution and status-streaming logic lives in scripts/Invoke-RunScenario.ps1. The script handles confirmation gating, starting the run via az chaos scenario run start --skip-validation --no-wait, ScenarioRun ID resolution (start result + run list fallback), per-poll status rendering via az chaos scenario run show, terminal-state detection, and the final summary.
The AI orchestrator's only job is:
- Set
$env:STARTCHAOS_STATE_PATH to ${SESSION_DIR}/startchaos-state.json.
- Run the script.
- Handle exit codes (see below).
The script takes no parameters: configuration name, scenario, and workspace are all read from state.
Prerequisites
state.setup.status == "done" (configuration must exist and be validated)
state.setup.configuration.id populated
Running the Script
$env:STARTCHAOS_STATE_PATH = "<session-dir>/startchaos-state.json"
& "<skill-dir>/scripts/Invoke-RunScenario.ps1"
For non-interactive sessions, set $env:STARTCHAOS_NONINTERACTIVE=1 to skip the confirmation prompt.
Exit Codes → AI Actions
| Exit | Meaning | AI Action |
|---|
| 0 | Run reached a terminal state (Succeeded / Failed / Canceled) | Done — final card already rendered by script. Inspect state.run.status for terminal classification. |
| 1 | Hard error before/during execution | STOP. Render the error from script output. Wait for user. State has run.lastError. |
Cancellation
On Ctrl+C, the script invokes ScenarioRuns_Cancel (POST .../runs/{runId}/cancel) best-effort and persists state.run.lastError = "user-cancelled".
What the Script Handles (no AI logic needed)
- Confirmation card with scenario, parameters, and scope summary (suppressed when
STARTCHAOS_NONINTERACTIVE=1)
- Run start via
az chaos scenario run start --skip-validation --no-wait (validation already gated upstream)
- ScenarioRun ID resolution from the start result, with
az chaos scenario run list fallback
- Per-poll status via
az chaos scenario run show: top status, elapsed time, per-action scenarioRunSummary[] table, resource count, error counts
- Terminal-state detection (
Succeeded, Failed, Canceled) and final summary card
- Atomic state writes with error envelopes
- Cancellation handling
Related Skills
setup-scenario — must complete before this skill
chaos-impact — post-run Azure Monitor impact synthesis
start-chaos — orchestrator that invokes this skill