Skip to content
Back to skills

Tool Output Awareness

ASecurity

Use when a Skyrim patch/conflict analysis may touch generated output from tools such as Reqtificator, ParallaxGen, DynDOLOD, Synthesis, TexGen, xLODGen, or NPC Plugin Chooser.

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 3, 2026
ai-agentsrustgodebugginggit

Security analysis

A100/100

Scanned September 3, 2026

npx -y skills add ShugokiFable/Ultimate-AI-Starter-Bundle --skill tool-output-awareness --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tool Output Awareness?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tool Output Awareness
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/shugokifable-tool-output-awareness/badge)](https://www.skillsdirectory.com/skills/shugokifable-tool-output-awareness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tool-output-awareness
description: Use when a Skyrim patch/conflict analysis may touch generated output from tools such as Reqtificator, ParallaxGen, DynDOLOD, Synthesis, TexGen, xLODGen, or NPC Plugin Chooser.
---

# Tool Output Awareness

## Overview

Several tools in a Skyrim build don't ship records a human authored — they **generate** them, and the
user **re-runs the tool**, overwriting the output every time. Reqtificator, ParallaxGen, DynDOLOD,
Synthesis, TexGen, xLODGen and NPC Plugin Chooser 2 are all in this class. Their plugins (and the meshes /
textures they emit) are **derived artifacts**, not design intent.

This is an operational guardrail, not a procedure: it changes how you treat the load-order winner across
every read, conflict pull, and patch you author. The failure it prevents is concrete and houseCARL hits it
repeatedly — it reads the true load-order winner, sees a generated plugin sitting on top, and **forwards
that generated data into the patch it creates**. The next time the user runs the tool, that frozen copy is
either stale, a duplicate the tool fights, or — for path-bearing data like ParallaxGen's rewritten mesh and
texture paths — simply wrong, because the generator assigns different paths on the next run.

## The core rule

Two parts, and they apply at **both** the record layer (xEdit / plugin records) and the file layer (loose
meshes and textures in the mod folder):

1. **Never copy a tool output's changes into a patch you create — ever.** Not its records, not its
   computed field values, not a repoint to a path it generated. This holds even while debugging: a fix that
   bakes regenerated data into a hand patch is wiped or contradicted on the next tool run.
2. **Outside debugging, don't even base your work on a tool output.** When you create a patch, author a new
   mod, or study how a mod works, look **past** the generated overrides to the real authored records
   underneath. Reading a generated plugin to learn a mod's design tells you what the *tool* produced, not
   what the *mod* does.

The reason both hold: tool outputs sit **on top of** (or are regenerated from) the authored load order. The
generator runs again and re-derives its result. Author against the **source** that feeds the generator and
let it regenerate; freeze nothing derived.

## Recognize a tool output

Identify by the most reliable signal available, in this order. The first two are unambiguous; the third
needs the false-positive check below.

**1 — Fixed plugin filenames (bulletproof).** The plugin name *is* the signature, whatever mod folder holds
it:

| Generator | Output plugin(s) |
|---|---|
| Reqtificator (Requiem) | `Requiem for the Indifferent.esp` |
| ParallaxGen | `PGPatcher.esp`, `PG_1.esp` |
| DynDOLOD | `DynDOLOD.esm`, `DynDOLOD.esp`, `Occlusion.esp` |

**2 — Generated marker files (bulletproof).** A file the tool writes into its output mod folder identifies
the mod no matter what its plugin is named:

- **NPC Plugin Chooser 2** → the mod folder contains a generated **`NPC_Token.json`**. Its plugin can be
  named anything (e.g. an `… NPC Appearances.esp`) — go by the token, not the name.
- **ParallaxGen** also drops **`ParallaxGen_Diff.json`** in its output folder (confirms it beyond the fixed
  plugin names; this folder also holds the regenerated `meshes\` / `textures\`).

**3 — The generated output folder (needs the false-positive check).** These have no fixed plugin name; the
output is the **mod directory the tool wrote into**, conventionally named "… Output":

- **Synthesis** → the Synthesis output mod. Treat **every plugin inside it** as generated. Plugin names are
  pipeline-configured and often do **not** contain "Synthesis" (a real output folder can hold, e.g., a
  `… High Poly Head Patcher.esp`) — identify the **folder**, then the whole mod, not by per-plugin name.
- **TexGen** → output folder whose name contains "texgen"; **textures only, no plugin** (pure file layer).
- **xLODGen** → output folder whose name contains "xlodgen"; **meshes + textures, no plugin** (pure file
  layer).

### Not a tool output (false positives to rule out)

- **Resource / fixes / add-on / patch mods that merely carry a tool's name in the folder** are **inputs**
  the tool consumes, not its output: e.g. `DynDOLOD 3 Resources`, `DynDOLOD DLL NG and Scripts`,
  `DynDOLOD TexGen Fixes (…)`, a `… DynDOLOD Add-On`, or a downloaded `… xEdit-Synthesis Patch`. The
  decisive test: does the mod hold the generator's **own plugin / marker**, or is it the **directory the
  tool wrote into**? If neither, it's an input — patch it like any normal mod.
- **"It was downloaded / has a Nexus mod id" does NOT mean "not a tool output."** Modlists routinely
  pre-generate these outputs and redistribute them, so the output mod can carry a real Nexus id and install
  file. `meta.ini` install source is therefore **not** a reliable discriminator — trust the fixed plugin
  filenames and marker files instead.

## Authoring vs debugging: the branch that decides everything

Ask one question before you read or write anything: **am I debugging an in-game problem, or authoring?**

- **Debugging an in-game issue** (a CTD, a visual bug, a wrong stat, a dark face, a LOD seam, a purple
  mesh): a tool output is a legitimate — often the *prime* — suspect. **Read it freely.** That's the only
  context where you reference one. But still obey rule 1: don't "fix" it by baking corrected data into a
  hand patch the next tool run will discard. Fix the **source mod or the tool's configuration** and have
  the user re-run the tool; if a true standalone override is genuinely required, say plainly that it must be
  re-applied (or the tool re-run) after every regeneration.
- **Authoring** — creating a patch, building a new mod, or learning how a mod works: treat tool outputs as
  **transparent**. Don't read them as your basis, don't forward them. Look past them (next section).

## Patch against the source, not the tool output

When the load-order winner of a record you need to patch is a tool output, do **not** build on that winner.
Pull the conflict tree and look underneath:

1. Read with the conflict tree — `housecarl_read_record` or `housecarl_batch_record_detail` with
   `conflict_tree: true`, or `housecarl_cross_plugin_query` for who-touches-what.
2. **Classify each override.** Mark the tool-output overrides (by the signals above).
3. **Base your patch on the highest NON-tool-output override** — the real authored winner — and its
   masters. That record carries the design intent; the generator re-stacks its derived result on top when
   it next runs, incorporating your change rather than being frozen by it.
4. Author your edit (`housecarl_set_field`, `housecarl_bulk_apply`, `housecarl_create_record`) against that
   source, and re-run the generator as the final build step.

**Requiem is the textbook case.** `Requiem for the Indifferent.esp` is the Reqtificator's merged output, and
some lists also re-wrap per-mod Reqtificator results into renamed patches (see "Modlist-specific renames").
Read it only to learn the *target* values Requiem assigns; author your override against the **source**
record, then re-run the Reqtificator — it leaves a correct direct override alone or rebalances it. Copying
its values into your patch freezes Requiem's derived numbers and fights the next Reqtificator run.

## Assets: the same rule at the file layer

ParallaxGen, TexGen, xLODGen, DynDOLOD and NPC Plugin Chooser 2 regenerate **meshes and textures**, not just
records. The same guardrail applies to `housecarl_place_asset` / `housecarl_bulk_place_asset` /
`housecarl_asset_status` and any NIF path work:

- Don't treat a **generated** mesh/texture as the source of truth to copy or forward into a new mod.
- Don't **repoint a record to a generated asset path** — ParallaxGen reassigns those paths every run, so the
  link breaks on regeneration.
- Fix the **source** mesh/texture in the originating mod, or the tool's settings, then re-run the tool. When
  debugging a generated asset (e.g. a purple parallax mesh, a dark NPC-merge facegen), read it to diagnose,
  but route the fix to the source — see `facegen-diagnostics`.

## Modlist-specific renames

Lists rename and re-wrap generators' output. The three "folder-named" tools emit user-chosen names, and a
list may fold Reqtificator results into custom-named per-mod patches or name its NPC-Chooser output anything.
The **principle** is fixed — a plugin that carries a generator's derived data is a tool output for that data,
however it's named — but the specific names are a property of the modlist, not of this skill. Learn them from
the modlist's own `CLAUDE.md` / project memory, where modlist facts belong, rather than hardcoding them here.
When a plugin looks like it carries generated data but you can't confirm it against the signals above, say so
and ask — don't silently treat it as (or as not) a tool output.

## Common mistakes

- **Forwarding the load-order winner without checking what it is.** The single highest-frequency error: the
  winner is `DynDOLOD.esp` / `Requiem for the Indifferent.esp` / `PGPatcher.esp`, and its data goes straight
  into the new patch. Always classify the winner before you forward it.
- **Reading a tool output to learn how a mod works.** RFTI / Synthesis show you the *generated* version of a
  mod, not its design. Study the mod's own records; the generated override is derived noise for that purpose.
- **Trusting plugin names for Synthesis.** Synthesis plugins are named by the pipeline and frequently lack
  "Synthesis" — identify the output **folder** and treat all its plugins as generated.
- **Treating a "… Resources" / "… Fixes" / "… Add-On" mod as the tool's output.** Those are inputs. Patch
  them normally.
- **Using "it has a Nexus id" to rule out tool-output status.** Pre-generated outputs are redistributed with
  real Nexus metadata; go by the plugin filename / marker file.
- **"Fixing" a generated asset by baking it into a patch or new mod.** The next tool run ignores it. Fix the
  source or the tool config and regenerate.

## Before you ship a patch

A quick self-check that catches the failure mode:

- For every record in the patch: is its data sourced from a **tool output**? If yes, re-base it on the real
  authored record and confirm the generator will re-apply on the next run.
- Does any field hold a **generated path** (a ParallaxGen mesh/texture path, a DynDOLOD-injected reference)?
  If yes, remove it — fix the source and regenerate instead.
- Did the patch gain a **tool-output plugin as a master** (e.g. `Requiem for the Indifferent.esp`,
  `DynDOLOD.esp`)? That's a strong signal you forwarded derived data — re-base on the source master.

## Real example

A `STAT` for a rock wins the load order in `PGPatcher.esp` (ParallaxGen), which rewrote its model path to a
generated parallax mesh under the PG output folder. You're asked to patch that rock's material/keyword.

- **Wrong:** `housecarl_read_record` returns the `PGPatcher.esp` winner; you forward it, keeping the
  generated `meshes\…\rock_parallax.nif` path. Next ParallaxGen run regenerates with a different path → your
  patch points at a stale/incorrect mesh, and you've also taken `PGPatcher.esp` as a master.
- **Right:** pull `conflict_tree: true`, see `PGPatcher.esp` on top and the real authored `STAT` (the rock
  mod, or its master) beneath. Patch the keyword against **that** source record — leave the model path alone.
  Re-run ParallaxGen as the build step; it re-applies its mesh edit on top of your now-correct keyword. No
  generated data is frozen into the patch.

## Notes

- The debugging exception is about **reading**, not fixing: a tool output may be the cause, so inspect it —
  but the fix still lands on the source / config + a regeneration, never as frozen output in a patch.
- This guardrail composes with `facegen-diagnostics` — asset-layer fixes (e.g. a dark NPC-merge facegen)
  route to the source, not into a frozen patch.
- Generated marker files seen in practice — `NPC_Token.json` (NPC Plugin Chooser 2) and
  `ParallaxGen_Diff.json` (ParallaxGen) — are the most robust folder-level signals when a plugin name is
  ambiguous.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.