You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Restructure output into unified scenario directories
Each scenario now lives in one directory with all related files:
scenarios/<name>/
scenario.yaml # scenario definition
ENVIRONMENT.md # student context (from /eforge scenario)
GROUND_TRUTH.md # answer key (from eforge generate)
data/ # generated log files
windows_event_security.xml
zeek_conn.json
...
Key changes:
- CLI generate derives data/ path from scenario file location
- Re-generation clears and overwrites data/ (no timestamped dirs)
- GROUND_TRUTH.md written to scenario root, not inside data/
- Engine accepts separate ground_truth_dir parameter
- --output flag still works as full override for backward compat
- All 4 skills updated for new path conventions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: commands/eforge/generate.md
+16-3Lines changed: 16 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -76,15 +76,28 @@ cd /Users/dabianco/projects/SURGe/data-gen-test
76
76
uv run eforge generate <scenario-file> --verbose
77
77
```
78
78
79
-
Always use `--verbose` so you can see progress and diagnose issues. Generation creates a timestamped output directory like `output/scenario-name-20240115-100000/`.
79
+
Always use `--verbose` so you can see progress and diagnose issues. Generation writes log files to a `data/` subdirectory alongside the scenario file:
80
+
81
+
```
82
+
scenarios/<scenario-name>/
83
+
scenario.yaml ← input
84
+
ENVIRONMENT.md ← created by /eforge scenario
85
+
GROUND_TRUTH.md ← generated (answer key)
86
+
data/ ← generated log files
87
+
windows_event_security.xml
88
+
zeek_conn.json
89
+
...
90
+
```
91
+
92
+
Re-running generation overwrites the previous `data/` directory.
80
93
81
94
### 3. Post-Generation
82
95
83
96
After successful generation:
84
97
- List the generated files and their sizes
85
98
- Check that expected formats were produced
86
-
- If the scenario had a storyline, note that `GROUND_TRUTH.md` was generated in the output directory — this is the answer key containing the full attack timeline and IOCs
87
-
- If an `ENVIRONMENT.md` exists alongside the scenario file (created by `/eforge scenario`), copy it into the output directory so it sits alongside the generated logs and GROUND_TRUTH.md
99
+
- If the scenario had a storyline, note that `GROUND_TRUTH.md` was generated alongside the scenario file — this is the answer key containing the full attack timeline and IOCs
100
+
- `ENVIRONMENT.md` (created by `/eforge scenario`) is already in the same directory — no copying needed
Copy file name to clipboardExpand all lines: commands/eforge/scenario.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -411,8 +411,8 @@ After generating the scenario YAML, also create an `ENVIRONMENT.md` file in the
411
411
412
412
After the interview, generate both files:
413
413
414
-
1. **Scenario YAML** — Write to the user's chosen path (default: `scenarios/<scenario-name>.yaml`)
415
-
2. **ENVIRONMENT.md** — Write alongside the scenario YAML
414
+
1. **Scenario YAML** — Write to the user's chosen path (default: `scenarios/<scenario-name>/scenario.yaml`)
415
+
2. **ENVIRONMENT.md** — Write alongside the scenario YAML (default: `scenarios/<scenario-name>/ENVIRONMENT.md`)
416
416
3. **Realism Review** — Before validating, review the entire scenario as a tough-but-fair devil's advocate. Check:
417
417
- **Attack realism**: Does the attack chain make sense? Would a real attacker do this in this order? Are there missing steps (e.g., no reconnaissance before lateral movement, no persistence after initial access)?
418
418
- **Technical accuracy**: Are command lines correct for the target OS? Are process paths right? Do the MITRE ATT&CK technique IDs match what's actually happening?
0 commit comments