An agent skill for modding Europa Universalis V — a self-contained bundle of reference documentation and PowerShell tooling that you drop into an AI coding assistant so it stops guessing at EU5 script and starts checking the game files.
It is plain Markdown and PowerShell. Nothing in it is tied to a particular assistant, model, or vendor: any agent that can read files and run a shell can use it, and any chat assistant that accepts uploaded documents can use the reference half of it.
EU5 runs on Clausewitz/Jomini, so it looks like EU4, CK3 and Vic3 — and that is the trap. The folder layout, the load order, and a long list of trigger and effect names differ enough that habits from the other Paradox games produce script which loads without error and silently does nothing.
The skill is built around one rule:
Never write EU5 script from memory. Find vanilla's version first, then copy its shape.
The game ships 95 readme.txt / *.info files, one per common/ subfolder, and those
are authoritative for the installed patch. The skill's job is to make consulting them
the path of least resistance, and to record the things the shipped docs don't say —
which were measured in-game rather than inferred from other Paradox titles.
eu5-modding/
SKILL.md entry point: the rules, the layer map, the workflow
references/ 12 deep-dive documents
scripts/ 12 PowerShell tools
assets/snippets.md verified copy-paste shapes for common content types
| Reference | Covers |
|---|---|
mod-design.md |
Content vs feature vs rebalance, historical-alignment and balance method |
mod-structure.md |
Game-flow layers, .metadata, load order, INJECT:/REPLACE:, folder map |
script-syntax.md |
Paradox script grammar, scopes, triggers, effects, script values |
content-types.md |
What each of the ~115 common/ folders is, and which readme to read |
events-missions-onactions.md |
Event blocks, on_action dispatch, missions |
localization.md |
.yml format, custom loc, trigger loc, data functions, formatting |
map-modding.md |
Locations, geography hierarchy, adjacencies, ports, start state |
gui-modding.md |
.gui widgets, data binding, scripted GUIs, the reload gui loop |
graphics.md |
Coats of arms, flags, textures, icons, models |
debugging.md |
debug_mode, console commands, script_docs, error.log triage |
tooling.md |
CWTools, Community Mod Framework/Toolkit, Arcanum, Git setup |
| Script | Does |
|---|---|
Get-EU5Example.ps1 |
Shipped docs + file list + one representative vanilla entry, bounded |
Test-EU5Mod.ps1 |
Pre-launch lint: metadata, BOM/CRLF, layer placement, loc coverage, dead entry-mode targets. -Fix repairs encoding |
Start-EU5.ps1 |
Launches the game in debug mode with only your mod in the playset |
New-EU5Mod.ps1 |
Scaffolds a mod with valid .metadata and layer folders |
New-EU5Content.ps1 |
Scaffolds a content file into the right layer with the right prefix, BOM, and loc stubs |
Find-EU5Content.ps1 |
Greps the install and reports source / layer / folder / file / line |
Test-EU5Conflicts.ps1 |
Resolves keys shared with installed mods through the operation chain |
Test-EU5Compat.ps1 |
Hashes the vanilla files your mod is coupled to; reports what a patch changed |
Get-EU5Errors.ps1 |
Reads error.log with vanilla's own noise filtered out |
Find-EU5.ps1 |
Locates install, user dir, mod dir, logs, Workshop dir, and game build |
Test-EU5Docs.ps1 |
Reports whether the script_docs dump matches the installed build |
Test-EU5Identifiers.ps1 |
Checks every identifier in this skill's examples against the dump and vanilla |
- Europa Universalis V installed (Steam App ID
3450310). - Windows with PowerShell 5.1 or later, for the scripts. The reference documents are plain Markdown and work anywhere.
- An assistant that can read local files and run shell commands, if you want the scripts used. A browser-only chat assistant still gets the full reference half.
Measured against game build 1.3.11. Paradox patches move things — see Keeping it current.
- Download
eu5-modding-<version>.zipfrom the latest release. - Unzip it so that the
eu5-moddingfolder — withSKILL.mddirectly inside it — lands where your assistant looks for skills.
| Assistant | Put the eu5-modding folder in |
|---|---|
| Claude Code | ~/.claude/skills/ for all projects, or <project>/.claude/skills/ for one |
| Any file-reading coding agent | Anywhere in your mod's workspace; tell it to read eu5-modding/SKILL.md before writing EU5 files |
| Chat assistants with project / knowledge files | Upload the .md files as project knowledge and paste SKILL.md into the custom instructions |
The .md files carry the knowledge; the .ps1 scripts carry the automation. An
assistant with no shell access can use everything except the scripts.
git clone https://github.com/BerFoe/eu5-modding-skill.git
Copy-Item -Recurse .\eu5-modding-skill\eu5-modding "$env:USERPROFILE\.claude\skills\"To track updates without re-copying, symlink instead (needs an elevated shell or Windows Developer Mode):
New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.claude\skills\eu5-modding" -Target "<path-to-clone>\eu5-modding"Once installed, describe what you want built and let the assistant work:
"Add an event to my Burgundy mod that fires when the ruler dies without an heir."
"Why is my localization showing raw keys in game?"
"Add a new building that unlocks from a university advance."
If your assistant doesn't pick the skill up on its own, point it at the entry file:
"Read eu5-modding/SKILL.md first, then ..."
The loop the skill drives, for reference:
Get-EU5Example (see the real shape) → New-EU5Content (create it in the right place)
→ edit → Test-EU5Mod (catch it statically) → Start-EU5 -Solo -Wait (see it run)
→ Get-EU5Errors (confirm the log is clean).
In scope: content mods (nations, flavour, events, missions, buildings), feature mods within what the engine allows, and rebalances. Total conversions are not.
Two defaults the skill applies to content mods, both overridable on request: content is historically plausible and not overpowered relative to the closest vanilla equivalent. Ask for something outside them and it builds what you asked for.
EU5 is patching quickly, and anything written down about it goes stale.
Find-EU5.ps1warns when the game has patched past the build the skill was written against, and when thescript_docsdump is missing or stale.Test-EU5Docs.ps1compares the dump to the installed build.Test-EU5Identifiers.ps1re-checks every identifier used in the skill's own examples against the dump and against vanilla files. Run it after a patch.
When the game and the skill disagree, the game is right. Please open an issue.
Issues and pull requests are welcome, especially:
- corrections where a patch has invalidated something,
- behaviour that was measured in-game rather than assumed (say which build),
- coverage for a
common/folder the references don't reach yet.
Two housekeeping rules, because this repo is encoding-sensitive: files stay UTF-8
and the .ps1 scripts keep their BOM and CRLF endings (.gitattributes
disables Git's newline rewriting to protect them), and script content stays plain ASCII.
MIT.
Unofficial and unaffiliated. Not endorsed by or associated with Paradox Interactive. Europa Universalis is a trademark of Paradox Interactive AB. All game content referenced here belongs to its respective owners.