Cyberwise Conflicts logo

Cyberwise Conflicts

Organization
zenobi-us
cyberwise-conflicts

Cyberpunk 2077 load order and mod conflicts - why earlier in modlist.txt wins, detecting archives that are installed but contributing nothing, and visual bugs that are not conflicts at all. Use when a mod is installed and enabled but does nothing, when textures or body parts look wrong or mismatched, when two mods fight, or when reading .archive internals.

Overview

Publisherzenobi-us
Repositorydotfiles
Skill namecyberwise-conflicts
Stars
67
Forks
6
Bundled files
8
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 8 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by zenobi-us on GitHub. Read the source before you install it.

Installation

Install the Cyberwise Conflicts AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/zenobi-us/dotfiles.git /tmp/dotfiles
mkdir -p .claude/skills
cp -r /tmp/dotfiles/files/devtools/agent/bundles/developer/skills/game-dev/cyberwise-conflicts .claude/skills/cyberwise-conflicts
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Cyberwise Conflicts in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Cyberwise Conflicts on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Cyberwise Conflicts is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Cyberwise: conflicts and load order

Verified: Cyberpunk 2077 patch 2.31 - August 2026 Re-check after a patch: Confirm override direction still favours earlier entries before trusting any precedence work.

Load cyberwise alongside this for the method rules - especially confirm the mod is actually deployed and check your evidence discriminates, both of which this topic violates constantly.

Two of those are worth repeating here because getting them wrong wastes the most time in this area specifically:

  • Find out how the install is assembled first. On a virtualising setup (MO2) the game directory may look empty with the game closed, so "the archive isn't there" proves nothing.
  • Dereference internal names. Telling someone ###AAblud.archive is losing leaves them unable to find it in their manager.

The load-order rule is backwards from most guides

Earlier in archive\pc\mod\modlist.txt WINS. Popular advice says to prefix a mod with zzz_ so it "loads last and wins". That is wrong for an install that uses modlist.txt.

Whether it does is a property of the install, not of the game version: nothing in the game writes that file, so it exists only if a manager, a conflict tool or the user put it there. Look for the file before applying any of this - with no modlist.txt the game falls back to alphabetical, and a manager that sequences mods in its own UI is a third case whose specifics were not tested here. The reasoning transfers; the specifics should be checked.

Consequences that follow where the file is in play, and they matter more than the rule itself:

  • A catch-all AIO retexture belongs LATE in the list, so specific mods beat it.
  • New archives get appended to the end by whatever writes modlist.txt, which is the bottom of the priority stack. Every mod the user installs starts out losing every file it contests. Re-check conflicts after any mod change - install, update, uninstall or variant swap - however the install is assembled.
  • modlist.txt is a deliberate custom order, not a fossil and not alphabetical. Never delete it to "fall back to alphabetical".
  • # is a filename character, not a comment marker. Mods use a leading # to sort early, so a parser that strips ^# as comments silently drops real entries and then reports them as unlisted. Full detail and the sanity checks in references/load-order.md.

Never rewrite modlist.txt without a snapshot first. It is a deliberate custom order that nothing else can reconstruct, and a bad rewrite silently reorders every conflict on the install. Use the front door's helper - it prints the diff, snapshots, and hands you the undo command:

powershell
. <path-to>\cyberwise\tools\ModFileBackup.ps1
Set-ModFileContent -Path "$GameRoot\archive\pc\mod\modlist.txt" -NewText $updated -Note 'why'

Show the user the diff and get agreement on that, not on the command.

"Installed and enabled" is not "doing anything"

An archive whose files are all owned by something earlier is inert - present, enabled, and contributing nothing. This is the single most common silent failure.

Compare loss count against total file count. Losing 1 file of 60 is a cosmetic overlap. Losing 1 of 1 is a dead mod.

But the count is not the answer - the file names are. -Explain resolves the contested hashes to real paths from the vendored table, and which files a mod loses routinely inverts what the count implies. One skin mod here kept 13 of its 16 files and the three it lost were base\materials\skin.mt, the face microdetail normal, and a shader default: it wins the arithmetic and loses the material. A percentage cannot tell you that.

And the scan sees one of two precedence systems. REDmod archives live in mods\<name>\archives and are ordered by REDmod deploy, not by modlist.txt. They are scanned, but files contested across both domains are reported unranked - nothing here establishes which side wins, and naming one would be a guess wearing a verdict. On one install that was 63 files, on a load order previously reported clean. Which build to install in the first place: cyberwise/references/environment.md.

