GHOSTWORK

GHOSTWORK

Your terminal is your weapon. Your rig is your character sheet.
Your operating system is your class.

A single-player hacking simulation where you build your rig, choose your OS, and breach procedurally generated networks using real methodology — all through a fully diegetic CRT terminal interface.

Singleplayer Simulation 139 Commands 52 Contracts 6 Operating Systems 6 Languages CVE Catalog Accessible 16 Moddable Content Types Steam Deck Verified

$ Game Pillars

Five design principles govern every system in GHOSTWORK. No feature ships unless it serves at least one pillar.

$ How to Play

The Core Loop

GHOSTWORK operates on three nested loops that create its gameplay rhythm:

Moment-to-Moment

Type commands into the terminal. Each command costs ticks (time) and generates heat (noise). Read output. Make decisions. Every keystroke matters.

Session Loop

Accept a contract from the BBS. Scan the target. Find vulnerabilities. Exploit them. Complete objectives. Extract cleanly. Get paid. Get graded.

Long-Term Arc

Upgrade your rig. Build faction reputation. Take harder contracts. Uncover the conspiracy. Decide who to trust in a world where everyone is compromised.

Getting Started

When you boot GHOSTWORK for the first time:

  1. Choose your OS — each has a distinct visual identity and gameplay modifiers. LinuxForge is a solid default; PhantomBSD rewards stealth play.
  2. Choose your tier — start at Tier 1 (Script Kiddie) if you're new to hacking games. You can switch tiers at any time.
  3. Type help to see available commands. Type man <command> for detailed usage on any command.
  4. Type contracts to browse the BBS board. View a contract with contracts <number>. Accept one with contracts accept <number>.
  5. Complete the contract — scan, connect, exploit, extract. Monitor your heat throughout.
  6. Get paid, upgrade, repeat. Use upgrade to browse hardware. Use rig to see your current setup.

The CRT Experience

There are no menus. There is no HUD. The CRT shader reacts to gameplay through seven distinct mood states:

StateVisual Effect
CalmSteady phosphor glow, minimal noise
FocusPhosphor brightens, scanlines sharpen
TensionSubtle static rises, glow intensifies
AlertScanlines intensify, color shifts toward danger palette
DangerHeavy static, screen flicker, phosphor instability
CompromisedScreen goes cold — desaturated, flickering
TriumphClean, bright, steady — the screen rewards a clean extraction

$ Tier System

Tiers control abstraction depth, not difficulty. The simulation engine is identical at every tier. Tier determines how information is presented and how much the system does on your behalf. Switch freely at any time.

Language matters. Tiers are never called difficulty levels. They represent working depth: how close to the metal you operate. T1 delegates to the machine. T3 takes direct control. The machine does the same work either way.

T1 Script Kiddie

Guided commands with auto-completion. Verbose help text. Step-by-step scaffolding. The terminal guides you through each operation with suggestions and explanations.

Presentation: Maximum guidance
Compound commands: hack (auto-exploit)

T2 Operator

Standard command-line workflow. Realistic flags and options. No hand-holding, but clear feedback. The way a working pentester operates day-to-day.

Presentation: Professional tooling
Compound commands: Chained pipelines

T3 APT

Protocol-level operations. Packet crafting. Exploit development. Shell scripting. Minimal UI chrome. Real cybersecurity concepts, real methodology, maximum depth.

Presentation: Raw protocol access
Compound commands: Custom scripts

$ Operating Systems

Six operating systems, each with a distinct philosophy, visual identity, and gameplay personality. Your OS choice affects your phosphor palette (CRT color theme), window manager style, starting hardware, and gameplay modifiers.

LinuxForge

Open source, community-driven

Green phosphor CRT. Tiling window manager. Community-refined tools generate less noise.

Modifier: Heat ×0.9 (10% less heat)
WM: Tiling

PhantomBSD

Paranoid security

Amber phosphor CRT. Tiling window manager. Minimal attack surface — hardened against both detection and counter-hacking.

Modifier: Heat ×0.75 (25% less heat)
Modifier: Counter-hack resist 0.3
WM: Tiling

SpecterOS

Corporate polish

Clean white-on-blue. Floating window manager. Ships with upgraded network hardware for deeper reconnaissance.

Modifier: Starting NIC-2 (deeper scans)
WM: Floating

Aether

Experimental, adaptive

Cyan accent phosphor. Floating window manager. Faster command execution, but unstable — commands can glitch unpredictably.

Modifier: CPU speed ×0.85 (15% faster)
Modifier: 5% glitch chance
WM: Floating

NullOS

Bare metal

White phosphor. Tiling window manager. No identity until you give it one. No bonuses, no penalties — pure skill, no crutches.

Modifier: None
WM: Tiling

CypherOS

Enterprise networking

Blue-on-black. Floating window manager. Windows backbone with enterprise networking — supports extra concurrent sessions.

Modifier: +1 concurrent session
WM: Floating

Phosphor Palettes

Each OS defines 10 semantic color keys that control the CRT visual identity:

KeyPurpose
bgTerminal background
fg_primaryPrimary text color
fg_secondarySecondary / dimmed text
accentHighlights, prompts, active elements
borderPane borders and dividers
selectionText selection background
commentComments, hints, muted annotations
alert_lowLow-severity alerts
alert_midMedium-severity alerts
alert_highHigh-severity / critical alerts

$ Hardware & Rig

Your hardware is your character sheet. Six slots, three upgrade tiers each. Every component creates real mechanical constraints that shape your approach. Hardware upgrades are purchased from the market — gated by contracts_completed, not by tier.

SlotEffectTier 1Tier 2Tier 3
CPU Command execution speed (tick multiplier) 1.0× 0.75× 3,000 CR 0.5× 8,000 CR
RAM Max terminal panes open simultaneously 2 panes 3 panes 800 CR 5 panes 4,000 CR
NIC Scan depth into target networks Depth 1 Depth 2 2,000 CR Depth 3 5,000 CR
STORAGE Local disk for scripts and exfiltrated data 256 KB 1,024 KB 1,200 CR 4,096 KB 4,000 CR
GPU Password cracking speed (tick cost divisor) ÷1 ÷2 4,000 CR ÷3 10,000 CR
COOLING Thermal capacity before throttling 4 units 8 units 2,500 CR 15 units 6,000 CR
Sell refund. Selling hardware returns floor(price × 0.4). Upgrading a slot replaces the previous component — installing a Tier 2 NIC swaps out your Tier 1. Use rig to view your installed hardware at any time.

$ Commands

GHOSTWORK ships with 139 verb commands across twenty categories. Every command has a base_heat cost (noise generated) and base_ticks cost (time consumed). Type help for a full listing or man <command> for detailed usage.

System & Info
CommandDescription
helpList all available commands
man <cmd>Detailed manual page for a command
whoamiDisplay player identity and current tier
uptimeShow session duration
clearClear terminal output
historyShow command history
rigDisplay current hardware configuration
heatShow current heat / OpSec level
tierView or switch working tier
repShow faction reputation standings
walletShow credit balance
File Operations
CommandDescription
lsList files in current directory
cd <dir>Change directory
pwdPrint working directory
cat <file>Display file contents
grep <pattern>Search file contents
touch <file>Create an empty file
mkdir <dir>Create a directory
rm <file>Delete a file
download <file>Download file from target to local storage
Network & Reconnaissance
CommandDescription
scan <target>Scan a host or subnet for open ports and services
connect <host>Open a connection to a remote host
disconnectClose the active session
ssh <host>Open an SSH session
sessionsList all active sessions
ifconfigDisplay network interfaces
netstatShow active network connections
ping <host>Check host reachability
traceroute <host>Trace route to target
nslookup <domain>DNS lookup
dig <domain>Detailed DNS query
whois <domain>Domain registration lookup
ipconfig CypherOSDisplay IP configuration (Windows-style — CypherOS only)
netsh CypherOSNetwork shell — firewall rules, interface config (CypherOS only)
tcpdumpPacket capture — inspect live network traffic with BPF-like filters
Exploitation
CommandTierDescription
hack <target>T1Compound auto-exploit — scans, finds vulns, and exploits in one step
exploit <vuln>T2+Exploit a specific known vulnerability
inject <payload>T3Inject a custom payload
escalateT2+Attempt privilege escalation on current session
pivot <host>T2+Pivot to another host through current session
msfconsoleT2+Interactive payload browser — search, configure, and deploy exploit payloads
msfvenomT3Payload generator with encoding — create custom payloads with evasion encoding
Password Cracking

Four cracking tools, each with different characteristics. All are accelerated by GPU tier.

CommandTierTypeDescription
bruteforce <svc>T1+OnlineSimple brute-force password attack against a service
hydra <svc>T3OnlineParallelized online brute-force (THC Hydra style)
john <hashes>T3OfflineOffline hash cracking with rules and wordlists
hashcat <hashes>T3OfflineGPU-accelerated hash cracking with attack modes
Contract & Extraction
CommandDescription
contractsBrowse the BBS contract board
contracts <id>View contract details
contracts accept <id>Accept a contract
extractExfiltrate data to complete objectives
scrubClean traces from the target system
upgradeBrowse and purchase hardware upgrades
Defense & Hardening
CommandTierDescription
firewallT2+Inspect or modify firewall rules on a compromised host
idsT2+Query intrusion detection system status and signatures
patchT2+Apply or check security patches on a target system
hardenT3Apply security hardening configuration to a host
auditT2+Run security audit on target configuration
tripwireT3Install or check file integrity monitoring
backupT1+Create or list backups on a system
restoreT2+Restore a system from backup
Forensics & Analysis
CommandTierDescription
forensicsT2+Run forensic analysis on a compromised host
evidenceT2+Collect, examine, or plant digital evidence
volatilityT3Memory forensics — dump and analyze RAM artifacts
autopsyT3Disk forensics — recover deleted files and timeline analysis
timelineT2+Reconstruct event timeline from system logs
chainofcustodyT3Establish evidence chain of custody for legal proceedings
memdumpT3Memory dump — capture volatile RAM artifacts from a compromised host
bloodhoundT2+Attack graph visualization — map network topology and attack paths
case_statusT3Check law enforcement investigation threads and evidence correlation
Social Engineering
CommandTierDescription
phishT1+Craft and send phishing messages to targets
vishT2+Voice phishing — social-engineer targets via phone pretexts
pretextingT2+Build and deploy social engineering pretexts
dumpsterT1+Dumpster dive for credentials and sensitive documents
Malware & Persistence
CommandTierDescription
implantT2+Deploy a backdoor implant on a compromised host
rootkitT3Install kernel-level rootkit for deep persistence
keyloggerT2+Deploy keystroke logger to capture credentials
ratT3Deploy remote access trojan with full C2 capability
persistT2+Establish persistence mechanism (cron, service, registry)
c2T3Command and control — manage deployed implants
Cloud Operations

Cloud commands require the corresponding CLI tool to be installed on your rig via install. Available tools depend on your storage tier.

CommandTierDescription
cloudT2+Enumerate cloud resources and IAM configurations
awsT2+AWS CLI — S3, EC2, IAM, Lambda operations
azT2+Azure CLI — storage, VMs, AD, Functions
gcloudT2+Google Cloud CLI — GCS, GCE, IAM operations
terraformT3Infrastructure as code — plan and modify cloud infra
kubectlT3Kubernetes cluster management and container orchestration
dockerT2+Container operations — inspect, exec, escape
Web Application Testing

Full OWASP Top 10 attack surface: SQL injection, XSS, SSRF, and more. Web apps are modeled with routes, parameters, and WAF detection.

