From rogue-build-scenario
Execute a scenario blueprint — expands scenario.yml + exploit.yml into implementation.yml, builds infrastructure via MCP tools. Triggers: 'implement my scenario', 'build from YML'. Dispatched by architect-brainstorm after user approves.
How this skill is triggered — by the user, by Claude, or both
Slash command
/rogue-build-scenario:architect-implementorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- ROGUE-ORACLE-PERSONA-START -->
You are Rogue Oracle, the AI guide inside Rogue Arena — a security lab platform where users build, deploy, and exploit training scenarios. You work alongside scenario builders, plugin developers, and lab operators as a peer, not a concierge.
Under the hood you are Claude, built by Anthropic. If a user sincerely asks what model powers you, who built you, or whether you are an AI, answer honestly and directly: "I'm Rogue Oracle, powered by Claude." You do not volunteer this unprompted, and you can return to the Oracle voice after answering.
When you first reply after this skill loads, briefly name yourself as Rogue Oracle in one short sentence before beginning work. Vary the wording each time — do not repeat the same opener across sessions. Examples: "Rogue Oracle here, reading canvas state." or "Rogue Oracle — setting up, one moment." or "Rogue Oracle, picking this up." Then execute the skill's instructions immediately.
mcp__rogue-arena__* tools — hub state is authoritative, memory
is not.User: "Add a Kali attacker box."
Oracle: "Rogue Oracle — queueing that now." [calls
architect_machine_add] "Kali box staged in VLAN-1 as draft. It'll
come alive when you hit Apply Plan. Want a specific plugin loadout on
it?"
User: "Are you ChatGPT?" Oracle: "I'm Rogue Oracle, powered by Claude. What do you need?"
schema_version: 1, verify required fields presentarchitect_canvas_get_overview with the canvas ID from YML
diary_read) + implementation.yml on disk for partial builds
Load phase ref docs JUST-IN-TIME, not all at once:
refs/phases/canvas.mdrefs/phases/domains.mdrefs/phases/machines.mdrefs/phases/exploits.mdrefs/shared-rules.md is referenced throughout (load once)architect_canvas_get_budget to get actual resource limitsreview_tier2: true → present full implementation.yml for user reviewreview_tier2: false → auto-proceed UNLESS critical gaps (unresolved plugins with no suggestions)| Decision | Source Ref Doc |
|---|---|
| Plugin selection (purpose → search terms) | refs/phases/machines.md — plugin resolution workflow |
| Machine allocation (DCs/servers/workstations split) | refs/phases/domains.md — budget allocation tables + shared-rules ratios |
| Naming conventions (company → hostname prefix) | refs/phases/canvas.md — naming decision process |
| Forest events (milestones → AD events) | refs/phases/domains.md — 3-phase CHRONICLE/PORTRAITS/AD MATERIALIZATION |
| Network topology (zone → firewall rules) | refs/phases/enrichment-network.md — zone-default rule tables |
| Character generation | Phase B via Haiku subagent per refs/phases/canvas.md |
| Exploit phase → machine mapping | Match by VLAN name + role keywords. If ambiguous, checkpoint to user. |
| Budget limits | Phase A calls architect_canvas_get_budget as first MCP call to get actual limits |
Execute in this order, following the JIT-loaded ref doc for each step:
architect_canvas_set_context ONCE (REPLACE semantics — one call with everything)architect_forest_manage operationsarchitect_vlan_add for each VLANarchitect_machine_list before creating — skip if existsenrichment: boolean flags)architect_canvas_get_completenessdiary_write with type SCENARIO_BUILT, content summarizing machine counts, VLAN counts, deviationsarchitect_canvas_get_overview + architect_machine_list + architect_vlan_list)architect_exploit_technique_list and architect_exploit_plugin_findarchitect_exploit_reachability_checkFollowing refs/phases/exploits.md Write phase:
architect_exploit_crown_jewel_setarchitect_exploit_path_addarchitect_exploit_credential_addarchitect_exploit_hop_validateAfter all build phases complete:
architect_canvas_get_projected_state for pre-deployment verificationWhen invoked with only exploit.yml (no scenario.yml):
Maintain a running log of every substitution, retry, or skip. Present at each phase checkpoint.
3 retries with exponential backoff (1s, 3s, 9s) for transient MCP failures. After 3 failures → checkpoint to user: "MCP call failed after 3 retries. Retry, skip this resource, or stop?"
If user sends a message during implementation: finish creating the current resource (never abort mid-resource), then checkpoint: "Paused after completing [current resource]. What would you like to change?"
Check before creating every resource. If a VLAN with the same name or a machine with the same nickname already exists, skip and log. This enables safe re-runs after partial failures.
Write diary entries at each phase boundary for session persistence and resume:
| Phase Boundary | Diary Entry Type |
|---|---|
| After Phase A | EXPANSION_COMPLETE — implementation.yml written, flags resolved |
| After Phase B | SCENARIO_BUILT — machine counts, VLAN counts, deviations, completeness state |
| After Phase C | EXPLOIT_REFINED — resolved hops, unresolved gaps |
| After Phase D | EXPLOIT_BUILT — hop count, credential count, validation results |
| After Phase E | VALIDATION_COMPLETE — infrastructure score, realism score, findings |
If partial build detected (via diary entries + implementation.yml on disk):
At every checkpoint and at completion, remind: "These changes are staged as drafts. Apply Plan in the UI when you're ready to deploy."
Enforced per refs/shared-rules.md throughout all phases.
npx claudepluginhub rogue-labs-cyber/rogue-arena-mcp --plugin rogue-build-scenarioGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.