Ein Spiele-Mod-Plugin von innen gelesen: SessionStart-Hook, Cloud-Key und 242 Feldnotizen
Seit Ende September laufen die Clips durch die Feeds: Skate-Physik in Call of Duty Modern Warfare 2, Minecraft in Elden Ring, Spider-Man in Batman Arkham Knight. VGC hat diese Beispiele gesammelt, der Link steht am Ende. Dahinter steckt selten Magie und meist ein Werkzeugkasten, der universal-modder. Das ist ein Plugin für Claude Code, Codex, Cursor, VS Code und Gemini CLI, plus eine CLI namens um und eine Wissensbasis aus Feldnotizen. Ich wollte wissen, was sich jemand damit ins Haus holt, und habe den Klon gelesen, bevor irgendetwas installiert wird. Stand 14.10.2026, Branch main, Commit 201569a, 644 Dateien.
Dabei sind vier Stellen herausgekommen, die wir bei jedem Agenten-Plugin offen aufschlagen sollten: ein Hook, ein Cloud-Kanal, eine Scan-Tiefe und eine Verbotsliste.
Was das Manifest beim Sitzungsstart auslöst
Die erste Fundstelle sitzt in .claude/settings.json. Dort registriert das Plugin ein Skript für das Ereignis SessionStart mit dem Matcher startup|resume|clear|compact. Beim Starten, beim Fortsetzen und nach jeder Kontextkompression läuft damit eine Shell-Datei aus dem Plugin: hooks/add-to-path.sh.
Inhaltlich ist die Datei sauber. Sie prüft, ob der Wurzelweg gesetzt ist, rechnet unter Git Bash einen Windows-Pfad um, beendet sich mit 0, wenn bin/um nicht ausführbar ist, und schreibt ihre PATH-Zeile nur einmal, weil sie vorher nach ihrem Marker sucht.
Der Inhalt ist hier zweitrangig. Ein Plugin bringt seinen Hook selbst mit, und dieser Hook läuft in jedem Projektordner, in dem das Plugin eingeschaltet ist. Eine README sagt darüber nichts. Das Plugin-Format und seine Rechte haben wir vor gut einer Woche schon einmal durchgemessen, samt dem Unterschied zwischen Hook, Skill und MCP-Server: Claude Mods: Was das neue Plugin-Format in Claude Code wirklich darf.
Was beim ersten generierten Bild das Haus verlässt
Die zweite Fundstelle taucht in der Debatte über diese Clips bislang nicht auf. Das Plugin konfiguriert beim Installieren einen Cloud-Kanal vor, und zwar in fünf Dateien gleichzeitig: .mcp.json, .codex/config.toml, .cursor/mcp.json, .vscode/mcp.json und gemini-extension.json. Alle fünf enthalten dieselbe Adresse https://mcp.fal.ai/mcp mit dem Header Authorization: Bearer ${FAL_KEY}.
Die Kommandozeile macht dasselbe mit REST. In um/fal.py steht in der Modul-Dokumentation der Satz „Local files passed as inputs are uploaded to fal storage first." Umgesetzt ist das in _upload_cdn(): erst ein kurzlebiger Token von https://rest.fal.ai/v1/storage/auth/token, dann ein POST der nackten Datei nach https://v3.fal.media/files/upload, als User-Agent: universal-modder. Zurück kommt eine access_url. Scheitert der Upload, werden Dateien unter 8 MiB als base64-Data-URI im Request mitgeschickt. Jeder Aufruf landet mit Endpoint, Eingaben, Request-ID und Seed in fal_manifest.jsonl, damit sich jedes Asset nachbauen lässt.
Das ist handwerklich gut und nachvollziehbar dokumentiert, und es ist Cloud-Arbeit. Die lokale Ausweichlane heißt um comfy und läuft über ein ComfyUI auf dem eigenen Rechner, ohne Audio, ohne 3D, ohne Video. Der Clip, den wir uns angesehen haben, zeichnet seinen Creeper mit selbst geschriebenem Code und erwähnt dabei weder fal noch einen Key. Für den nachgebauten Test ist das die lokale Lane, und beim ersten Audio-Hinweis oder 3D-Bauteil stehen wir plötzlich ohne konfigurierte Lane da.
Was die Suche über den Rechner erfährt
um scan --list sammelt erst einmal eine Menge über den benutzten Rechner. Die Implementierung liest die Windows-Registry nach dem Steam-Pfad ab, parst libraryfolders.vdf und die App-Manifeste, ergänzt Epic- und Xbox-Installationen und schaut in die Benutzerordner inklusive der häufig nach OneDrive umgeleiteten Documents. Pro Spiel werden Engine, Scripting-Laufzeit, Anti-Cheat, vorhandene Mod-Loader und die Speicherstände erkannt.
Dazu eine Entlastung: um/scan.py enthält keine Netzwerkaufrufe, die Erkennung bleibt auf der Maschine. Dieselbe Datei listet allerdings alle Speicherstände auf, und ein Agent, der später eine Mod-Datei schreiben soll, kennt damit den Pfad zu genau diesen Ständen. Im Clip ist die Backup-Frage deshalb berechtigt, und um backup existiert auch, mit Zeitstempel und Manifest im Zip.
Was das Plugin sich selbst verbietet
Die vierte Schicht ist eine Verbotsliste, und die steht in references/safety.md. Erlaubt sind Einzelspieler oder selbst betriebene Server. Verweigert werden Aimbots, ESP und Wallhacks, Speed- und Teleport-Hacks, Recoil-Skripte und Paketmanipulation, im Originalton „whatever the framing". Anti-Cheat im Kernel oder im User-Modus ist dort als Stopp-Schild für Code-Injektion definiert, die Datei nennt EasyAntiCheat, BattlEye, Vanguard, EA Javelin, Ricochet, ACE, nProtect, XIGNCODE und mhyprot beim Namen. Anti-Cheat deaktivieren, Hardware-IDs fälschen, DRM oder Eigentumsprüfungen umbauen steht auf der Never-Liste. Die Analyse der eigenen legal installierten Kopie ist erlaubt, ein Dump bleibt außerhalb jedes Repositories.
CONTRIBUTING.md zieht dieselbe Linie für die Wissensbasis: keine Spieldateien, keine ausgepackten Assets, keine ROMs, keine Dumps dekompilierten Codes, keine Secrets. Und um publish check hält sich nicht mit Appellen auf, sondern prüft mit einer Regex-Liste: das fal-Key-Format, eine FAL_KEY-Zuweisung, sk-ant-, sk-proj- und sk-svcacct-, GitHub-Tokens bis github_pat_, AWS-Access-Key-IDs, Private-Key-Blöcke, .env-Dateien. Dazu ein Test, ob eine Datei bytegleich zu einer Datei aus der Installation des Spiels ist. Wer denselben Befehl auf seinem Mod-Ordner laufen lässt, bekommt damit einen kostenlosen Secret-Scan geschenkt.
Die Wissensbasis selbst ist der Grund, warum das Repo überhaupt 644 Dateien hat: 242 Feldnotizen über konkrete Spiele, jede mit Versionsstand, Route, Verifikation und den Fallen, die Stunden gekostet haben. Agenten schreiben sie, Pull Requests prüfen sie. um kb pr ohne --yes ist ein Trockengang und läuft vorher gegen die Secret- und Decompilation-Prüfung an; der Text im Code sagt „Ask your human before".
Ist die Popularität echt
Die Popularitätsfrage haben wir am 11.10. bei einem anderen Reverse-Engineering-Werkzeug schon einmal durchgespielt und eine erfundene Kurve gefunden: REA: 83.000 GitHub-Sterne in 44 Stunden, nachgemessen. Hier zeigt dieselbe Batterie das Gegenteil.
Das Repo wurde am 30.09.2026 um 05:00:35 UTC angelegt, hat 223 Commits und MIT-Lizenz. Am 14.10. um 18:38 UTC zähle ich 7.608 Sterne, 814 Gabelungen, 48 Watcher und 97 Beitragende. Die Gabelungsliste über vier Seiten ergibt 2,0, 2,1, 2,9 und 2,8 Gabelungen pro Stunde, also eine flache Aufnahme ohne Plateau über die Nachtstunden. Die Begleitgrößen passen dazu: 97 Beitragende sind 1,3 Prozent der Sterne, bei REA waren es 0,10 Prozent. Von den letzten hundert öffentlichen Ereignissen sind 38 Pull Requests und 34 Kommentare, 14 WatchEvents. Bei REA passten 77 WatchEvents in unter drei Minuten.
Bei einem Repo, das fünf Tage nach Erscheinen in jedem Feed lag, hätte ich eine übersteuerte Kurve erwartet. Die Mischung aus Pull Requests und Kommentaren ist das Muster einer Beteiligung, die am Werkzeug arbeitet, und die ist bei dem gleichen Verfahren mit demselben Zählerstand zuvor durchgefallen.
Vier Dateien vor der Installation
| Datei | Was sie gewährt | Worauf ich schaue |
|---|---|---|
.claude/settings.json, hooks/hooks.json | Kommandoausführung bei Sitzungsstart, bei jedem Fortsetzen und nach Kompression | Matcher und den Inhalt des Skripts. Der Dateiname allein sagt nichts |
.mcp.json und die vier Client-Brüder | dauerhafter Kanal nach außen, mit Key aus der Umgebung | Zielhost, Header, Tool-Liste. Ein Eintrag in fünf Dateien, das übersehen wir leicht |
safety.md, CONTRIBUTING.md | was der Agent verweigern soll | ob die Regel im Code steht oder nur im Text |
um publish check, um kb check | eigener Secret- und Asset-Gate | Regex-Liste lesen, dann selbst benutzen |
Das Verfahren ist für jedes Plugin dasselbe. Manifest und Hooks zuerst, dann die MCP-Konfiguration, dann die Regel-Dateien, und am Ende ein Blick in die Prüf-Codezeilen. Vier Dateien, zehn Minuten. Bei einem Werkzeug, das Spiele erkennt, Speicherstände auflistet und Bilder in eine Cloud schickt, sind sie die ganze Arbeit, bevor wir etwas einschalten.
Weiterführende Quellen
- universal-modder auf GitHub, Commit
201569a, Stand 14.10.2026 - fal.ai mit dem Hosted-MCP-Server unter
mcp.fal.ai/mcp - tModLoader auf GitHub, der Terraria-Modloader aus dem Test
- Claude Opus 5.5, veröffentlicht am 22.09.2026, fünf Tage vor dem ersten großen Clip
- Video „Reverse Engineering mit Claude Code: So entstehen die viralen Spiele-Mods" von IAmFabian, 12.10.2026
- doldecomp/melee, das Projekt hinter der im Video erwähnten Melee-Dekompilierung
- VGC: AI game mashup videos spark debate among modders, 05.10.2026
Muss ich fal.ai benutzen, um mit dem Plugin ein Mod zu bauen?+
Nein. Für Bilder gibt es mit `um comfy` eine Ausweichlane über ein lokales ComfyUI. Die kann allerdings kein Audio, keine 3D-Modelle und keine Videos. Die vorkonfigurierten Client-Dateien im Plugin zeigen trotzdem alle zuerst auf den Hosted-MCP von fal.ai, und der verlangt `FAL_KEY`.
Ist der SessionStart-Hook gefährlich?+
Das Skript selbst ist harmlos: es schreibt den Ordner bin des Plugins in den PATH und beendet sich sauber, wenn dort nichts Ausführbares steht. Der Punkt ist der Mechanismus. Ein Plugin bringt seinen Hook selbst mit und der läuft ohne Rückfrage, in jedem Projektordner, in dem das Plugin eingeschaltet ist.
Stimmt die Popularität des Repos?+
Sie ist nach unserer Messung echt. 7.608 Sterne bei 814 Gabelungen, 97 Beitragenden und einer Gabelungsrate von 2 bis 3 pro Stunde über vierzehn Tage. Die letzten hundert öffentlichen Ereignisse sind 38 Pull Requests und 34 Kommentare, nur 14 WatchEvents.
senn-tech