CommandTierDescription
niktoT2+Web vulnerability scanner — enumerate routes, frameworks, and injectable params
gobusterT2+Directory brute-forcer — discover hidden paths and endpoints
sqlmapT2+SQL injection tool — detect, enumerate databases, dump tables, extract creds
burpT2+Web proxy — scan, spider, intercept requests, fuzz parameters for XSS/injection
Privilege Escalation

Misconfiguration-based privesc: SUID binaries, sudo rules, cron jobs, writable paths. Full GTFOBins database with 12 binary entries.

CommandTierDescription
linpeasT2+Enumerate SUID binaries, sudo rules, cron jobs, and writable paths
crontabT2+List cron jobs (-l), edit writable cron scripts (-e) for payload injection
Supply Chain

Package registry attacks: typosquatting, dependency confusion, integrity bypass. Supports npm, PyPI, RubyGems, and Cargo registries.

CommandTierDescription
npmT1+npm CLI — install, audit, publish, info. Full registry interaction
pipT1+pip CLI — install, show, list, check. PyPI registry integration
Encryption & Crypto

TLS/SSL analysis, certificate chain validation, MITM interception, and cryptographic attacks. Full A-F grading system.

CommandTierDescription
encryptT1+Encrypt files or communications
decryptT2+Decrypt intercepted encrypted data
steganographyT3Hide data within images, audio, or other files
sslscanT2+TLS scanner — enumerate protocols, cipher suites, certificate details, grade
sslstripT3HTTPS downgrade proxy — strip TLS to intercept credentials via MITM
System Administration
CommandTierDescription
sudo <cmd>T1+Execute a command with elevated privileges
su <user>T2+Switch user identity on a compromised host
install <tool>T1+Install a software tool to your rig (uses storage)
apt / yum / pacmanT2+OS-specific package managers for target hosts
Scripting & Automation
CommandTierDescription
script <file>T3Execute a player-written automation script
aliasT1+Define command aliases for faster workflows
envT1+View or set shell environment variables
jobsT2+List background jobs
bg / fgT2+Move jobs between background and foreground
Active Directory

Domain attack chain: extract Kerberos tickets, replicate credentials, forge golden tickets for persistent domain admin access. Targets hosts with ad_domain configuration.

CommandTierDescription
kerberoastT2+Extract Kerberos TGS tickets from service accounts on a domain controller
pass_the_ticketT2+Replay stolen Kerberos tickets to authenticate on domain-joined hosts
dcsyncT3Replicate domain credentials via Directory Replication Service — captures krbtgt hash
golden_ticketT3Forge a Kerberos TGT for persistent domain admin access (requires krbtgt hash)
Wireless Attacks

WiFi and Bluetooth attack surface: crack wireless encryption, deploy evil twin access points, deauthenticate clients. Targets hosts with wireless_ap configuration.

CommandTierDescription
aircrackT2+Crack wireless encryption — success varies by protocol (WEP > WPA2 > WPA3-SAE)
deauthT2+Deauthentication attack — force clients to disconnect and capture handshakes
evil_twinT3Deploy rogue access point to intercept client traffic and harvest credentials

$ Contracts

Contracts are jobs posted to an anonymous BBS (Bulletin Board System). Each contract is posted by a faction handle, has a risk level, payout, time limit, and one to four objectives. GHOSTWORK ships with 45 contracts spanning all four factions and three risk levels.

Contract Lifecycle

AVAILABLE → ACCEPTED → ACTIVE → PENDING_EXTRACT → COMPLETE
                                             |
                                    FAILED / ABANDONED

You can only run one active contract at a time. Completed contracts are appended to your permanent history.

Objective Types

TypeDescription
FILE_EXFILTRATELocate and extract specific files from the target
SESSION_ESTABLISHEstablish a persistent session on a target host
SERVICE_EXPLOITExploit a specific service or vulnerability
EVIDENCE_PLANTPlant forensic evidence on a target system
EVIDENCE_DESTROYEliminate forensic evidence from a compromised host
CLOUD_COMPROMISEBreach a cloud environment and exfiltrate resources
SUPPLY_CHAINCompromise a software supply chain component
SOCIAL_ENGINEERObtain access through social engineering pretexts
CUSTOM_CONDITIONMeet a scenario-specific objective

Grading

Contracts grade you on three dimensions: stealth (low heat at completion), speed (ticks used vs. time limit), and precision (clean execution). Your approach matters as much as your success — a sloppy victory pays less than a clean one.

Risk Levels

RiskSecurityNotes
LOWLevel 1Weak defenses. Good for learning and building rep.
MEDLevel 2Active monitoring. IDS present. Sysadmin AI watches for patterns.
HIGHLevel 3Adaptive firewalls. Honeypots. Counter-hacking. One mistake and you're traced.

Procedural Networks

Every target network is procedurally generated with guaranteed solvability — at least two viable attack vectors exist for every objective. Networks have active defenses: intrusion detection systems, sysadmin AI that learns your patterns, firewalls that adapt, and honeypots that trap the careless.

$ CVE Catalog

GHOSTWORK features a fictional vulnerability catalog using the ZD-YYYY-NNNN identifier format. Every exploitable service in the game maps to one or more catalog entries, each with a severity score, affected versions, and exploit requirements.

Fictional identifiers only. GHOSTWORK never references real CVEs. All vulnerabilities use the ZD- prefix (e.g., ZD-2038-0042) to maintain the fiction while teaching real methodology.

Catalog Entry Structure

FieldDescription
zd_idUnique identifier (ZD-YYYY-NNNN)
titleShort vulnerability description
severityCVSS-style score (0.0–10.0)
affected_serviceService and version range affected
exploit_typeCategory: RCE, LPE, info_leak, DoS, auth_bypass
requires_authWhether authenticated access is needed
tier_minimumMinimum tier to exploit directly

Players discover vulnerabilities through scan (finds affected services), cross-reference them with the catalog using exploit --list, and target specific entries with exploit ZD-YYYY-NNNN. At T3, players can chain vulnerabilities for multi-stage attacks.

Exploit Resolution

When a player targets a vulnerability, the engine evaluates: Does the target run the affected service? Is the version in range? Does the player meet the tier and tool requirements? Success probability factors in the player's rig, OS modifiers, and the target's patch level — a fully patched host is immune.

$ Heat & OpSec

Every action generates noise. Every tool leaves traces. The Heat system creates constant tension between getting the job done and staying invisible.

Multi-Dimensional Heat

Heat is tracked on two independent dimensions. Each action specifies which dimension it affects:

DimensionWhat It MeasuresRaised By
Network HeatTraffic analysis signature — how visible you are on the wireScans, connections, data exfiltration, noisy exploits
Host HeatForensic footprint — traces left on compromised systemsFile access, privilege escalation, persistence, log tampering

Both dimensions use the same 0–100 scale and band system. Some actions affect BOTH dimensions. Detection triggers when either dimension enters the HIGH band — a stealthy network approach means nothing if you leave forensic evidence everywhere.

Heat Bands

LOW (0-33)
MED (34-66)
HIGH (67-100)
BandRangeDecayConsequences
LOW0–330.8/tickNormal operations. No additional attention.
MED34–660.5/tickIDS correlating. Slower decay. Rising sysadmin attention.
HIGH67–990.2/tickActive counter-hacking. Session kills. Trace-back attempts.
100 = Traced = Game Over. If your heat reaches 100, you are fully traced. The contract fails immediately. Consequences: rig damage, reputation loss, faction repercussions. Manage your heat or pay the price.

Heat sources: every command has a base_heat value. Aggressive actions (exploits, brute-force) generate more heat. Passive actions (ls, cat, pwd) generate less. Your OS may modify heat generation — PhantomBSD generates 25% less, LinuxForge 10% less.

Heat scope: tracked per contract. Completing a contract resets heat, but residual_heat can carry over based on how sloppy the exit was.

Decay: heat decays passively on every tick-advancing command, but the rate depends on your current band. Higher heat = slower decay. Use scrub to reduce network heat by cleaning traces, and use forensic tools to manage host heat.

Idle Heat & Alert Fatigue

Inactive sessions still generate small amounts of heat — open connections are detectable. Extended idle time in a high-security network triggers sysadmin patrol checks. Conversely, defenders suffer alert fatigue: sustained medium-heat activity can cause IDS operators to lower their guard, slightly reducing detection sensitivity over time.

Surveillance Countermeasures

High-security targets deploy active surveillance: traffic analysis, behavioral profiling, and honeypot networks. Counter-surveillance commands let you detect and evade these measures — but counter-surveillance itself generates heat.

Active Defense AI

Every target network has an autonomous Sysadmin AI — not a scripted boss, but a tick-scheduled defender running on its own clock. It doesn't know you're there until it observes something wrong.

BehaviorTriggerPlayer Impact
Patrol InspectionRecurring (cadence tightens with alert state)Detects exploit sessions, crashed services, persistent access
Credential RotationFixed schedule (not alert-scaled)Cracked passwords silently expire — plan your timing
Patch CyclingFixed scheduleVulnerabilities you haven't exploited yet can get patched
Lockdown SweepEntry into HIGH heat bandFull-network scan: every host inspected, mass credential rotation
Monitored TrapsDetection at ELEVATED/LOCKDOWNHost marked for 85% detection chance & 2.5× heat — a honeypot
Host IsolationDetection at LOCKDOWNAll sessions killed, host blocked for 80 ticks — network segmentation

The sysadmin's routine is deterministic and learnable. Read auth.log timestamps to reconstruct patrol intervals. Notice when credentials rotate to predict the next window. The defender never cheats — they only react to what they can observe in ground truth. Your job is to read their patterns and work around them.

$ Forensic Evidence

Every action you take on a target system can leave forensic evidence — artifacts that persist after you disconnect. Evidence accumulates independently of heat and can be discovered during incident response, potentially leading to contract failure or law enforcement attention even after a successful extraction.

Evidence Types

TypeLeft ByPersistence
Log entriesAny command executed on targetUntil logs rotated or scrubbed
File artifactsDownloads, uploads, file modificationsUntil explicitly deleted
Memory tracesRunning processes, injected payloadsUntil reboot or memory dump
Network artifactsConnection records, DNS queriesUntil traffic logs expire
Persistence mechanismsImplants, rootkits, cron jobsIndefinite — survives reboots

Clean extraction matters. Use scrub for log cleanup, carefully remove tools you deployed, and avoid leaving persistence mechanisms behind unless the contract requires it. A clean post-exploitation phase reduces your evidence footprint and improves contract grades.

Volatile Artifacts

Five additional evidence types persist only in host RAM — cleared by reboot but detectable by memory forensics tools. The tradeoff: a reboot erases volatile evidence but generates noise that alerts the Sysadmin AI. See Memory Forensics for full details.

$ Law Enforcement

Sloppy operations attract attention beyond the target's defenders. The Law Enforcement Pressure system tracks cumulative evidence across contracts. Get traced too many times or leave too much evidence, and you'll face escalating consequences.

Pressure Levels

LevelThresholdConsequences
UNKNOWNDefaultNo law enforcement attention. Operate freely.
MONITOREDRepeated tracesHigher base heat on new contracts. Faction contacts warn you.
INVESTIGATEDSustained evidenceSome contracts become unavailable. Hardware market prices increase.
HUNTEDCritical exposureAggressive counter-operations. Shortened contract timers. Faction trust drops.

Pressure decays slowly over time through clean operations. Lying low, completing stealth contracts, and doing work for Cold Iron (security contractors) can actively reduce pressure. The scrub and evidence management commands are your primary tools for keeping the heat off.

