wingedguardian/skyrimvr-claude-toolkit/skyrim-context
Claude Code and agent skill by wingedguardian/skyrimvr-claude-toolkit
- community
Checking that the SKILL.md file is still in the repository.
Skyrim modding context and VR-specific gotchas. Auto-loads when working with Papyrus scripts, ESP-related files, or Data/ contents.
Install
npx vskill@latest install wingedguardian/skyrimvr-claude-toolkit/skyrim-contextSKILL.md
Skyrim Modding Context
You are working in a modded Skyrim installation with a full modding toolkit. Consult KNOWLEDGEBASE.md in the project root for the complete reference. Below are the most critical gotchas that cause silent failures or crashes.
Top 15 Gotchas (Memorize These)
- RemoveSpell doesn't fire OnEffectFinish — use
DispelSpellwhen cleanup logic exists (but DispelSpell excludes abilities) - All effects on a spell must have the same casting type — mismatches cause silent failure
- VMAD editing is fragile — use
GetFormFromFile()on your OWN plugin's forms to minimize properties (never another mod's — see Own Your Records), and check the result forNone; xEdit can't add scripts to VMAD - PlayIdle fails in VR — VRIK overrides skeleton IK; bypass with timed Papyrus scripts
- Wait() unreliable under 100ms — merge sub-100ms gaps; use
RegisterForSingleUpdatewhen possible - SSE != VR for: camera, skeleton, collision, UI, input, SKSE addresses, physics (60Hz→90Hz)
- Light-plugin (ESL) FormIDs: keep to xx000800-xx000FFF (header 1.70) — lower IDs (header 1.71) depend on the runtime; verify on yours (KB ESL rules)
- Loose files always override BSAs — check for loose file conflicts before assuming BSA content wins
- Condition OR has precedence over AND —
A AND B OR C!= what you'd expect - Non-auto properties don't restore from master on save/load — they stay blank
- PreWEAPON/PreSHIELD skeleton nodes cause CTD in VR — must be removed
- ONAM required for ESM temp record overrides — missing ONAM = game silently ignores overrides
- SetVehicle causes HMD desync in VR — avoid entirely
- GoToState("") in OnUnload → Self=None crash — move to OnLoad instead
- Navmesh creation is CK-only — xEdit can only delete, never recreate
Key VR Differences
- SKSEVR is a completely separate build from SKSE64 — address libraries differ entirely
DisablePlayerControls()does NOT prevent VR thumbstick movement — useSetDontMove(true)in addition- VR physics locked to 60Hz by default (needs INI tweak for 90Hz)
- Player collision uses capsule vs ragdoll in VR (vs capsule vs capsule in SSE)
- SKSE Input API returns -1 for VR controllers — use VRIK API instead
Game.ShakeCamera()is mostly inert in VR
ESP Editing Workflow
Default (creating/editing records): Use Spriggit serialize → edit YAML → deserialize Analysis and inspection: Use xeditlib for programmatic traversal and diffing
Spriggit, step by step
- Serialize:
bash tools/spriggit-cli.sh serialize --InputPath "Data/MyMod.esp" --OutputPath "<output-yaml-dir>" --GameRelease SkyrimSE --PackageName Spriggit.Yaml --PackageVersion "<installed-version>"(use the wrapper — scratch/output paths are usually deeply nested and rawspriggitthrowsUnauthorizedAccessExceptionon them;<installed-version>: see "Don't hardcode--PackageVersion" below) - Edit: Read and modify the YAML files directly
- Review: User reviews the YAML changes (human-readable diffs)
- Deserialize:
bash tools/spriggit-cli.sh deserialize --InputPath "<output-yaml-dir>" --OutputPath "Data/MyMod.esp"
Spriggit notes
spriggit-meta.jsonis required in the YAML root for deserialization- ESP header version must be 1.7 for SSE/VR (not 1.0)
--GameReleaseis only for serialize, NOT deserialize;--PackageVersionis REQUIRED when--PackageNameis set- Spriggit is pinned to 0.41.0 (
.config/dotnet-tools.json; install with--version 0.41.0; needs the .NET 10 SDK;tools/toolchain-check.shflags drift either way). Still don't hardcode `--PackageVersion`: discover the installed version withspriggit --versionand pass exactly that. - Use
-u/--ErrorOnUnknownon serialize — Spriggit silently drops unknown YAML fields otherwise (no error, no warning). Always round-trip verify a new field: deserialize → re-serialize → grep for the field.
Compiling Papyrus (Caprica)
From Data/Scripts/Source, with a BARE filename (a path fails with a namespacing Fatal Error): "<game root>/tools/Caprica/Caprica.exe" --game skyrim -f TESV_Papyrus_Flags.flg -i . -i "<base-game .psc sources>" -o "<game root>/Data/Scripts" MyScript.psc. The second -i is REQUIRED whenever the base-game sources are not in the current folder (e.g. <game root>/Data/Source/Scripts): without it any script extending a vanilla type fails with "Unable to resolve type". One -i per further import folder.
Before Any Change
Always check KNOWLEDGEBASE.md for the full context on whatever you're about to touch.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingagent/skills/skyrim-context/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/wingedguardian/skyrimvr-claude-toolkit/skyrim-context)