Audits conflicts in Bethesda plugin sets: determines winning overrides, conflict labels (no_conflict/itpo/itm/minor/breaking), reference chains, and whether a load order is safe to ship.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bgs-modding-superpowers:xedit-conflict-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Inherits the hub `xedit-automation` skill. Do not restate routing or anti-patterns here; this skill is the W2 workflow only.
Inherits the hub xedit-automation skill. Do not restate routing or anti-patterns here; this skill is the W2 workflow only.
For a record or a plugin in scope, produce a verdict: no_conflict | itpo | itm | minor | breaking, plus the winning override, the override chain, and a list of plugins that reference the record. Output is a concise summary, not the raw daemon round-trips.
Use these MCP intent tools (do not drop to xedit_call unless an intent tool does not fit):
xedit_session (always first; once per conversation).xedit_list_capabilities (once per conversation; sanity-check drift).xedit_find_record (locate the record(s) you want to audit).xedit_inspect_conflicts (the verdict tool).xedit_read_record (when you need to see the actual conflicting field values).xedit_call for r6-only daemon fields that no intent wrapper exposes yet:
records.references, records.conflict_status, and records.apply_filter.If the conflict is broad (many records across many plugins), do not loop through them one by one in the orchestrator — delegate to a read-only investigator sub-agent (see Hub skill, "Sub-agent delegation recipes").
Check xedit_list_capabilities and branch on system.capabilities.supports.*.
Use these r6+ one-call forms when available; old child-by-child and
record-by-record loops remain the fallback for pre-r6 daemons.
supports.referencesRecursive)For CELL/WRLD/DIAL/QUST targets, prefer:
xedit_call({
command: "records.references",
args: { file, formId, recursive: true }
})
recursive: true unions outgoing references across ChildGroup descendants, so
one call replaces the old "list every ChildGroup child, then reference-probe each
child" loop. Deep reference: xedit.references-recursive.v1.
supports.conflictStatusChildGroup)When records.conflict_status returns result.childGroup, read that block
before expanding individual records. It summarizes per-signature child-group
state as { total, conflicting } and includes a capped conflictingHits array
(cap 20) for the first concrete children to inspect.
This is the broad-audit starting point for CELL/WRLD/DIAL/QUST conflicts:
summarize the childGroup block, then deep-read only conflictingHits or a
small representative sample. Deep reference: xedit.conflict-status-childgroup.v1.
apply_filter regex + parentFormId (supports.applyFilterExtensions)Use records.apply_filter to collapse broad candidate discovery into a single
server-side query when the daemon advertises supports.applyFilterExtensions
(or the narrower .regex / .multiPattern subkeys, if exposed separately).
editorIdRegex, displayNameRegex, fullNameRegex,
baseEditorIdRegex, baseDisplayNameRegex.System.RegularExpressions.TRegEx.RegexSlotsExhausted response counter so saturation is distinguishable from
no matches.*Pattern and *Regex field may be a scalar string or
an array with OR semantics; max 32 entries.parentFormId: single-call ancestor filtering, e.g. "all REFRs whose
container chain contains CELL X" without building your own parent walk.Deep reference: xedit.apply-filter-extensions.v1.
xedit_session({}). Confirm gameMode, consentEnabled not needed here (read-only), and loadOrderSize matches expectation.xedit_list_capabilities({}). Read the drift.onlyInLive and drift.onlyInDigest arrays plus the r6 support keys. If a target command you intend to use is missing from live, stop and tell the user.xedit_find_record({ file, formId }).xedit_find_record({ editorId }).xedit_call({ command: "records.apply_filter", args: { file?, signature?, parentFormId?, editorIdRegex?, ... } }).xedit_call({ command: "records.list", args: { file, signature? } }), then iterate or delegate if large.xedit_inspect_conflicts({ file, formId }). For broad CELL/WRLD/DIAL/QUST targets on r6+, call records.conflict_status through xedit_call if you need the raw result.childGroup summary; expand only conflictingHits or a representative sample instead of probing every child.xedit_call({ command: "records.references", args: { file, formId, recursive: true } }) gives a ChildGroup-wide outgoing-reference union. On pre-r6, fall back to the old child walk or delegate the loop.verdict field from the intent tool or map the raw records.conflict_status result with the same W2 labels:
no_conflict → safe.itpo / itm → likely safe; consider cleaning.minor → human review.breaking → halt and surface.xedit_read_record({ file, formId }). Compare record.fields vs winningOverride vs baseRecord. Identify the diverging fields.[file, formId, editorId/signature, verdict, winningFile, referencerCount, childGroupConflicts]. Surface only the breaking/minor verdicts to the user by default; the rest are appendix..opencode/artifacts/xedit-mcp/audit/YYYY-MM-DD.jsonl) contains one entry per MCP tool call you made.If you cannot meet these for a record, mark it unknown in the report and explain why — do not guess.
xedit_call records.conflict_status directly when xedit_inspect_conflicts would do it with the verdict label already mapped; use raw records.conflict_status only when you need r6 response blocks such as result.childGroup.no_conflict as proof of safety without reading at least one representative record.recursive, childGroup, apply_filter, or delegation would collapse the work.xedit_session first; downstream tools will refuse with state_violation.LOAD001 will fire — load it via the session first.This workflow is a strong candidate for read-only sub-agent delegation in two cases:
When delegating, include this skill and the hub skill in the sub-agent's prompt and provide the scope + budget.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub bb-84c/bgs-modding-superpowers --plugin bgs-modding-superpowers