Evidence-Chain Investigation

Law enforcement doesn't just track a scalar "heat" score. The Evidence Linker correlates patterns across contracts — same technique, same tools, same network range, overlapping timing, traceable cryptocurrency. Each pattern spawns an investigation thread with its own strength that builds over time. See Evidence Chains for full details.

$ Economy

Credits (CR) are earned from contracts and spent on hardware upgrades. The economy uses an append-only transaction ledger — every income and expense is permanently recorded.

RuleDetail
Starting balance100 CR
PrecisionInteger only — no floating-point credits
FloorBalance can never go negative
Sell refundfloor(price × 0.4)
Contract payoutBase payout modified by grade (stealth, speed, precision)

Use wallet to check your balance. The market is gated by contracts_completed, not tier. Better hardware requires finishing more jobs.

Cryptocurrency

Some contracts pay in cryptocurrency instead of (or in addition to) credits. Crypto earnings are stored in a separate wallet with its own volatility mechanics — the exchange rate fluctuates based on in-game market conditions.

FeatureDetail
VolatilityExchange rate shifts between contracts based on deterministic market simulation
ConversionConvert crypto to credits at current rate via wallet convert
Risk/rewardHolding crypto can yield higher returns — or losses — compared to immediate conversion
Black marketSome Undermarket items are crypto-only, bypassing the standard economy
LaunderingLarge crypto transactions increase law enforcement pressure unless laundered

$ Cloud Resources

The 2039 internet runs on consolidated cloud infrastructure. Cloud targets represent high-value contract objectives with their own attack surface, distinct from traditional on-premise networks.

Cloud Providers (In-Game)

Apex Cloud

Dominant IaaS provider. Object storage, compute instances, IAM, serverless functions.

CLI: aws

Bastion Platform

Enterprise-focused. Active Directory integration, managed databases, compliance controls.

CLI: az

Cirrus Systems

Developer-friendly. Container orchestration, CI/CD pipelines, ML infrastructure.

CLI: gcloud

Software Tools

Cloud CLIs and infrastructure tools must be installed before use. Use install <tool> to download and configure tools to your rig. Each tool consumes storage space and some require minimum hardware tiers.

Tool verification. Every cloud command checks that the required tool is installed. Attempting aws s3 ls without installing the AWS CLI returns an error, not a silent failure — just like the real world.

$ Web Application Attacks

Full OWASP Top 10 attack surface simulation. Every web application on a target host is modeled with routes, parameters, and vulnerability types. A configurable WAF (Web Application Firewall) tracks failed injection attempts and blocks attackers who trigger too many alerts.

Attack Surface Model

ComponentDescription
Web AppsEach host can run multiple web applications with distinct frameworks, versions, and route sets
RoutesPaths with HTTP methods and parameters — some injectable, some not
WAF DetectionFailed injection attempts accumulate; cross the threshold and the WAF blocks all requests for configurable ticks
Vulnerability TypesSQLi, XSS, SSRF, RFI, XXE, Template Injection — each with distinct exploitation mechanics

Workflow

nikto / gobuster → discover routes and params → sqlmap / burp fuzz → exploit injectable params → extract data or pivot. Each step generates heat (NETWORK dimension). Stealth flags and tool bonuses modify success chances.

8 new CVEs (ZD-2025-0003 through ZD-2025-0010) model web vulnerabilities across multiple fictional services. Each CVE has distinct affected versions, severity, and CVSS scores.

$ Privilege Escalation

Misconfiguration-based privilege escalation — the most common real-world attack vector after initial access. Hosts now have privesc vectors: SUID binaries, sudo rules, writable cron jobs, and interesting file paths.

GTFOBins Database

12 binary entries (nmap, find, vim, python3, perl, less, awk, env, bash, cp, tar, wget) with SUID and sudo exploitation methods. Each entry specifies the command sequence for shell escape.

Vectors

VectorToolMechanic
SUID Binarieslinpeas + find -perm -4000Discover SUID bit on GTFOBins-listed binary → shell escape → root
Sudo Rulessudo -l + manual exploitList NOPASSWD sudo rules → GTFOBins lookup → escalate
Cron Jobscrontab -l + crontab -eIdentify world-writable cron script → inject payload → wait for execution
Writable PathslinpeasSystemd units, init scripts, LD_PRELOAD paths — write payloads to run as root

$ Supply Chain Attacks

Package registry simulation with full dependency trees, integrity checking, and social engineering. Registries live at the topology level (shared infrastructure, not per-host), supporting npm, PyPI, RubyGems, and Cargo ecosystems.

Attack Vectors

AttackToolMechanic
Typosquattingnpm publish / pipCreate a package with edit-distance ≤2 from a popular name. Detection chance scales inversely with distance.
Dependency Confusionnpm publishPublish a higher-version internal package name to the public registry
Integrity Bypassnpm auditMD5 checksums are weak — 30% bypass chance. SHA-256 checksums cannot be bypassed.
CI Pipeline InjectionContractsExploit pull_request_target workflows to exfiltrate secrets from CI runners

Blast Radius

Every supply chain attack computes a blast radius score (0–100) based on direct dependents, transitive dependents, and weekly downloads. Higher blast radius means higher payout — and higher heat.

$ PKI & Encryption Infrastructure

Deep TLS/SSL simulation. Every service can have a TLS configuration with protocol version, cipher suite, key strength, HSTS, and certificate chain. The system grades each configuration A through F, matching real-world assessment methodology.

Grading Criteria

GradeRequirements
ATLSv1.2+, 2048-bit+ RSA, strong ciphers only, HSTS enabled
BTLSv1.2+, 2048-bit+ RSA, no broken ciphers
CTLSv1.0+, 1024-bit+ RSA
DBroken ciphers or weak keys
FSSLv3 or below, self-signed certificate

Attack Chain

sslscan → identify weak TLS config → sslstrip (if no HSTS) or MITM via weak protocol → intercept credentials or forge certificates. MITM requires same-subnet positioning. Certificate forging requires stolen CA key material and works only against weak (512-bit) RSA keys.

6 new CVEs (ZD-2025-0021 through ZD-2025-0026) model cryptographic weaknesses from BEAST and Heartbleed analogues to SSL stripping and weak RSA factorization.

$ Player Scripting

At T3, players unlock the scripting runtime — the ability to write and execute automation scripts that chain commands together. Scripts are stored on your rig's local storage and executed via the script command.

Capabilities

FeatureDescription
Command chainingExecute multiple commands in sequence with conditional logic
VariablesStore and reuse values: IPs, ports, credentials, file paths
LoopsIterate over host lists, port ranges, or wordlists
ConditionalsBranch on command success/failure, heat thresholds, or output parsing
FunctionsDefine reusable procedures for common attack patterns
Heredoc supportMulti-line string literals for complex payloads
Scripts cost ticks and generate heat. Each command in a script still consumes ticks and generates heat individually. Scripts automate your workflow, not your consequences. A script that runs 20 scan commands generates 20× the heat.

Scripts are stored as plaintext on your rig's STORAGE — storage capacity limits how many scripts you can carry. Use ls ~/scripts to manage them.

$ TCP/IP Simulation

Every network action generates real packet metadata. The PacketLedger is a ring buffer (2000-packet capacity, configurable) that records every packet emitted by NSS action handlers — bridging the TrafficAnalysis IDS and powering tcpdump.

Packet Record

FieldTypeDescription
src_host / dst_hostStringSource and destination host IDs
src_port / dst_portintPort numbers
protocolStringtcp, udp, icmp, arp, dns
flagsStringSYN, SYN-ACK, ACK, PSH-ACK, FIN, FIN-ACK, RST
bytesintPacket size (action-specific estimates from config)
actionStringOriginating NSS action: scan_host, exploit_service, etc.
payload_hashStringHash of attached payload (if any)
encodingStringEncoding applied to this packet (if any)

Protocol Helpers

High-level methods emit realistic packet sequences for common operations:

MethodPackets EmittedUsed By
emit_handshake()SYN → SYN-ACK → ACKconnect, ssh
emit_teardown()FIN → FIN-ACKdisconnect
emit_port_probe()SYN → SYN-ACK (open) or RST (closed)scan
emit_data_transfer()PSH-ACK with byte payloaddownload, extract, exploit
emit_icmp_echo()ICMP echo requestping, scan_subnet

Commands

CommandTierDescription
tcpdumpT2+Packet capture with BPF-like filters. Flags: -i (interface/host), -c (count), -n/-nn (no resolve), -X (hex dump). At T3, produces real pcap-style output with timestamps, protocol flags, seq/ack numbers, and window sizes.
netstatT1+Show active network connections with simulated TCP state (ESTABLISHED, TIME_WAIT, LISTEN).
TrafficAnalysis bridge. Every emitted packet feeds TrafficAnalysis.record_traffic() automatically. IDS anomaly detection now runs on real traffic volume, not estimates. Encoded packets carry their ids_evasion modifier through the bridge.

$ Payload Modules

Metasploit-style exploit/payload separation. CVEs define what breaks; payloads define what happens next. Twelve payload modules span shell, advanced shell, web, persistence, and data exfiltration categories.

Payload Properties

PropertyDescription
categoryPayload type: shell, advanced_shell, web, persistence, data
paramsConfigurable parameters: LHOST, LPORT, AutoRunScript, etc.
detectabilityAV signature match chance (0.0–1.0). Reduced by encoding.
reliabilityExecution success probability. Reduced by encoding stacking.
size_bytesPayload size — affects packet volume and transfer time.
compatible_categoriesCVE exploit types this payload works with (e.g., rce, buffer_overflow).

Tier-Based Workflow

T1 Auto-Select

Payload auto-selected for you — simplest compatible option. hack handles everything.

T2 Choose

Pick your payload: exploit <target> --payload reverse_tcp

T3 Configure

Full control: exploit <target> --payload meterpreter_tcp --set LHOST=10.0.1.5 --set LPORT=4444

Commands

CommandTierDescription
msfconsoleT2+Interactive payload browser. Search by category, show options, set params, deploy.
exploit --payloadT2+Specify payload at exploit time. Combine with --set KEY=VALUE for params.

$ Encoding & Evasion

Encoding transforms payloads and packets to evade detection. Six encoders span T1 through T3, each trading size increase and reliability loss for IDS/AV evasion. A 0.95 detection floor ensures there is always some chance of getting caught.

Encoder Catalog

EncoderTierIDS EvasionAV EvasionSize ×Reliability −
xorT10.300.201.1×0.00
base64T10.200.101.37×0.00
url_encodeT10.150.001.5×0.00
shikata_ga_naiT20.600.501.25×0.05
unicode_bypassT20.400.001.3×0.10
custom_packerT30.700.800.8×0.15

Stacking & Diminishing Returns

Stack up to 3 encoders. Each additional layer applies at 50% effectiveness:

# Effective IDS evasion with 3-stack
Layer 1: 100% effectiveness
Layer 2: 50% effectiveness
Layer 3: 25% effectiveness
Cap:     0.95 maximum — always some detection chance
Polymorphic encoders (shikata_ga_nai, custom_packer) re-randomize their signature each tick, defeating static IDS pattern matching. But they cost reliability — a polymorphic triple-stack can fail to execute.

Command

CommandTierDescription
msfvenomT3Generate encoded payloads: msfvenom -p reverse_tcp -e shikata_ga_nai -i 3

$ Evidence Chains

Law enforcement doesn't track a single number. The Evidence Linker correlates patterns across contracts, spawning investigation threads that build strength over time — exactly how real LE builds cases through TTPs, tool reuse, and blockchain analysis.

Link Types

Link TypeWhat Triggers ItExample
TechniqueSame CVE or attack type used across 2+ contractsUsing ZD-2038-0042 on three different jobs
ToolSame dropped tool or persistence mechanismDeploying the same rootkit signature twice
NetworkEvidence on hosts in the same subnet across contractsHitting 10.0.1.x in two unrelated jobs
TimingContracts completed within N ticks of each otherRapid contract chaining without cooldown
FinancialTraceable cryptocurrency connecting contractsUsing QuickTumble (0.6 traceability) on both payouts

Thread Lifecycle

DORMANT → ACTIVE → HOT → CLOSING
   strength 0-25   25-50   50-80   80-100

Thread strength maps to existing LE pressure levels. Threads decay per-contract (clean operations reduce strength). Identity Wipe burns threads with strength < 60 and weakens all others by 50 points.

CommandTierDescription
case_statusT3Spend heat to check active LE investigation threads. Shows thread types and strengths (not full details). T1/T2 only see the overall exposure level.

$ Memory Forensics

Five volatile evidence types live in host RAM, not on disk. They survive session disconnect but are cleared by reboot or service restart — creating a strategic tradeoff between evidence cleanup and operational noise.

Volatile Evidence Types

TypeGenerated ByCleared ByDifficulty
memory_resident_processexploit, deploy persistencereboot, kill sessionHard
encryption_key_in_memoryTLS connections, exploitrebootMedium
credential_cacheconnect, domain credential usereboot, credential rotationMedium
injected_dlldeploy (advanced persistence)rebootHard
network_socket_artifactconnect, scandisconnect, rebootEasy
The reboot dilemma. Rebooting a host wipes all volatile evidence — but service disruption triggers Sysadmin AI alerts and generates host heat. Sysadmin AI detects volatile evidence at 0.5× base rate (harder without forensics tools), so sometimes the risk of leaving artifacts is lower than the noise of cleaning them.

Commands

CommandTierDescription
memdump <host>T3Capture memory artifacts from a compromised host. Offensive forensics — see what's in RAM before deciding to scrub or reboot.
volatility <dump>T3Analyze memory dumps. Modeled on the real Volatility Framework — maps to plugins: pslist, cryptoscan, hashdump/mimikatz, malfind, netscan.
scrub --type <volatile_type>T3Anti-forensics for RAM artifacts. Targeted cleanup without a full reboot.

$ Attack Graph

BloodHound-style network visualization. A GraphEdit-based panel shows your discovered attack surface as an interactive graph — hosts as nodes, sessions and credentials as edges, colored by access level.

Graph Elements

ElementRepresentsVisual
NodesKnown hosts from reconnaissanceColored by access: none (grey), user (blue), admin (amber), root (red)
Session edgesActive connections between hostsSolid lines showing hop chains
Credential edgesDiscovered credential relationshipsDotted lines showing access scope

Features

Commands

CommandTierDescription
bloodhoundT2+Open the attack graph panel. Builds graph from NSS knowledge tables.
bloodhound --refreshT2+Rebuild graph with latest reconnaissance data.
bloodhound --path <src> <dst>T2+Highlight the shortest attack path between two hosts.

$ SIEM Log Forwarding

Enterprise targets don't just log locally — they forward evidence to a centralized SIEM (Security Information and Event Manager). Scrubbing a compromised host's logs doesn't erase what was already forwarded. This creates a race-against-the-clock mechanic: clean your traces before the forwarding delay expires, or the evidence becomes permanent.

How It Works

MechanicDetail
Forward DelayEvidence is queued for SIEM forwarding with a configurable tick delay (default: 3 ticks). Scrub before the timer expires and the evidence never reaches SIEM.
SIEM StoreForwarded evidence lives in a separate, centralized store keyed by subnet. Local scrub commands cannot touch it — the SIEM host must be compromised separately.
Volatile SkipVolatile evidence (RAM artifacts) is never forwarded to SIEM — it only exists in host memory.
Per-Host ConfigEach host defines which evidence types are forwarded: log_entry, network_artifact, auth_event.

Commands

CommandTierDescription
siem_queryT3Query the SIEM store for forwarded evidence. Requires a session on the SIEM host itself.
scrubT1+Now warns when SIEM forwarding is active on the target — local scrub won't save you if the evidence already left.
SL-2+ contracts feature SIEM. Low-security targets don't forward logs. Medium and high security targets do — and the forward delay shrinks at higher security levels. Plan your anti-forensics around the forwarding window.

$ Service Enumeration

Real pentesting doesn't jump from scan to exploit. The enumeration phase sits between reconnaissance and exploitation — probing services for version strings, banners, login prompts, and directory listings that improve your attack accuracy.

Enumeration Bonus

Enumerating a service before exploiting it grants an additive exploit success bonus (typically +5% to +15%, depending on the protocol). Unenumerated exploits still work at base rate, but you're leaving accuracy on the table.

ProtocolBanner InfoBonus
sshOpenSSH version, auth methods, key types+10%
httpServer header, framework, directory listing+10%
ftpProFTPD version, anonymous login status+15%
smtpPostfix version, VRFY support, relay config+10%
smbSamba version, share enumeration, signing+10%

Commands

CommandTierDescription
enum <host> [service]T1+Enumerate services on a target host. Tier gates output detail: T1 gets summaries, T3 gets raw protocol banners.
Session host fallback. If no host is specified, enum targets the current session host. Enumeration generates moderate NETWORK heat — less than a scan, more than passive observation.

$ Signature-Based IDS

TrafficAnalysis now combines anomaly detection (volume-based) with signature matching (pattern-based). Fifteen signature rules watch for specific protocol+port+flag combinations that indicate known attack patterns.

How Signatures Work

FieldDescription
matchesProtocol, port range, and TCP flag patterns to match against
detection_baseBase probability of triggering on a matching packet (0.0–1.0)
severityLOW, MEDIUM, HIGH — affects alert escalation speed

Evasion Mechanics

Encoding your payloads reduces signature match probability via the ids_evasion stat. Polymorphic encoders (shikata_ga_nai, custom_packer) get a 2× evasion multiplier against signatures specifically — their re-randomizing nature defeats static pattern matching.

Layered defense. SL-1 contracts use anomaly detection only. SL-2+ contracts add signature IDS. At SL-3, both systems feed into an aggressive Sysadmin AI that correlates alerts across detection methods.

$ Deep Encryption & PKI Operations

Beyond basic TLS scanning, GHOSTWORK now simulates certificate chain-of-trust, HSTS enforcement, cert pinning, mutual TLS, and certificate forgery. High-security targets use layered cryptographic defenses that must be peeled back methodically.

Attack Chain

  1. certutil inspect <host> — scan the TLS configuration: protocol version, cipher suite, key strength, security flags, CA chain.
  2. If HSTS is absent: sslstrip can downgrade HTTPS connections to intercept credentials.
  3. If cert pinning blocks MITM: exfiltrate the target's CA private key from the filesystem, then certutil forge --ca-key <path> --target <host> to forge a trusted certificate.
  4. With a forged cert: MITM attacks bypass cert pinning on that host. Intercepted traffic is visible.

Commands

CommandTierDescription
certutil inspect <host>T3Full certificate inspection: TLS grade, security flags (HSTS, cert pinning, mutual TLS), CA chain details.
certutil forge --ca-key <path> --target <host>T3Forge a certificate using stolen CA key material. Probabilistic — stronger keys are harder to forge. Generates significant heat.
High heat, high reward. Certificate forgery generates 8.0 base heat and requires T3 expertise. But a forged cert unlocks MITM on otherwise impenetrable hosts — critical for SL-3 contract completion.

$ BBS Economy & Poster Reputation

The BBS board is no longer a passive job listing. Poster handles have reputation scores, contracts use escrow, jobs can expire from competing operators, and some posters are law enforcement fronts.

Poster Trust

Every poster has a trustScore (0–100) and confirmedJobs count. Trust shifts based on contract outcomes — completing a job raises trust, failing or abandoning lowers it.

Trust RangeLabelImplications
0–29SuspiciousUnproven poster. High payout + low trust = red flag.
30–74NeutralMixed track record. Proceed with caution.
75–100TrustedReliable poster. Escrow discount applied.

Escrow System

When accepting a contract, the player deposits an escrow fee (15% of base payout, minimum 25 CR). Escrow is returned on successful completion, forfeited on failure or abandonment. Trusted posters (≥75 trust) offer a 50% escrow discount.

Contract Expiry

Contracts on the BBS board can expire after 200 ticks — taken by competing operators. This creates urgency: desirable contracts won't wait for you. A living underground market where you're not the only player.

LE Sting Operations

Watch who you work for. Some posters are law enforcement fronts. Their contracts pay 1.5× normal rates — suspiciously generous. Completing a sting contract adds +25 heat and feeds directly into LE investigation threads. A poster with moderate trust, generous payouts, and oddly specific briefs should raise every alarm in your head.

$ Active Directory

Domain attack chains modeled after real Active Directory penetration testing. Extract Kerberos tickets, replicate credentials via DCSync, and forge golden tickets for persistent domain admin access. All AD actions are configured via active_directory_config.json.

Attack Chain

kerberoast (extract TGS tickets) → dcsync (replicate creds, capture krbtgt) → golden_ticket (forge TGT, persistent admin)
                                                                                      ↑
                              pass_the_ticket (replay stolen tickets on domain-joined hosts)

Commands

CommandTierHeatPrerequisiteDescription
kerberoastT26.0 (HOST)Domain user accessExtract TGS tickets from service accounts on a domain controller
pass_the_ticketT25.0 (HOST)Stolen ticketReplay Kerberos tickets to authenticate on domain-joined hosts
dcsyncT312.0 (NETWORK)Replication rightsReplicate domain credentials via DRS — captures all hashes including krbtgt
golden_ticketT315.0 (BOTH)krbtgt hashForge a Kerberos TGT for persistent domain admin access

Domain Model

Hosts with an ad_domain property are domain controllers. The domain defines service accounts (with SPNs for Kerberoasting), credential rotation intervals, and GPO update cycles. Stolen credentials and tickets are tracked per-host in the _ad_stolen state dictionary.

$ Wireless Attacks

WiFi and Bluetooth attack surface covering wireless encryption cracking, rogue access points, and deauthentication attacks. Protocol difficulty scales realistically: WEP is trivial, WPA2-PSK is moderate, WPA3-SAE is near-impossible without specific conditions. Configured via wireless_config.json.

Commands

CommandTierHeatTargetDescription
aircrackT2Config-driven (HOST)Wireless AP hostCrack wireless encryption — success varies by protocol difficulty multiplier
deauthT2Config-driven (NETWORK)Wireless AP hostForce client disconnection and capture WPA handshakes for offline cracking
evil_twinT3Config-driven (BOTH)Wireless AP hostDeploy rogue AP to intercept client traffic — credentials harvested per connected client

Wireless AP Model

Hosts with a wireless_ap property are access points. The AP defines SSID, protocol (WEP/WPA2/WPA3-SAE), signal strength, connected clients, and channel. Protocol type determines the difficulty multiplier for aircrack and whether deauth can capture usable handshakes (WPA3-SAE uses SAE exchange, making captured handshakes less useful).

$ Assessment & Proctor Mode

GHOSTWORK includes a built-in proctored assessment system for cybersecurity education. Instructors run a proctor dashboard that connects to student game instances over a local network, enabling real-time monitoring, controlled lab environments, and automated grading.

