scenario.json file and optional Ansible playbooks. All scenarios live under a shared root (default: /etc/2501/runner/scenarios).
Directory Layout
NNN) are conventions for organization: they have no special meaning to the runner. The runner uses the full relative path from the scenarios root as the scenario key (e.g. nginx/001-broken-config).
scenario.json
The only required file. At minimum, three fields are needed:Required Fields
| Field | Description |
|---|---|
key | Unique identifier. Must match the relative directory path (e.g. nginx/001-broken-config). |
name | Human-readable name shown in reports. |
description | The instruction sent to the agent. Write it as you would a real task: describe symptoms, not solutions. |
Optional Fields
| Field | Description |
|---|---|
tags | String array for grouping. Pass a tag to -s to run all matching scenarios (e.g. -s nginx). |
hosts | Target host definitions. See Hosts & Agents. |
agents | Agent definitions. See Hosts & Agents. |
validation | Validation rules. See Validation. |
Writing Good Descriptions
Thedescription is the exact instruction the agent receives. A few guidelines:
- Describe symptoms, not solutions. “The nginx service is not running after a configuration change” is better than “Fix the nginx config file.”
- Be concrete. Reference the host name, service name, or observable behavior when you know it.
- Keep it realistic. Write it as you would a real support ticket or runbook task.
Scenario Keys and Tags
Thekey must exactly match the directory path relative to the scenarios root:

