Resolve this installation
Read INSTALLATION.json beside this skill before invoking Forge. It contains the
authoritative root, shared Python executable, CLI argv, and MCP argv for this
machine. Prefer those exact arrays over a guessed installation path, a bare
python, or a provider-specific PYTHONPATH.
If the descriptor is unavailable, resolve Forge in this order:
SKYRIM_FORGE_ROOT;forgeonPATH;- an explicit path supplied by the user.
Never assume a drive letter or reconstruct the application elsewhere.
Never treat Documents\SkyrimForge or Documents\Skyrim Forge as the live
product. The bundle-managed live install is the versionless Skyrim-Forge
directory named by SKYRIM_FORGE_ROOT; upgrades replace the application source
in place while preserving the managed workspace/runtime state. Do not reconstruct
a version-stamped install path.
Forge 6 ships in the same repository as this bundle, so there is no cross-product
version handshake. Run forge doctor (or the exact descriptor CLI argv plus
doctor) and require result: PASS and read_only_ready: true before major
work. Claude Code 2026-07-28 still requires tools/call to include
resultType: "complete". Do not add Forge as a new Grok MCP server when
Grok already sits on the 8-running-server cliff (7 configured, or 6 while
mcp-search still loads).
Venv health (Windows) — the provider-runtime trap
Forge's MCP server runs from <root>/.venv/Scripts/python.exe -m skyrim_forge mcp.
If that venv was created from a provider runtime cache python (e.g.
~/.cache/codex-runtimes/.../python.exe), it dies the moment the runtime cache is
deleted or that provider is uninstalled. Symptom: MCP clients (Grok, Claude Code,
Codex) hang at startup waiting on a server that cannot boot; the venv python
prints No Python at '<runtime cache path>'.
Check: cat <root>/.venv/pyvenv.cfg — if home = points into a cache dir, repair:
py -3.12 -m venv "<root>/.venv"
"<root>/.venv/Scripts/python.exe" -m pip install "<root>"
Forge has zero external dependencies and a local build backend, so this is fast and offline. Verify the MCP server answers (must return JSON, not hang):
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}\n' | "<root>/.venv/Scripts/python.exe" -m skyrim_forge mcp
Then restart the MCP client. Never build the venv from a provider runtime
python — use a stable interpreter (system Python, py -3.x, or uv).
Use Forge inspection and typed jobs before inventing one-off scripts. Never launch xEdit, Creation Kit, LOOT, or Wrye Bash and leave the user to click. Use an Automation Fabric job or report that the required adapter is unavailable.
Hard rules:
- Query
forge capabilitiesbefore promising a subsystem. Adapter-only and worker-contract capabilities are not bundled implementation. - Use
papyrus-analyzebeforepapyrus-compile; compilation requires a hash-pinned Bethesda compiler, flags, imports, fresh PEX output and the generated build manifest. Static optimization warnings are never authority to change semantics. - Never send arbitrary shell commands through Forge.
- Never write to live Skyrim Data, Vortex staging, MO2 mods, Overwrite, profiles, or saves.
- Treat
read_only_readyas a healthy inspection state. - Require
plugin_write_readyfor typed plugin output. - Require
xedit_automation_readyfor xEdit jobs. - Use
raw_form_id_hex,local_form_id_hex,origin_plugin, andform_keyexactly. Never label a raw file FormID as a runtime load-order FormID. - Use
automation-validatebeforeautomation-run. - Set approval only after reviewing operation, inputs, output ownership, tool hash, and expected evidence.
- A missing completion marker is not success.
- Tool disagreement means stop and classify.
- xEdit evidence is not Skyrim runtime evidence.
- Creation Kit output is not visual validation.
- Treat framework runtime logs as stronger evidence than a static lint rule when the log proves the exact row parsed and distributed. Stop and classify the disagreement instead of silently rewriting working syntax.
- SPID actor-level and skill expressions are distinct.
25/255,0(55/255)is a valid actor range plus skill range;0(25)is not a valid min/max skill expression. - For FOMOD work, use
fomod-scaffold,fomod-plan-validate,fomod-simulate,fomod-build, andfomod-validate. Do not hand-write ModuleConfig XML when the typed plan can represent the installer. - Require strict FOMOD payload coverage and branch simulation before packaging. Preserve all previous installer choices unless their removal is documented and approved.
- Never generate or execute arbitrary C# FOMOD scripts. Standard typed XML support is the safe boundary.
For a release, prefer this chain:
framework lint
plugin/header and record inspection
xEdit fixed-script check when configured
Papyrus freshness verification
asset/release-tree validation
FOMOD plan validation, branch simulation, and generated-tree validation when applicable
semantic diff
package to a new version
report remaining in-game tests
Player-facing quality gate
When a mod has a menu, HUD, preview, visual asset, or interactive workflow, load skyrim-mod-development (or
skyrim-mod-reworking) plus visual-verification. Require a real vertical slice with the final visual system, inspect the rendered
pixels, and test supported inputs, UI scales, long lists, and empty/error states. Forge's structural validators cannot prove that a
screen is readable, attractive, responsive, or pleasant to use.
Public and Nexus Mods releases
Treat any user request containing shareable, public release, publish, Nexus, upload, release page, or equivalent intent as a publication workflow, not ordinary ZIP creation.
Required sequence:
- Run
forge nexus-policy-statusand review the current official Nexus Mods policy pages. Do not scrape Nexus Mods or infer permission settings from cached snippets. - Run
forge nexus-scaffoldwhen no publication plan exists. - Inventory every bundled file and replace catch-all ownership entries with accurate rights records.
- Obtain evidence for third-party permissions. Credit is never permission. Never invent, paraphrase, or fabricate an author's consent.
- Record dependencies that are required but not redistributed.
- Verify game terms, project/asset licences, collaborator credits, Donation Points compatibility, executable/network behaviour, adult-content classification, claim evidence, and AI assistance.
- The uploader must review and accept the attestation. An AI must never sign it or set
responsibility_accepted=truewithout the user's explicit confirmation. - Load
skyrim-nexus-publishingandvisual-verification. Produce the final BBCode, crop-safe hero, proof-oriented gallery/video, captions, alt text and media-rights inventory from the exact release. Do not substitute concept/generated art for gameplay evidence. - Run
forge nexus-auditand requireshare_ready: true. A normal ZIP, successful build, lint pass or xEdit pass is never sufficient for public sharing. - Run
forge nexus-buildfor the final tree, public rights documents, private audit and ZIP. - Still require one real Vortex and MO2 installation test before publication.
A normal release-build is not sufficient when public sharing is intended. Use release-build --target nexus --publication-plan ... or nexus-build.
Never call a mod Nexus-compliant merely because its files compile or lint. The rights gate, content classification, truthful mod-page claims, uploader attestation and current policy review are separate mandatory evidence.
Verified external-tool selection
- Before inventing an archive, mesh, Papyrus, Synthesis, LOD, animation, or asset-processing implementation, call
forge tool-resolve <capability>. - Use only the selected configured executable with a matching SHA-256 pin and exact catalog capability.
- Scan nested tool folders and ZIPs with
forge tool-scan; tools such asESLifier/bsarch/BSArch.exeare valid discoveries. - Use
forge tool-importfor permitted local tool-vault copies orforge tool-configurefor configure-only legal installations. Explicit approval is mandatory. - Never bundle the local tool vault or third-party executables into Forge, GitHub, FOMOD, or Nexus outputs. Local possession is not redistribution permission.
- Never substitute a GUI for a CLI.
Synthesis.exeis notSynthesis.Bethesda.CLI.exe. - Use BSArch for
.bsa/.ba2work when thearchive.bsa.*capability resolves. Use the official Bethesda Papyrus compiler for publication builds whenpapyrus.compile.officialresolves. Use Champollion only for recovery/analysis, never as proof of original source ownership. - When no eligible real tool resolves, stop and report the missing adapter instead of generating an unverified replacement.
Portable discovery
- Read
INSTALLATION.jsonbeside this skill when present (per-machine; do not ship secrets). - Else
$env:SKYRIM_FORGE_ROOT. - Else
forgeon PATH. - Else user path.
- Else, when working from the bundle, run
TOOLS/Install-SkyrimForge.ps1; do not invent a manual extraction path.
After a bundle-managed install, missing or unhealthy Forge is a failed installation state, not a successful optional skip. Outside the bundle, report Forge as unavailable rather than inventing paths.