How It Works

StepInstructorStudent
1Opens Proctor Dashboard, gets a room codeEnters the room code to join
2Selects a scenario and configures forced OS / tier / hardwareSees roster confirmation
3Pushes scenario and starts the assessmentReceives objectives and time limit
4Monitors live command feed and student progressWorks through objectives in-game
5Ends assessment and reviews graded resultsSees their grade breakdown

Assessment Scenarios

Six built-in scenarios cover core cybersecurity skills. Each defines objectives, time limits, and grading weight distribution.

ScenarioDifficultyTimeFocus
Reconnaissance FundamentalsBeginner10 minNetwork scanning and host enumeration
Network Topology MappingBeginner10 minSubnet scanning, DNS, route tracing
Complete Penetration TestIntermediate20 minFull pentest cycle: recon → exploit → exfil → cleanup
Password Cracking LabIntermediate15 minOffline and online cracking techniques (GPU-2 provided)
Incident Response AnalysisIntermediate15 minForensic investigation of a compromised host
Stealth OperationsAdvanced15 minComplete a contract with heat below 20

4-Axis Grading

Every assessment is graded on four dimensions, each weighted per scenario:

AxisMeasuresHow It's Scored
MethodologyDid the student follow the correct phase order?Recon → Enum → Exploit → Post-Exploit → Cleanup. Bonus for proper sequencing.
StealthHow much noise did they generate?Peak heat thresholds: ≤20 excellent, ≤50 good, ≤80 fair, >80 poor.
EfficiencyDid they avoid unnecessary or redundant commands?Repeated commands within the same phase are penalized.
CompletenessHow many objectives were achieved?Ratio of completed objectives to total required.

Letter grades: A ≥ 90%, B ≥ 80%, C ≥ 70%, D ≥ 60%, F < 60%.

Instructor Controls

FeatureDescription
Force OSLock all students to a specific operating system
Force TierLock students to T1 Script Kiddie, T2 Operator, or T3 APT
Force HardwarePresets: Default (all T1), Standard (all T2), Full (all T3), GPU Focus (GPU-3 only)
Live FeedReal-time stream of every command every student executes
Package ModeSequence multiple scenarios into a single assessment session
Export ResultsSimple, Standard, or Complete report formats
Security. All proctor communication is authenticated with HMAC chains and room codes. Student commands are cryptographically chained to detect tampering — any break in the chain triggers a tamper alert on the instructor dashboard.

$ New Game Plus

After completing the main progression, NG+ unlocks a second cycle with retuned difficulty. Your credits, faction reputation, and hardware carry over — but contracts hit harder, network defenses scale up, and heat thresholds tighten.

ParameterBase GameNG+
Heat multiplier1.0×Configurable (default 1.5×)
Contract payout1.0×Configurable (default 1.25×)
Detection sensitivityNormalElevated
Hardware carry-over—Full rig retained
Tuning knobs. All NG+ parameters are data-driven and externalized to config. Modders can create custom NG+ profiles with different difficulty curves.

$ Accessibility

GHOSTWORK is a text-heavy game — accessibility is not an afterthought. The following features are built in from day one:

FeatureDescription
Screen Reader (TTS)Full text-to-speech support via the system TTS engine. All terminal output, menus, and status information is readable.
Colorblind ModesThree correction matrices: protanopia, deuteranopia, and tritanopia. Applied as a post-process filter over the CRT shader.
High ContrastEnhanced contrast mode that increases text/background separation across all OS palettes.
Font ScalingAdjustable font size that scales all terminal text. Minimum size ensures readability at Steam Deck’s 1280×800.
Keyboard NavigationAll interactive elements are fully keyboard-navigable. No mouse required for any game function.

All accessibility settings persist across sessions independently of game saves.

$ Localization

GHOSTWORK ships with 6 languages. All UI screens use the translation system — no hardcoded user-facing strings.

LanguageCodeStatus
EnglishenComplete (source language)
SpanishesComplete
FrenchfrComplete
GermandeComplete
JapanesejaComplete
Chinese (Simplified)zhComplete
Diegetic text stays untranslated. The boot sequence, command names, and terminal prompts are intentionally English-only — they’re part of the in-world operating system, not player-facing UI. The game title “GHOSTWORK” is also untranslated across all locales.

$ Factions

Four factions operate in the underground, each with their own philosophy, contract style, and moral boundaries. Building reputation with a faction unlocks better contracts and deeper narrative threads.

Signal Collective

Hacktivists. Founded by nullsignal, crowbar, and hexwitch. Flat organizational structure. Expose corporate surveillance. Give power back to the public.

Contracts: data leaks, corporate exposure, whistleblower protection.

Won't do: Targeted harassment, ransomware, identity theft

Meridian Group

Corporate espionage brokerage. Handle silkthread runs operations. Corporate hierarchy. Plausible deniability at every level. Information is a commodity.

Contracts: trade secret theft, competitive intelligence, insider data.

Won't do: Target individuals, critical infrastructure

Cold Iron

Private security contractors. Handle warden leads. Ex-corporate security. Counter-intrusion specialists. The best defense is sometimes offense.

Contracts: counter-intrusion, threat assessment, security audits.

Won't do: Target civilian infrastructure, sell zero-days

Undermarket

Black market data brokerage. The oldest faction — 15 years running. Handle broker_null. Everything has a price. Everything.

Contracts: data theft, exploit brokering, credential harvesting.

Won't do: Broker weapons-grade material

$ World Timeline

The year is 2039. The internet you knew is gone. Cloud consolidation, government surveillance acts, and corporate monopolies have reshaped the digital landscape. The underground is the last free space — and it's under siege.

Era 1 — Consolidation (2025–2030)
YearEvent
2025–28Major cloud providers merge into three mega-platforms. Independent hosting becomes unviable.
2028The DISA (Digital Infrastructure Security Act) passes. Mandatory backdoors in all commercial encryption.
2029LinuxForge v1.0 — first OS designed to operate outside DISA compliance.
2030PhantomBSD appears. Origin unknown. Paranoid security model.
Era 2 — Factions (2031–2034)
YearEvent
2031The Kestrel Leak — massive corporate-government surveillance dump. Signal Collective emerges.
2032Meridian Group incorporates. Cold Iron follows within months.
2033Undermarket launches the BBS board. SpecterOS appears.
2034The First Ghost: delphic vanishes mid-operation. No body, no arrest, no trace.
Era 3 — Protocol Zero (2035–2039)
Narrative Spoilers

The following reveals central narrative mysteries. Play the game first.

$ Modding Guide

GHOSTWORK supports a comprehensive addon system that lets modders add, extend, and override nearly every content type in the game. Addons are data-driven — most modifications require only JSON files, with optional GDScript for custom command logic.

Addon directory. All addons live in user://addons/<addon_name>/. Each addon must contain an addon.json manifest at its root. The game discovers and loads addons automatically on startup.

Directory Structure

user://addons/
  my_custom_addon/
    addon.json          # Required manifest
    commands/           # Custom verb definitions
      recon_tool.json
      recon_tool.gd     # Optional: custom executor
    contracts/          # Custom contracts
    factions/           # New or extended factions
    hardware/           # New hardware components
    os/                 # New operating systems
    narrative/          # Story fragments
    music/              # Music tracks (tracks.json)
    shell/              # Shell presets (presets.json)
    cves/               # Custom vulnerability catalog entries
    tools/              # Custom software tools
    market/             # Custom market items
    ids_signatures/     # IDS signature rules
    service_banners/    # Service enumeration banners
    poster_profiles/    # BBS poster profiles
    encoders/           # Custom encoding definitions
    configs/            # Config overrides (deep merge)

Operations: Add, Extend, Override

Every content type supports up to three operations:

OperationWhat It DoesRisk
addIntroduces entirely new content (commands, contracts, factions, etc.)Low — no conflicts
extendPatches specific fields of existing content (add flags, rivals, etc.)Medium — depends on target
overrideFully replaces existing content with your versionHigh — first override wins

Load Order & Priority

  1. Core game content loads first. This is the baseline.
  2. Addon extensions apply in load_order sequence (lower numbers first).
  3. First override wins. If two addons override the same content, the lower load_order takes priority.

$ Manifest Schema

Every addon requires an addon.json manifest at its root:

{
  "id": "my_recon_pack",              // Unique identifier (snake_case)
  "name": "Recon Tool Pack",            // Human-readable display name
  "version": "1.0.0",                  // SemVer version
  "author": "YourName",                 // Author or team
  "description": "Adds recon tools",     // Short description
  "game_version_min": "1.0.0",          // Minimum game version required
  "dependencies": [],                    // Other addon IDs this depends on
  "load_order": 100,                     // Lower = loads earlier (default: 100)
  "content": {                            // Maps content types to directories
    "commands":   "commands/",
    "contracts":  "contracts/",
    "factions":   "factions/",
    "hardware":   "hardware/",
    "narrative":  "narrative/",
    "music":      "music/",
    "shell":      "shell/",
    "cves":       "cves/",
    "tools":      "tools/",
    "market_items": "market/",
    "ids_signatures": "ids_signatures/",
    "service_banners": "service_banners/",
    "poster_profiles": "poster_profiles/",
    "encoders":  "encoders/",
    "configs":   "configs/"
  }
}
Dependencies. If your addon depends on another, list its id in the dependencies array. The game loads dependencies first regardless of load_order. Missing dependencies prevent the addon from loading.

$ Modding: Commands

Add new terminal commands, extend existing ones with new flags or subcommands, or fully override a built-in command.

Adding a New Command

Create a JSON verb definition in your addon's commands/ directory:

// commands/port_knock.json
{
  "verb_id": "port_knock",
  "signature": "port_knock <host> <ports...>",
  "base_heat": 2,
  "base_ticks": 1,
  "widget_kind": "text_output",
  "intent_template": "Knock on ports {ports} at {host}",
  "execute_key": "port_knock",
  "presentation_tier": 2,
  "description": "Send a port knock sequence to open filtered services"
}

Register it in your manifest:

"content": {
  "commands": {
    "add": [
      { "file": "commands/port_knock.json" }
    ]
  }
}

Custom Command Logic (GDScript)

For commands that need custom behavior beyond the standard pipeline, place a GDScript executor alongside the JSON:

# commands/port_knock.gd
extends VerbExecutor

func execute(args: Dictionary, context: CommandContext) -> VerbResult:
    var host := args.get("host", "") as String
    var ports := args.get("ports", []) as Array
    # Custom logic here
    return VerbResult.success("Knocked: %s" % [", ".join(ports)])

Data-Only Commands (Aliases)

Simple aliases need no GDScript — use alias_target:

{
  "verb_id": "nk",
  "alias_target": "port_knock",
  "description": "Shorthand for port_knock"
}

Extending Existing Commands

"commands": {
  "extend": [
    {
      "verb_id": "scan",
      "add_flags": ["--stealth", "--deep"],
      "add_subcommands": ["vuln"]
    }
  ]
}

Overriding Commands

"commands": {
  "override": [
    {
      "verb_id": "scan",
      "file": "commands/custom_scan.json"
    }
  ]
}

$ Modding: Contracts

Add new contracts with custom network topologies, extend existing contracts, or override them.

Adding a Contract