But an inert ARCHIVE does not mean an inert MOD. Before advising an uninstall, check the rest of the payload. A mod's real content may be a CET Lua file, an entSpawner registration, a .reds script or an .xl - none of which appear in an archive conflict scan. Uninstalling on archive evidence alone has destroyed working functionality.

So a BenignInert note must never say a mod can be uninstalled. Its job is to record why being inert is fine - nothing more. Three notes on one install said some version of "redundant, could be uninstalled"; every one was wrong, because each mod's real payload was scripts or a .xl the scan never looked at. One of them cost an afternoon: a companion mod whose archive carries a single shared localisation string, while the feature the user actually plays with lives in two .reds files beside it. Write the note as "inert because X, keep it", and if you genuinely believe a mod is removable, prove it by listing its whole staging folder first.

The same trap exists outside archives. If redscript fails to compile, every .reds mod on the install is silently off, with no in-game sign at all - no error, no warning, no missing-feature message. Nothing reports it, so the state persists until somebody thinks to look at the log. And a RED4ext plugin whose DLL fails to load never compiles its scripts either. Verify the thing is actually running before concluding anything from its behaviour - the compile-test recipe is in the cyberwise skill's environment.md, not this one.

Many visual bugs are not conflicts at all

A conflict checker showing zero conflicts does not mean two mods agree. Cases seen:

  • Appearance (.app) overrides. A mod can override player_base_bodies\appearances\*.app and point a body part at a different texture set entirely. No hash collision, completely different look.
  • Coverage gaps. A "skin tone" patch may only ship torso and arm textures. The legs then keep whatever the underlying body mod supplies, and the two will never match. No load order change can fix missing content.
  • Patch mods layered on other mods' namespaces. Paths like base\4k\..., base\v_textures\..., base\characters\player\femme\... are not vanilla. An archive full of them is a recolour layer over another mod, not a standalone texture, and it is useless without its base.

When a body part looks wrong, resolve which file actually supplies it before touching load order. See references/archives.md.

And before you promise a reorder, check the problem is one reordering can solve. Three situations look identical in a conflict report: a lost fight (fixable), a coverage gap where only one mod ships the file at all (not fixable - no ordering conjures content), and two mods claiming the same single resource where the user wants both (impossible; say so instead of shuffling). Afterwards, re-scan for newly inert archives - promoting one mod can silently kill a third party nobody mentioned. references/load-order.md.

Tools

toolwhat it does
tools/Repair-LoadOrder.ps1audits modlist.txt and the archives against each other, and can repair the order
tools/Resolve-ResourcePath.ps1turns an archive hash into a real file path, and back
tools/Find-QuestConflicts.ps1which mods rewrote a quest's files, and which of them is actually live
powershell
.\tools\Repair-LoadOrder.ps1              # report only
.\tools\Repair-LoadOrder.ps1 -Fix         # reorder, and place unlisted archives
.\tools\Repair-LoadOrder.ps1 -SkipScan    # inventory and rules only, no index reads
.\tools\Repair-LoadOrder.ps1 -Explain 'X.archive'   # which FILES it loses, and to whom

Three independent checks: inventory (entries with no file, archives with no entry), precedence against standing rules, and a collision scan that reads every archive index and flags inert archives - every file they carry owned by something earlier, so the mod is installed, enabled and contributing nothing. It locates the game from the storefront registry; -ModDir overrides. Exit 0 clean, 1 issues.

Run it after any mod change. Whatever rewrites modlist.txt appends new archives at the end, which under earlier-wins is the bottom of the stack - so every newly installed mod starts out losing every file it contests.

It ships with no precedence rules, deliberately. Rules are one install's settled conflicts; applying somebody else's would reorder mods a user does not have. Theirs live in a data file beside their game:

<game>\_loadorder\loadorder-rules.psd1
powershell
@{
    Rules = @(
        @{ Before = 'specific_retex.archive'
           After  = 'catch_all_aio.archive'
           Why    = 'an AIO should lose to anything specific' }

        # Either side may be a WILDCARD (* or ?), matched against the archives
        # present and expanded to one rule per match. Use it for any mod whose
        # archive is RENAMED when you switch variant - a skin tone, a hair
        # colour - so the rule survives the swap:
        @{ Before = 'SkinTone_BODY_*.archive'
           After  = 'catch_all_aio.archive'
           Why    = 'whichever tone is installed still beats the AIO' }
    )
    BenignInert      = @{ 'some.archive' = 'why being inert is fine here' }
    RuntimeGenerated = @{ 'other.archive' = 'why it appears and vanishes' }
}

