A Simterm campaign is a self-contained RON file (or a directory holding one) that the engine loads at runtime. The framework itself ships no story content — every hostname, vulnerability, filesystem, narrative line, and visual theme is authored by you in data. The engine only provides the mechanics to interpret it. A campaign can be loaded from:Documentation Index
Fetch the complete documentation index at: https://mintlify.com/0x-unkwn0wn/simterm/llms.txt
Use this file to discover all available pages before exploring further.
- A directory that contains a
campaign.ronfile, or - A direct
.ronfile path.
Campaign struct fields
The top-levelCampaign struct is the root of every campaign file. All fields except name and missions have safe defaults; define only what your campaign needs.
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | Campaign name shown on launch. |
language | en or es | es | Language for generic engine/UI text. Campaign story text is not auto-translated. |
intro | string list | [] | Lines displayed when the campaign starts. |
missions | Mission list | required | Ordered mission sequence. Must not be empty. |
theme | Theme | neutral defaults | Branding, prompt, grades, and cosmetic UI text. |
easter_eggs | EasterEgg list | [] | Hidden flavor commands that do not affect game state. |
fortunes | string list | generic defaults | Texts used by the fortune command (random pick). |
signals | string list | generic defaults | Plain-text words used by the signal minigame. |
achievements | CampaignAchievement list | [] | Campaign-defined achievements with declarative triggers. |
commands | CampaignCommand list | [] | Declarative commands with state effects (flags, trace, achievements). |
env | string→string map | {} | Environment variables for env, export, and $VAR expansion. |
processes | string list | [] | Extra ps rows beyond those synthesized from services. |
terminal | TerminalCommand list | [] | Authored realistic shell commands for fictional CLIs (presentational only). |
Minimal campaign skeleton
The skeleton below contains only the two required fields —name and missions — with a single host mission. Every omitted field uses its default.
Loading a campaign
Pass--campaign with the path to your campaign directory or .ron file:
Campaign authoring workflow
Edit campaign.ron
Open
campaigns/my_campaign/campaign.ron and replace the example content with your own missions, targets, filesystem trees, and theme text.Run --doctor
Run the deeper semantic pass to catch dangling references, unreachable content, and out-of-range values:
Sub-pages in this section
Missions
Mission fields, entry vectors, endings, and multi-host networks.
Targets
TargetNode, services, vulnerabilities, and local privilege escalation.
Filesystem
Virtual filesystem, loot, hash puzzles, binaries, and encoding.
Commands
Easter eggs, declarative campaign commands, terminal commands, and achievements.
Theming
Theme struct, stealth grades, defense messages, fortunes, and signals.
Validation
—check vs —doctor, error and warning reference, and troubleshooting.
Campaigns are distributed separately from the Simterm framework. Your campaign directory is self-contained — players run it with
simterm --campaign ./your_campaign. The framework is MIT licensed; your campaign content can use whatever license you choose.