-
Notifications
You must be signed in to change notification settings - Fork 1
Claude Skill
The repository ships a skill for CK3 modding aimed at AI agents, not at the editor. It lives under skills/ck3-modding/ and is not part of the extension runtime: the extension never loads it, and it works with any agent that reads SKILL.md files (Claude Code and others).
A skill that teaches an agent the full CK3 modding workflow the way an experienced modder actually works, rather than letting the model improvise from half-remembered token names. Its core discipline is ground truth first:
- The base game files are the source of truth. The skill never guesses trigger, effect or scope names from memory; it reads them from a vanilla file, the game's own
_*.infoschema docs, or yourscript_docslogs. - Log-dump analysis: when it needs runtime truth (what errored, the exact effect / trigger / scope lists, the GUI data-binding API, which file won a contested override), it asks you to produce the dump by launching the game and running a console command, then reads the log itself instead of asking you to interpret it. It checks the log's timestamp so it does not reason from a stale dump.
- Validation with ck3-tiger after writing code and before asking you to test in game.
-
Per-system reference recipes under
references/(setup, language, events, content, GUI, validation, debugging, compatibility, plus deep step-by-step recipes per system underreferences/patterns/). -
Distilled pattern notes from two large Workshop mods in
mods/agot.md(A Game of Thrones) andmods/pod.md(Princes of Darkness): real-world idioms for tiered meters, hidden societies, AI-driven drama, performance budgeting, and custom UI at scale.
It also carries the hard-won rules that keep a mod from failing silently: UTF-8 with BOM for localization, common/on_action is singular, never redefine a vanilla on_action's trigger/effect (append your own), script is LIOS / last-wins while GUI is FIOS / first-wins, and so on.
The skill uses the placeholders <game>, <logs>, <mods>, <workshop> and <tiger> for the machine paths. You have two ways to install it.
Copy the whole skills/ck3-modding/ folder into your agent's skills directory (for Claude Code, that is ~/.claude/skills/). No path editing needed: the skill resolves the placeholders itself at the start of each session, in its Step 0, by looking in the usual Steam / Documents locations (and asking you only if detection fails).
If you would rather bake your machine's paths in ahead of time, generate a substituted copy:
-
Create
dev-paths.jsonin the repo (copydev-paths.example.json) and fill in yourgamePath,logsPathand optionaltigerPath. -
Build and run the generator:
npx esbuild scripts/gen-skill.ts --bundle --platform=node --outfile=dist/gen-skill.cjs node dist/gen-skill.cjs [destDir]destDirdefaults to your~/.claude/skills/ck3-modding. The<workshop>and<mods>paths are derived automatically (workshop fromgamePath, the mod folder as the sibling oflogsPath), and if you leavetigerPathunset the<tiger>slot is replaced with a clearly-marked "fill this in" marker.
Never hand-edit a generated copy. The template under skills/ck3-modding/ is the single source of truth; edit it and regenerate, or your changes are lost the next time you run the generator.
Once installed, just talk to your agent about CK3 modding. The skill's description auto-triggers on CK3, Crusader Kings and Paradox-modding topics, so you do not have to invoke it by name. A few example prompts:
- "Write me an event where my ruler's cat dies and everyone at court mourns."
- "Why does my decision not show up in game?"
- "Set up a new mod skeleton for me."
- "Run ck3-tiger on my mod and fix what it finds."
A plain model will confidently invent trigger and scope names that do not exist in your patch, and cannot see why your file is being ignored. This skill does neither: it reads your actual game files and logs, works from Paradox's own schema docs, validates with ck3-tiger, and walks the silent-failure checklist when you say "it does nothing". The answers are grounded in your install, not in the model's memory.