# CyberSim Scenario Format v1.0 — Specification & Author Guide ## 1. Overview The **CyberSim Scenario Format v1.0** is a declarative, portable, JSON-based format for authoring simulation scenarios in CyberSim OS. It enables scenario designers to construct complete cybersecurity training experiences without writing or modifying CyberSim OS code. A scenario package defines: - **Simulation identity & metadata** (title, description, duration, learner profile, target score) - **Workplace context** (people, organizations, domains, department hierarchies) - **Simulated objects** (emails, web pages, intranet sites, forms, documents, spreadsheets, files) - **Scheduled & reactive events** (timed triggers, action-driven consequences, delays, repetitions) - **Behavior vocabulary & actions** (app launches, notifications, alert generation, inbox deliveries) - **Multi-axis behavioral evaluation** (scoring rules, pedagogical findings, after-action feedback) --- ## 2. Package Structure A scenario is stored within a self-contained directory: ``` scenarios/my-scenario/ ├── scenario.json # Main manifest & scenario definition (required) ├── assets/ # Local attachments & assets (optional) └── README.md # Scenario author notes & changelog (optional) ``` For large scenarios, sub-collections can optionally be split across multiple files using `$ref:` references: ```json { "formatVersion": "1.0", "id": "enterprise-phish-triage", "people": "$ref:people.json", "messages": "$ref:messages.json" } ``` *Note: All referenced files must reside within the scenario directory tree. Paths with `..`, absolute paths, and external URL schemes are rejected by the loader.* --- ## 3. Top-Level Manifest Reference | Property | Type | Required | Description | |---|---|---|---| | `formatVersion` | `string` | **Yes** | Must be `"1.0"`. | | `id` | `string` | **Yes** | Unique identifier (lowercase alphanumeric and hyphens). | | `version` | `string` | **Yes** | Semantic version of the scenario (e.g. `"1.0.0"`). | | `title` | `string` | **Yes** | Human-readable title displayed in the launcher and AAR. | | `description` | `string` | **Yes** | Overview of the simulation setting and primary challenges. | | `durationSeconds`| `number` | **Yes** | Expected run time in seconds (e.g. `900`). | | `mode` | `string` | **Yes** | Instruction mode: `"guided"`, `"practice"`, or `"assessment"`. | | `entryEvent` | `string` | **Yes** | ID of the event executed at scenario start. | | `passingScore` | `number` | **Yes** | Minimum score required to pass and earn a certificate (0–100). | | `engine` | `object` | No | Minimum engine version requirements (`{ "minimumVersion": "0.2.0" }`). | | `learner` | `object` | No | Initial persona: `{ name, role, email, department }`. | | `organizations` | `array` | No | List of simulated organizations & trusted domain lists. | | `people` | `array` | No | Simulated personas and contact directory. | | `objectives` | `array` | No | Visible shift objectives shown in Start Menu and UI. | | `messages` | `array` | No | Simulated email messages (Inlook). | | `pages` | `array` | No | Simulated web pages and browser targets (Navigator). | | `files` | `array` | No | Virtual filesystem items (Documents, Downloads, Shared). | | `notifications`| `array` | No | Pre-configured desktop toast notification templates. | | `alerts` | `array` | No | Security Center alert definitions. | | `events` | `array` | **Yes** | Declarative triggers and action lists. | | `scoring` | `object` | **Yes** | Category declarations and rule definitions. | | `findings` | `array` | No | Predefined pedagogical findings and deductions. | | `feedback` | `array` | No | Performance-conditional after-action remarks. | | `completion` | `object` | No | Finalization criteria and certificate issuance rules. | --- ## 4. Object Types ### 4.1 Organizations (`organizations[]`) Defines trusted enterprise domains and third-party corporate entities. ```json { "id": "nexacore", "name": "NexaCore Technologies", "domains": ["nexacore.internal"], "departments": ["Finance", "Information Security", "IT Helpdesk"], "securityContacts": ["alex.rivera@nexacore.internal"] } ``` ### 4.2 People (`people[]`) Defines characters and email identities. ```json { "id": "alex-rivera", "name": "Alex Rivera", "role": "Chief Information Security Officer", "email": "alex.rivera@nexacore.internal", "organization": "nexacore", "department": "Information Security" } ``` ### 4.3 Messages (`messages[]`) Defines email communications in Inlook. ```json { "id": "email_phish_pwreset", "sender": "NexaCore IT Helpdesk", "rfcSender": "support@nexac0re-portal.com", "recipient": "jordan.taylor@nexacore.internal", "subject": "URGENT: Password Verification Required", "date": "09:05 AM", "folder": "pending", "unread": true, "body": "Please confirm credentials at: https://intranet.nexacore.internal/sso", "links": [ { "displayText": "https://intranet.nexacore.internal/sso", "actualUrl": "http://login-nexac0re-portal.com/auth/login" } ], "attachments": [] } ``` ### 4.4 Pages (`pages[]`) Defines intranet and external web destinations in Navigator. Form submissions are bound declaratively by ID. ```json { "url": "http://login-nexac0re-portal.com/auth/login", "title": "NexaCore Identity SSO", "isSecure": false, "isPhishing": true, "content": "
", "forms": [ { "id": "phish-login-form", "onSubmit": { "emitEvent": "NAV_FORM_SUBMITTED", "target": "phish_login_form", "response": { "type": "pageContent", "content": "