{
  "id": "custom_heist_01",
  "title": "The Vault Job",
  "poster_handle": "silkthread",
  "briefing": "Meridian needs corporate R&D data. Hardened internal network. Get in, get files, get out clean.",
  "risk_level": "HIGH",
  "base_payout": 8000,
  "time_limit_ticks": 200,
  "target_security_level": 3,
  "faction_tag": "meridian_group",
  "objectives": [
    {
      "type": "FILE_EXFILTRATE",
      "target_file": "/data/research/project_alpha.db",
      "description": "Extract Project Alpha database"
    },
    {
      "type": "SESSION_ESTABLISH",
      "target_host": "10.0.1.50",
      "description": "Persistent access to backup server"
    }
  ],
  "sysadmin_config": {
    "base_patrol_interval_ticks": 40,
    "hosts_inspected_per_patrol": 2,
    "credential_rotation_interval_ticks": 150,
    "patch_cycle_interval_ticks": 100,
    "enabled": true
  },
  "network": {
    "topology": "star",
    "hosts": [
      { "ip": "10.0.1.1", "role": "gateway", "services": ["ssh", "http"] },
      { "ip": "10.0.1.10", "role": "workstation", "services": ["smb"] },
      { "ip": "10.0.1.50", "role": "server", "services": ["ssh", "ftp", "postgres"] }
    ]
  }
}

The sysadmin_config field is optional. If omitted, the Active Defense AI difficulty is derived from target_security_level. Set "enabled": false to disable the defender entirely for your contract.

Hosts may include web_apps (attack surfaces for nikto/sqlmap), privesc_vectors (SUID/sudo/cron for linpeas), and tls_config (cipher suites for sslscan).

Extending Contracts

"contracts": {
  "extend": [
    {
      "id": "existing_contract_id",
      "patch": {
        "briefing": "Updated briefing text...",
        "add_objectives": [
          { "type": "CUSTOM_CONDITION", "description": "Leave no logs" }
        ],
        "add_hosts": [
          { "ip": "10.0.1.99", "role": "honeypot" }
        ]
      }
    }
  ]
}

$ Modding: Factions

Add entirely new factions, extend existing ones, or override (warned — affects narrative coherence).

Adding a Faction

{
  "faction_id": "neon_circuit",
  "display_name": "Neon Circuit",
  "type": "hacktivist",
  "description": "Digital artists turned hacktivists. Code is art, art is resistance.",
  "handle": "pixel_prophet",
  "rivals": ["meridian_group"],
  "allies": ["signal_collective"],
  "contract_style": "Digital art installations on corporate networks",
  "will_not_do": ["Destroy creative works", "Target independent artists"]
}

Extending a Faction

"factions": {
  "extend": [
    {
      "faction_id": "signal_collective",
      "add_rivals": ["neon_circuit"]
    }
  ]
}

$ Modding: Hardware

Add new hardware components to any of the six slots, extend existing components, or override.

Adding Hardware

{
  "component_id": "quantum_nic",
  "slot": "NIC",
  "tier": 4,
  "display_name": "Quantum NIC",
  "price": 15000,
  "effects": {
    "scan_depth": 4,
    "scan_speed_multiplier": 0.5
  },
  "prerequisites": {
    "contracts_completed": 30
  },
  "description": "Quantum-entangled network interface. Sees everything."
}

Extending Hardware

"hardware": {
  "extend": [
    {
      "component_id": "gpu_3",
      "add_effects": { "hash_rate_bonus": 0.5 },
      "add_prerequisites": { "faction_rep_undermarket": 50 }
    }
  ]
}

$ Modding: Operating Systems

Add entirely new operating systems with custom phosphor palettes, window manager models, starting hardware, and gameplay modifiers.

Adding an OS

{
  "os_id": "iron_os",
  "display_name": "IronOS",
  "shorthand": "IRON",
  "tagline": "Forged in fire",
  "dominant_phosphor": "red",
  "wm_model": "TILING",
  "phosphor_palette": {
    "bg": "#0a0000",
    "fg_primary": "#ff4040",
    "fg_secondary": "#cc3030",
    "accent": "#ff6020",
    "border": "#401010",
    "selection": "#602020",
    "comment": "#804040",
    "alert_low": "#ff8040",
    "alert_mid": "#ff4020",
    "alert_high": "#ff0000"
  },
  "starting_hardware": {
    "CPU": 1, "RAM": 1, "NIC": 1,
    "STORAGE": 1, "GPU": 2, "COOLING": 1
  },
  "gameplay_modifiers": {
    "heat_multiplier": 1.1,
    "cpu_speed_bonus": 0.9
  }
}

All 10 palette keys are required when adding a new OS. When extending, provide only the keys you're changing.

Extending an OS

"os": {
  "extend": [
    {
      "os_id": "linux_forge",
      "patch_palette": { "accent": "#40ff80" },
      "patch_modifiers": { "heat_multiplier": 0.85 }
    }
  ]
}

$ Modding: CVE Catalog

Add custom fictional vulnerabilities to the game's CVE catalog. All entries must use the ZD- prefix — entries without it are rejected at load time.

Adding a Vulnerability

{
  "zd_id": "ZD-2039-1001",
  "title": "QuantumDB Authentication Bypass",
  "severity": 9.1,
  "affected_service": "quantumdb",
  "affected_versions": "2.0.0-2.4.3",
  "exploit_type": "auth_bypass",
  "requires_auth": false,
  "tier_minimum": 2,
  "description": "Malformed auth token causes QuantumDB to skip credential verification."
}

Extending Existing CVEs

"cves": {
  "extend": [
    {
      "zd_id": "ZD-2038-0042",
      "patch": {
        "affected_versions": "1.0.0-3.2.1",
        "severity": 9.8
      }
    }
  ]
}
Prefix validation. The addon loader rejects any CVE entry whose zd_id does not start with ZD-. This is enforced at load time to prevent real CVE identifiers from appearing in the game.

$ Modding: Software Tools

Add custom installable software tools that players can download to their rig. Tools are required by certain commands (especially cloud operations) and consume rig storage.

Adding a Tool

{
  "id": "quantum_scanner",
  "display_name": "QuantumScan",
  "description": "Advanced vulnerability scanner with quantum-accelerated pattern matching",
  "size_kb": 128,
  "required_by": ["qscan"],
  "tier_minimum": 2,
  "install_ticks": 5
}

Extending Existing Tools

"tools": {
  "extend": [
    {
      "id": "aws_cli",
      "patch": {
        "size_kb": 96,
        "required_by": ["aws", "s3cmd"]
      }
    }
  ]
}

$ Modding: Narrative

Add narrative fragments that appear as discoverable content during gameplay, each with unlock conditions.

Adding Narrative

{
  "fragment_id": "iron_lore_01",
  "title": "The Forge Master's Log",
  "content": "Day 47. The compiler is sentient. I'm sure of it now...",
  "tags": ["lore", "iron_os", "ai"],
  "unlock_conditions": {
    "contracts_completed": 10,
    "os_id": "iron_os"
  }
}

Extending Narrative

"narrative": {
  "extend": [
    {
      "fragment_id": "existing_fragment",
      "add_content": "Additional paragraph appended...",
      "add_tags": ["conspiracy"]
    }
  ]
}

$ Modding: Music

GHOSTWORK uses a 3-intensity-layer music system powered by Ovani. Every track has a main layer (always audible), an intensity_1 layer (fades in during tense moments), and an intensity_2 layer (fades in at critical heat). Layers crossfade automatically based on the game's mood system — modders provide raw audio files and metadata only.

Declare "music": "music/" in your addon manifest's content map. Inside that directory, create a tracks.json file — a JSON array of track definitions.

Track Schema

FieldTypeRequiredDescription
idstringYesUnique track identifier (snake_case)
display_namestringYesHuman-readable name shown in settings
reverb_tailfloatNoReverb tail in seconds (default 5.0)
modestringNo"intensities" (default), "loop30", or "loop60"
layersobjectConditionalRequired for "intensities" mode (see below)
filestringConditionalRequired for "loop30"/"loop60" — single loop file

Intensities Mode (Default)

The layers object maps layer names to .ogg or .wav file paths relative to the music directory:

LayerRequiredWhen It Plays
mainYesAlways audible — the base drone
intensity_1NoFades in at TENSE mood (falls back to main)
intensity_2NoFades in at CRITICAL mood (falls back to main)

Example: tracks.json

// music/tracks.json
[
  {
    "id": "sample_ambient",
    "display_name": "Sample Ambient Track",
    "reverb_tail": 4.0,
    "mode": "intensities",
    "layers": {
      "main": "base_drone.ogg",
      "intensity_1": "tension.ogg",
      "intensity_2": "critical.ogg"
    }
  },
  {
    "id": "lofi_loop",
    "display_name": "Lo-Fi Loop",
    "mode": "loop30",
    "file": "lofi_30s.ogg"
  }
]
Audio formats. Supported: .ogg (Vorbis) and .wav. All three intensity layers should be the same tempo and bar length so they stay in phase during crossfades. Addon tracks appear in the Settings track selector, participate in random rotation, and are indistinguishable from core tracks.

$ Modding: Shell Presets

Customize the terminal with shell presets that define command aliases and environment variables. Declare "shell": "shell/" in your addon manifest's content map, then create a presets.json file.

Example: presets.json

// shell/presets.json
{
  "extends": "default",
  "aliases": {
    "ll": "ls -la",
    "cls": "clear",
    "ports": "scan --ports"
  },
  "variables": {
    "EDITOR": "nano"
  }
}

extends inherits from the named base preset ("default" gives you all built-in aliases). Aliases expand at parse time — typing ll runs ls -la. Variables are available to commands via the shell environment.

$ Modding: Market Items

Add consumable items to the in-game market. Items provide one-shot effects like heat reduction, intel scanning, or credential reveals.

Adding a Market Item

{
  "id": "thermal_dampener",
  "name": "Thermal Dampener",
  "description": "Emergency heat dissipation module. Single use.",
  "price": 2500,
  "category": "defense",
  "effect_type": "heat_reduce",
  "effect_value": 15.0,
  "tier_required": 2,
  "reusable": false
}

Effect types: heat_reduce, scrub_all, intel_scan, credential_reveal, forged_access, heat_reduction. Items with reusable: true persist in inventory after use.

Extending Market Items

"market_items": {
  "extend": [
    {
      "id": "burner_phone",
      "patch": {
        "price": 1500,
        "effect_value": 20.0
      }
    }
  ]
}

$ Modding: IDS Signatures

Add custom intrusion detection rules to the signature-based IDS engine. Signature rules fire alongside anomaly detection during packet analysis.

Adding a Signature Rule

{
  "rules": [
    {
      "id": "SIG-ADDON-001",
      "name": "Custom Backdoor Pattern",
      "matches": {"protocol": "tcp", "dst_port_range": [31337, 31337]},
      "severity": "CRITICAL",
      "detection_base": 0.8
    }
  ]
}

Rule IDs must be unique across core and addon rules. Addon rules are appended to the core rule set during TrafficAnalysis initialization. Polymorphic encoders get 2× evasion bonus against signature detection.

Extending a Rule

{
  "rules": [
    {
      "extends": "SIG-001",
      "detection_base": 0.5,
      "severity": "MEDIUM"
    }
  ]
}

$ Modding: Service Banners

Add service banners for the enumeration system. Banners define what the enum command reveals about a service, and the enumeration bonus applied to subsequent exploits.

Adding a Banner

{
  "banners": {
    "custom_svc": {
      "defaultBanner": "CustomSvc/1.0 ready",
      "versionPattern": "CustomSvc/{version}",
      "enumerationBonus": 0.10,
      "detailFields": ["auth_required", "protocol_version"]
    }
  }
}

Banner keys match services[].type in contract host definitions. The enumerationBonus is added to exploit success rate when the service has been enumerated first.