An exact-name rule stops applying the moment the mod renames its archive, and it fails SILENTLY - nothing errors, the new archive is merely unlisted, and unlisted sorts LAST. A skin texture that has to beat a catch-all ends up losing to it, and the only symptom is that the character looks wrong. That is what wildcards are for. Two guards come with them: a pattern matching nothing says so rather than passing quietly, and a pattern that would pair more than 200 archives is refused as a typo.

Add a rule whenever a conflict is settled by hand, or the next redeploy undoes the decision silently. The two suppression maps stop known-harmless cases counting as problems - the script ships only the entries that are facts about public mods, not preferences.

A quest that stopped advancing

powershell
tools\Find-QuestConflicts.ps1 -Quest sq026 -GameRoot '<path>'

This is not softlock detection and must not be offered as one. A stuck quest and a quest legitimately waiting look identical from outside - most of the journal is waiting on an in-game day, a phone call, or a fact set somewhere else. Same reason automated hang detection fails (cyberwise-crashes), with more force.

What it answers is the question you have once you are stuck: which mods rewrote this quest, and which of them is winning. The finding to look for is a contested resource - two mods replacing the same .questphase. Quest edits are not additive: under earlier-wins one version is in the game and the other is absent, so a mod's fix for the exact bug being hit can be the half that lost.

A real example from one install, on the Judy questline:

base\quest\side_quests\sq026\phases\sq026.questphase
  WINS   LiveALittleTimers.archive (line 4)
  loses  ##TaB_Quest.archive (line 563)

Owning a quest file is not guilt - plenty of mods rewrite quests correctly. It narrows twenty suspects to two, and the test is to park the winner and reload an earlier save.

Quests break from two other directions this tool cannot see: .xl quest intercepts, which change the graph without owning a file (intercept: true entries only execute on a fresh run of that quest, which is why they surface on a new game and not on an old save), and redscript hooks on quest classes. Rule them in or out before concluding an archive is responsible.

Reference material

filecovers
references/load-order.mdwhat to run and in what order: checking which ordering model applies, the scan, the snapshot rule
references/archives.mdthe hash-resolution and WolvenKit CLI invocations

Both are now mostly pointers. The knowledge they used to carry lives in the base wiki - wiki/ in the Cyberwise repo, described by cyberwise-wiki - under /conflicts, because a skill file is instructions and a wiki article is knowledge, and those rot at different rates.

articlecovers
/conflicts/earlier-wins-and-nothing-in-the-game-writes-the-listthe two ordering models, and a test that can actually discriminate between them
/conflicts/every-new-archive-starts-lastthe append trap, variant swaps breaking exact-name rules silently, and the checkbox that deletes modlist.txt
/conflicts/modlist-has-no-comment-syntaxthe # parsing trap, its 60 fabricated faults, and the sanity checks
/conflicts/an-entry-and-a-file-can-disagreestale entries versus unlisted archives, and which of the two to fix
/conflicts/an-archive-that-contributes-nothingdetecting inert archives, the benign cases, and why an inert archive is not an inert mod
/conflicts/what-reordering-can-and-cannot-fixlost fight, coverage gap, mutually exclusive claims
/conflicts/a-precedence-change-creates-casualtieswhy to diff the inert list after any reorder
/conflicts/visual-bugs-that-are-not-conflictsappearance overrides, coverage gaps, patch layers over another mod's namespace
/conflicts/rdar-index-is-plain-dataRDAR index format, FNV1a-64 hashing, and the two numeric traps
/conflicts/resolving-a-hash-to-a-pathdictionary coverage, and why a miss is a finding rather than a gap
/conflicts/editing-serialized-red4-jsonwhat survives a WolvenKit JSON round-trip and what does not
/conflicts/scaling-a-placed-propthe four edits resizing a prop actually takes
/conflicts/indexall of the above, grouped

To inventory what is actually installed before diagnosing, cyberwise-reports carries the manifest tool.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Cyberwise Conflicts AI skill do?

Cyberpunk 2077 load order and mod conflicts - why earlier in modlist.txt wins, detecting archives that are installed but contributing nothing, and visual bugs that are not conflicts at all. Use when a mod is installed and enabled but does nothing, when textures or body parts look wrong or mismatched, when two mods fight, or when reading .archive internals.

Why use Cyberwise Conflicts on TypingMind?

Because you install it once and use it with any model. Cyberwise Conflicts is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Cyberwise Conflicts in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/zenobi-us/dotfiles/tree/master/files/devtools/agent/bundles/developer/skills/game-dev/cyberwise-conflicts. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Cyberwise Conflicts?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Cyberwise Conflicts?

As many as you like. As long as a model supports skills, you can use Cyberwise Conflicts with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Cyberwise Conflicts AI skill free?

Yes. It is published on GitHub by zenobi-us under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