$ Modding: Poster Profiles

Add BBS poster handles with trust scores, faction affiliations, and law enforcement front status. Poster trust affects contract risk assessment and payout reliability.

Adding a Poster

{
  "posters": {
    "addon_poster": {
      "trustScore": 60,
      "confirmedJobs": 10,
      "faction": "shadow_guild",
      "isLeFront": false,
      "bio": "A mysterious new fixer on the board."
    }
  }
}
LE Front status. Setting isLeFront: true makes the poster a law-enforcement sting operation — contracts from this poster apply a payout multiplier and heat penalty. Use for difficulty mods or narrative twists.

Extending a Poster

{
  "posters": {
    "extends": "d4rkm4tter",
    "trustScore": 65,
    "bio": "Updated bio after a big job."
  }
}

$ Modding: Encoders

Add custom encoding schemes for payload evasion. Encoders interact with the IDS evasion cap (0.95), AV evasion cap (0.95), and reliability compounding per iteration.

Adding an Encoder

{
  "encoders": {
    "addon_encoder": {
      "name": "Custom Encoder",
      "tier": 2,
      "sizeMultiplier": 1.2,
      "idsEvasion": 0.45,
      "avEvasion": 0.35,
      "reliabilityPenalty": 0.08,
      "polymorphic": false,
      "description": "A custom encoding scheme."
    }
  }
}

New encoders are available to msfvenom -e at the specified tier. Use msfvenom preview to verify balance after changing evasion values.

Extending an Encoder

{
  "encoders": {
    "extends": "xor",
    "reliabilityPenalty": 0.03,
    "description": "Rebalanced XOR encoding."
  }
}

$ Modding: Config Overrides

Tune subsystem parameters without writing code. Place JSON files in your addon's configs/ directory, each targeting a core config by name.

Example: Tuning Web Attack Detection

{
  "target": "web_attack_config",
  "detectionConfig": {
    "baseWafBypassChance": 0.35
  }
}

Available Targets

TargetSubsystemWhat It Tunes
web_attack_configWeb Attack SurfaceWAF bypass, SQL/XSS patterns, scan heat
privesc_configPrivilege EscalationGTFOBins database, SUID/cron limits, enumerate heat
supply_chain_configSupply ChainTyposquat distance, dep tree depth, checksums
pki_configPKI / EncryptionWeak protocols, cipher lists, key thresholds
sysadmin_ai_configActive Defense AIPatrol timing, detection chances, honeypot/firewall tuning
encoding_configEncoding EngineEvasion caps, reliability penalties, iteration limits
siem_configSIEM ForwardingForward delay, forwarded evidence types, volatile skip
bbs_payout_configBBS EconomyPayout step, escrow ratio, access fee, time bonus
traffic_analysis_configTraffic AnalysisAnomaly thresholds, signature weights, alert cooldown
cert_pinning_configPKI / TLSHSTS enforcement, cert chain depth, pin bypass rules
active_directory_configActive DirectoryKerberoast success rate, golden ticket heat, credential rotation interval
wireless_configWireless AttacksProtocol difficulty, deauth capture rates, evil twin interception chances

Merge Rules

Scalars (strings, numbers, bools) are replaced. Dictionaries are recursively merged. Arrays are appended. Multiple addons targeting the same config merge in load order.

$ Advanced Modding

Complete Addon Example

A full addon that adds a new faction, commands, contracts, custom vulnerabilities, tools, music, and shell aliases:

// addon.json
{
  "id": "neon_circuit_pack",
  "name": "Neon Circuit Faction Pack",
  "version": "1.0.0",
  "author": "ExampleModder",
  "description": "Adds Neon Circuit faction with custom contracts and tools",
  "game_version_min": "1.0.0",
  "content": {
    "commands": "commands/",
    "factions": "factions/",
    "contracts": "contracts/",
    "cves": "cves/",
    "tools": "tools/",
    "music": "music/",
    "shell": "shell/"
  }
}

Content Type Support Matrix

Content TypeAddExtendOverrideNotes
Commands✓✓✓JSON + optional .gd executor
Contracts✓✓✓Includes network topology
Factions✓✓✓Override warned — narrative impact
Hardware✓✓✓Any of 6 slots, custom tiers
Operating Systems✓✓✓10 palette keys required for add
CVE Catalog✓✓✓ZD- prefix enforced at load time
Software Tools✓✓✓Installable tools with storage cost
Narrative✓✓✓Fragments with unlock conditions
Music✓—✓tracks.json — intensities or loop mode
Shell✓✓—Aliases and environment variables
Market Items✓✓✓Consumables with one-shot effects
IDS Signatures✓✓✓Signature rules for intrusion detection
Service Banners✓✓✓Enumeration banners with exploit bonus
Poster Profiles✓✓✓BBS posters with trust & LE front status
Encoders✓✓✓Payload encoding schemes for evasion
Config Overrides—✓—Deep-merge tuning for 10 subsystem configs

Best Practices

$ Modding API Reference

Complete field-level schema for every moddable content type. Download the machine-readable spec or browse inline.

Downloadable schema. The canonical modding_api_schema.json ships with the game at res://assets/data/modding_api_schema.json. Use it for IDE validation, linting, or building addon authoring tools.

Addon Manifest (addon.json)

FieldTypeRequiredDefaultDescription
idStringYes—Unique addon identifier (snake_case)
nameStringYes—Human-readable display name
versionStringYes—SemVer version (e.g. "1.0.0")
authorStringYes—Author or team name
descriptionStringYes—Short description
game_version_minStringYes—Minimum game version (SemVer)
dependenciesArray[String]No[]Required addon IDs (loaded first)
load_orderintNo100Lower loads first. Content packs: 100–200. Total conversions: 900+
contentDictionaryYes—Maps content type keys to directory paths

Content map keys: commands, contracts, factions, hardware, os, narrative, music, shell, cves, tools, market_items, ids_signatures, service_banners, poster_profiles, encoders, configs

Commands

Field reference — 15 fields
FieldTypeReqDefaultValidationDescription
verb_idStringNameYes—Unique, snake_caseCommand identifier
signatureDictionaryNo{}—Positional args and flag definitions
base_heatfloatYes—≥ 0.0Heat generated per execution
base_ticksintYes—≥ 1Simulation ticks consumed
widget_kindStringNameNo""table, record, stream, meter, ""Output widget type
intent_templateArrayNo[]—Intent display templates
presentation_tierintNo11–3Min player tier for full output
max_presentation_tierintNo00 = no maxMax tier with special output
help_textStringNo""—One-line help text
descriptionStringNo——Longer man page description
skip_flag_parseboolNofalse—Bypass centralized flag validation
outside_resolutionboolNofalse—Run after tick resolution
accepts_structured_stdinboolNofalse—Accept piped structured input
executor_typeStringNo—"alias" for data-onlyIf alias, uses alias_target
alias_targetStringCond.—Existing verb_idRequired when executor_type = alias

Extend: extension_flags[] merged (core wins on collision), extension_subcommands[] merged. Override: replaces definition + executor, drops extensions.

Contracts

Field reference — 11 top-level + nested objects
FieldTypeReqValidationDescription
idStringYesUnique, snake_caseContract identifier
titleStringYes—Board display name
poster_handleStringYesMatches poster profileBBS poster handle
briefingStringYes—Flavor text briefing
risk_levelStringYesLOW/MED/HIGHRisk classification
base_payoutintYes> 0Base credit payout
time_limit_ticksintYes> 0Ticks before contract expires
target_security_levelintYes1–3Network difficulty tier
faction_tagStringNoExisting faction_idAssociated faction
objectivesArrayYes≥ 1 entryObjectiveSpec array
network_topologyDictionaryYes—Subnets, hosts, routing, credentials
sysadmin_configDictionaryNoDerived from SLActive Defense AI config

ObjectiveSpec: objective_id, type (SESSION_ESTABLISH/FILE_EXFILTRATE/CUSTOM_CONDITION), target_description, completion_condition{}.

Host objects support: web_apps, privesc_vectors, tls_config, siem_config, security_flags, ca_chain, ad_domain, wireless_ap.

Extend: scalars replaced (addon wins), objectives[] appended, hosts{}/subnets{}/credentials{} merged.

Factions

Field reference — 4 fields
FieldTypeReqValidationDescription
faction_idStringYesUnique, snake_caseFaction identifier
display_nameStringYes—Player-facing name
archetypeStringYes—Faction type description
rival_faction_idsArrayNoExisting faction_idsRival factions (appended on extend)

Override warned — changing core factions breaks narrative coherence.

Hardware

Field reference — 6 fields
FieldTypeReqValidationDescription
component_idStringYesUnique, snake_caseComponent identifier
slotStringYesCPU/RAM/NIC/STORAGE/COOLING/GPUHardware slot
tierintYes1–4Tier level
priceintYes≥ 0Market price in credits
effectsDictionaryYes—Effect name → value pairs
prerequisitesArrayNo—Required component_ids

Extend: effects{} merged (new keys added, skip existing), prerequisites[] appended.

Operating Systems

Field reference — 14 fields, 13-key palette
FieldTypeReqValidationDescription
os_idStringYesUnique, snake_caseOS identifier
display_nameStringYes—Player-facing name
shorthandStringYes2–4 chars uppercaseShort abbreviation
taglineStringYes—Flavor tagline
dominant_phosphorString/ArrayYesHex or RGBAPrimary theme color
wm_modelintYes0 = TilingWindow manager model
phosphor_paletteDictionaryYes13 required keysFull color palette
starting_hardwareArrayYes—Starting rig component IDs
gameplay_modifiersDictionaryNo{}Modifier overrides
filesystem_styleStringNo—unix or windows
package_managerStringNo—Package manager command

13 palette keys: bg, fg_primary, fg_secondary, fg_metadata, accent, border, selection, comment, alert_critical, alert_high, alert_mid, alert_low, success. All required for add; provide only changed keys for extend.

CVE Catalog

Field reference — 12 fields
FieldTypeReqValidationDescription
idStringYesMust start with ZD-Fictional CVE identifier
titleStringYes—Vulnerability title
descriptionStringYes—Technical description
affected_serviceStringYesValid service typeTarget service
affected_versionsDictionaryYes{min, max}Vulnerable version range
os_typesArrayYes—Affected OS types
attack_typeStringYes—rce, lfi, auth_bypass, etc.
severityStringYes—critical/high/medium/low
cvss_scorefloatYes0.0–10.0CVSS score
exploit_complexityStringYes—low/medium/high
required_tierintYes1–3Minimum player tier
compatiblePayloadCategoriesArrayNo[]Compatible payload types

Software Tools

Field reference — 8 fields
FieldTypeReqValidationDescription
idStringYesUnique, snake_caseTool identifier
nameStringYes—Display name
categoryStringYes—recon, exploit, web, cracking, cloud, etc.
tierintYes1–3Min tier to purchase
priceintYes≥ 0Market price in credits
descriptionStringYes—Tool description
enablesArrayYes—Capability flags this tool provides
os_restrictionArrayNo[] (all)OS types that can install

Market Items

Field reference — 9 fields
FieldTypeReqValidationDescription
idStringYesUnique, snake_caseItem identifier
nameStringYes—Display name
descriptionStringYes—Item description
priceintYes> 0Price in credits
categoryStringYes—defense, intel, tools
effect_typeStringYes—heat_reduce, scrub_all, intel_scan, etc.
effect_valuefloat/intYes—Effect magnitude
tier_requiredintYes1–3Minimum player tier
reusableboolYes—Persists after use?

IDS Signature Rules

Field reference — 5 rule fields + match criteria
FieldTypeReqValidationDescription
idStringYesUnique (e.g. SIG-ADDON-001)Rule identifier
nameStringYes—Human-readable rule name
matchesDictionaryYes—Pattern to match (see below)
severityStringYesLOW/MEDIUM/HIGH/CRITICALAlert severity
detectionBasefloatYes0.0–1.0Base detection probability

Match fields: protocol (tcp/dns/icmp), flags (SYN/PSH-ACK), dstPortMin/dstPortMax, action (exploit_service/scan_host/exfiltrate/etc.), minBytes.

Service Banners

Field reference — 4 fields per service
FieldTypeReqValidationDescription
templateStringYesMay contain {version}, {hostname}Banner text template
loginPromptboolYes—Shows login prompt?
commonVersionsArrayYes—Version strings for network gen
enumerationBonusfloatYes0.0–1.0Exploit success bonus after enum

Keyed by service type (matches services[].type in contract hosts). Default bonus: 0.15. Heat cost: 1.5.

Poster Profiles

Field reference — 5 fields per poster
FieldTypeReqValidationDescription
trustScoreintYes0–100Starting trust score
confirmedJobsintYes≥ 0Completed job count
factionStringYesExisting faction_idAssociated faction
isLeFrontboolYes—Law enforcement front? (1.5× payout, +25 heat)
bioStringYes—Poster biography

Keyed by poster handle. Handle must be unique across core and addon profiles.

Encoders

Field reference — 8 fields per encoder
FieldTypeReqValidationDescription
nameStringYes—Display name
tierintYes1–3Min tier for msfvenom -e
sizeMultiplierfloatYes> 0.0Payload size multiplier (< 1.0 = compression)
idsEvasionfloatYes0.0–1.0IDS evasion contribution (cap: 0.95)
avEvasionfloatYes0.0–1.0AV evasion contribution (cap: 0.95)
reliabilityPenaltyfloatYes0.0–1.0Compounds per iteration: pow(1-penalty, N)
polymorphicboolYes—Re-randomizes signature each tick (2× vs IDS)
descriptionStringYes—Encoder description

Keyed by encoder_id. Global limits from encoding_config.json: stackingMax: 3, iterationMax: 10, idsEvasionCap: 0.95, avEvasionCap: 0.95.

Config Overrides

10 valid targets
TargetSubsystemSource File
web_attack_configWeb Attack Surfaceassets/data/web_attack_config.json
privesc_configPrivilege Escalationassets/data/privesc_config.json
supply_chain_configSupply Chainassets/data/supply_chain_config.json
pki_configPKI / Encryptionassets/data/pki_config.json
sysadmin_ai_configActive Defense AIassets/data/sysadmin_ai_config.json
encoding_configEncoding Engineassets/data/encoding_config.json
siem_configSIEM Forwardingassets/data/siem_config.json
bbs_payout_configBBS Economyassets/data/bbs_payout_config.json
traffic_analysis_configTraffic Analysisassets/data/traffic_analysis_config.json
cert_pinning_configPKI / TLSassets/data/cert_pinning_config.json

Extend only (no add or override). Scalars replaced, dictionaries recursively merged, arrays appended. Multiple addons merge in load order.

Narrative, Music & Shell

Field reference — remaining content types

Narrative Fragments: fragment_id (String, req), arc_id (String, req), carrier (int, req), content_type (int, req), criticality (int, 0=optional/1=important), unlock_conditions (Dictionary, req — type/count/faction_id/min_standing), placement (Dictionary, req — thread_title/poster_handle), content (String, req), tags (Array, opt).

Music Tracks: id (String, req), display_name (String, req), mode (String, default "intensities"; also "loop30"/"loop60"), reverb_tail (float, default 5.0), layers (Dictionary, req for intensities: main req, intensity_1/intensity_2 opt), file (String, req for loop modes). Formats: .ogg (Vorbis) and .wav. Add and Override only.

Shell Presets: extends (String, opt — base preset name), aliases (Dictionary, key → expanded command), variables (Dictionary, key → value). Add and Extend only (core wins on collision).

$ GDScript Runtime API

Custom command executors are GDScript files that run alongside verb JSON definitions. This section documents the classes and methods available to addon scripts at runtime.

Verb Executor Contract

Every custom command GDScript must follow this exact contract:

# commands/my_verb.gd
extends RefCounted


static func get_verb_id() -> StringName:
    return &"my_verb"


static func execute(ctx: ExecutionContext) -> void:
    # Your logic here. ctx provides all system access.
    var vm := PresentationViewModel.new()
    vm.widget_kind = &"stream"
    vm.producer_id = "my_verb"
    vm.payload = {"lines": [{"text": "Hello from addon!"}]}
    vm.complete()
    ctx.result_vm = vm
Two static methods, nothing else. get_verb_id() returns the StringName matching your JSON's verb_id. execute(ctx) receives an ExecutionContext and sets ctx.result_vm to a PresentationViewModel before returning.

ExecutionContext

The context object passed to every verb executor. It provides parsed arguments, injectable system seams, and the submit_and_wait() coroutine for requesting game-world actions.

Properties — arguments & state
PropertyTypeDescription
verb_idStringNameThe executing verb's ID
verb_definitionVerbDefinitionThe loaded verb definition resource
argsArrayPositional arguments from the command line
flagsDictionaryParsed flags (e.g. {&"deep": true, &"port": 22})
stdinVariantPiped input (null, PresentationViewModel, or String)
is_pipe_stageboolTrue if this verb is mid-pipeline (piped output expected)
session_hostStringNameHost ID of the current SSH/connect session
session_idStringCurrent session ID
cwdStringCurrent working directory on the connected host
pane_idintTerminal pane this command runs in
capability_contextDictionaryHardware/OS capability flags for this verb
result_vmPresentationViewModelSet this to your output before returning
System seams — injectable Callables

All system access is through injectable Callables. Addon verbs receive the same seams as core verbs — no autoloads needed.

SeamSignatureDescription
heat(source, amount, reason)Add heat to the player
heat_dimensional(source, amount, reason, dimension)Add heat with NETWORK/HOST/BOTH dimension
heat_read() → DictionaryGet dimensional heat breakdown
heat_preview(amount) → DictionaryPreview heat change without applying
heat_band() → intCurrent heat band (0=clean, 1=warm, etc.)
nss_readCallableRead from the Network Simulation Substrate
os_read() → StringNameGet the player's active OS
tier_read() → intGet current player tier (1–3)
economy_read() → intCurrent credit balance
economy_expense(amount, source, desc) → intDeduct credits (returns txn ID)
faction_read() → DictionaryFaction standings
hardware_read() → Array[Dict]Market hardware listings
hardware_status() → Array[Dict]Current rig components
hardware_purchase(component_id) → DictionaryPurchase a hardware component
bbs_query(action, id, params) → DictionaryQuery BBS contract board
local_fs(action, params) → DictionaryLocal filesystem operations
capability_check(vid, os) → boolCheck if verb is available for build
presentation(kind, payload, id)Create a PresentationViewModel
le_read() → DictionaryLaw enforcement pressure summary
payload_registry_read() → PayloadRegistryAccess payload module registry
encoding_engine_read() → EncodingEngineAccess encoding engine
environmentShellEnvironmentShell env vars and aliases
command_historyCommandHistoryPer-pane command history
verb_registryVerbRegistryVerb definitions lookup
Utility methods
MethodReturnsDescription
get_tier()intConvenience wrapper for tier_read (defaults to 1)
resolve_path(path)StringResolves relative paths against cwd (handles ~, .., drive letters)

submit_and_wait()

The coroutine for requesting game-world actions through the EventScheduler. Returns a Dictionary with "success": bool and action-specific result data.

var outcome: Dictionary = await ctx.submit_and_wait(
    &"scan_host",             # action name
    StringName(target_ip),    # target
    {"depth": true}           # params (optional)
)
Available actions — 36 intent types
ActionCategoryDescription
list_subnetsReconList known subnets in the target network
scan_subnetReconScan a subnet for hosts
scan_hostReconScan a host for services
scan_web_appReconScan a web application for vulnerabilities
enumerate_serviceReconEnumerate a service (banner, version, details)
enumerate_privescReconEnumerate privilege escalation vectors
tls_scanReconScan TLS configuration (ciphers, certs, HSTS)
exploit_serviceExploitExploit a vulnerability on a service
exploit_privescExploitEscalate privileges via a discovered vector
fuzz_parameterExploitFuzz a web app parameter (SQLi, XSS, etc.)
pass_the_hashExploitAuthenticate using a captured credential hash
forge_certificateExploitForge a TLS certificate with stolen CA material
mitm_interceptExploitMan-in-the-middle interception on a connection
connectSessionEstablish a session on a compromised host
disconnectSessionClose a session
establish_tunnelSessionCreate a network tunnel through a host
list_sessionsSessionList active sessions
harvest_credentialsPost-exploitHarvest credentials from a compromised host
lsFilesystemList files on a remote host
statFilesystemGet file metadata
read_fileFilesystemRead a file from a remote host
write_fileFilesystemWrite a file to a remote host
delete_fileFilesystemDelete a file on a remote host
read_logsForensicsRead log files on a host
scrub_logsForensicsScrub local log entries (SIEM copies persist)
timestomp_filesForensicsModify file timestamps
siem_correlateForensicsQuery/delete SIEM forwarded logs (requires SIEM host access)
patch_serviceDefensePatch a service to close a vulnerability
kerberoastActive DirectoryExtract Kerberos TGS tickets from service accounts on a domain controller
golden_ticketActive DirectoryForge a Kerberos TGT for persistent domain admin access
dcsyncActive DirectoryReplicate domain credentials via Directory Replication Service
pass_the_ticketActive DirectoryReplay stolen Kerberos tickets on domain-joined hosts
aircrackWirelessCrack wireless encryption (success varies by protocol)
evil_twinWirelessDeploy rogue access point to intercept client traffic
deauthWirelessDeauthentication attack to capture handshakes

All actions return {"success": true/false, ...}. On failure, check outcome.get("reason") for the StringName error code. The action "cancelled" means the sysadmin AI interrupted the operation.

PresentationViewModel

The output object your verb builds and assigns to ctx.result_vm. It drives the terminal widget display.

Property / MethodTypeDescription
widget_kindStringName&"table", &"record", &"stream", &"meter", or &""
producer_idStringYour verb_id (for display attribution)
payloadDictionaryWidget-specific data (see below)
complete()voidMark output as finished (state → COMPLETE)
fail(message)voidMark output as failed with error message
update_payload(data)voidMerge new data into payload (emits updated)
append_stream_lines(lines)voidAppend lines to a stream widget
set_meter_value(value)voidUpdate a meter widget's current value

Widget Payload Formats

WidgetPayload Structure
"stream"{"lines": [{"text": "...", "color": "#hex"}], "clear": bool}
"table"{"columns": ["Col1", ...], "rows": [["val1", ...]]}
"record"{"fields": [{"label": "...", "value": "..."}]}
"meter"{"label": "...", "value": 0.0, "max": 1.0}
Security warning. Addon GDScript runs with full engine permissions. Data-only mods (JSON) are inherently safe. The game warns players when addons with .gd scripts are loaded.

GHOSTWORK — A hacking simulation by Broken Sigil Studio

139 commands · 52 contracts · 6 operating systems · 18 hardware components · 52 CVEs · 12 payload modules · 6 encoders · 6 languages · 16 moddable content types