LifePlay-Revival/Docs/Migration/etat/SK/SK-REVUE-unreal-engine-skills.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

10 KiB

Revue R1 (SK-ARBRE) — Session principale (orchestrateur) — Modèle claude-opus-5-5 — Skills lus : lp-mcp, lp-validate, lp-commandlets, lp-doc

SK-REVUE : plugin Epic « Unreal Engine Skills for Claude Code » — revue et recyclage (2026-10-15)

Demande de l'utilisateur (2026-10-15) : « si le gain est faible je désactive, mais avant essaies de récupérer ce qui est exploitable et qui donnerait un véritable bonus pour nos agents et skills ». Ce document est la revue R1 et une proposition : aucun skill, agent ni réglage n'a été modifié (R11 ; règle auto-mode du 2026-10-12 : SPEC approuvée et fichiers réservés par Big Boss avant toute écriture de skill).

1. Source (R2)

  • Dépôt github.com/EpicGames/unreal-engine-skills-for-claude-code-plugin, licence MIT, version 3.1.1 (plugin.json). Révision épinglée par la marketplace claude-plugins-official : a6aa73ada02a9fb1f5415bec491f9942c519b297 (établi pour le catalogue ; estimé pour la copie installée, qui ne porte pas de SHA).
  • Copie installée par l'application : %APPDATA%\Claude\local-agent-mode-sessions\…\rpm\plugin_01WDbGcSbMipS8o8yLaofHQ4\.
  • Copie de sauvegarde, qui survit à la désactivation : D:\Game\LifePlay_Backup_5.5\UES1\unreal-engine-skills-3.1.1\ (12 fichiers, manifeste MD5.txt ; skills/unreal-mcp/SKILL.md = f8e2d497…, create-toolset/SKILL.md = f2dc9d3d…).
  • Activation : enabledPlugins dans .claude/settings.json du projet ; .claude/ est ignoré par git (.gitignore:72), rien n'atteint le dépôt public (établi, git check-ignore -v).

2. Contenu relu en entier (établi)

Fichier Ce qu'il fait
hooks/hooks.json + unreal-context.sh SessionStart (startup, resume, clear), bash, 5 s : cherche un .uproject en remontant, émet 2-3 phrases de contexte (« projet Unreal, conventions UE, utilise unreal-mcp, .mcp.json présent »). Lecture seule, aucun réseau. Lève la question ouverte de SK-T2 l. 227.
skills/unreal-mcp/SKILL.md + references/setup.md, operations.md Mode d'emploi du serveur MCP de l'éditeur : 3 méta-outils, règles de sécurité, dépannage, proxy.
skills/create-toolset/SKILL.md Écrire un jeu d'outils (C++ ou Python) pour ToolsetRegistry : principes, documentation, erreurs, tests.
skills/unreal-skill/SKILL.md Écrire un « Agent Skill » enregistré dans l'éditeur (UAsset ou classe Python).
Pas de .mcp.json, pas de bin/ Aucun serveur ni exécutable ajouté. Notre .mcp.json (unreal-mcp, 8000) reste la seule connexion.

Écart à nos règles : l'installation du plugin entier contrevient à R3 (« aucun hook tiers, aucun plugin entier ; le plugin Epic n'est pas installé »). La désactivation rétablit la conformité ; le garder exigerait d'amender R3.

Concurrence : les déclencheurs larges de unreal-mcp (BP_, acteurs, « in my game ») le font choisir à la place de lp-mcp, alors qu'il prescrit l'inverse de nos règles (§ 5).

3. À recycler : vrai bonus (priorité A)

# Idée Cible Gain attendu
A1 Un outil peut rendre un statut d'échec sans exception : seul un succès explicite autorise l'appel suivant lp-mcp § 1 règle 3 Moins de faux « fait » dans lp-mcp-bp
A2 Dépannage du serveur : RefreshTools, port occupé, PIE, compilation en cours, preuve par un appel de lecture lp-mcp § 2 (+ consigne BLOCKED-MCP des deux agents) Diagnostic d'un BLOCKED-MCP sans tâtonnement
A3 Description de skill avec clause d'exclusion (motif « SKIP for » d'Epic) descriptions des paires proches ; règle R12 Déclenchement plus juste entre nos 20 skills
A4 Règles de rédaction : « nouveau », « économe », test de la ligne, relecture par la description seule SK-ARBRE (R13) + lp-doc Skills plus courts (R9 : lp-build 148, lp-validate 144 lignes)
A5 Stub Python de l'éditeur (Intermediate/PythonStub/unreal.py) comme référence d'API 5.8 lp-commandlets Scripts -run=pythonscript sans API devinée

A1 — texte proposé (fin de lp-mcp § 1 règle 3) :

Un résultat d'outil se lit avant l'appel suivant : compile_blueprint, create_node, save_assets… peuvent rendre un échec sans erreur de protocole. Tout ce qui n'est pas un succès explicite arrête la fiche (source : plugin Epic 3.1.1).

A2 — texte proposé (nouvelle puce de lp-mcp § 2, « Panne du serveur ») :

  • Outils absents ≠ éditeur arrêté : prouver l'état par un appel de lecture (list_toolsets), pas par la liste d'outils.
  • Jeu d'outils manquant : console ModelContextProtocol.RefreshTools ; s'il manque encore, le plugin du jeu d'outils n'est pas activé dans LifePlay.uproject (on les active un par un, pas AllToolsets).
  • « Failed to listen on port » : un autre processus tient 8000 (Get-NetTCPConnection -LocalPort 8000) ; plusieurs éditeurs : vérifier lequel tient le port avant de conclure.
  • Appels qui pendent : compilation (C++, shaders) ou chargement de niveau en cours → attendre, ne pas réessayer en boucle ; PIE active → les outils d'édition (création d'asset) se comportent autrement : arrêter la PIE d'abord.

Incertain, à tester en VAL : passer RefreshTools à l'éditeur headless (-ExecCmds= ou outil de console par MCP).

A3 — exemple (description de lp-mcp, phrase ajoutée) : « Pas pour : un commandlet ou un script pythonscript éditeur fermé (lp-commandlets), une compilation (lp-build). » Paires à traiter : lp-build/ue-cpp-build, lp-validate/sk-recount/debug-verification, lp-repo/sk-repo, lp-mcp/lp-commandlets. R8 impose 3 scénarios par skill touché : les clauses changent le déclenchement.

A4 — texte proposé (R13 de SK-ARBRE, reformulé d'après unreal-skill et create-toolset) :

Une ligne de skill n'entre que si l'agent ne peut pas la savoir ni l'apprendre par un outil ; une ligne qu'un lecteur compétent déduirait du nom, de la signature ou du contexte se coupe. Avant remise : relire la seule description et se demander si un agent saurait, d'après elle, quand activer le skill et quand ne pas l'activer.

Écarté : leur règle « pas de nom d'outil » ; nos pièges d'appel exacts (lp-mcp § 3) sont voulus et datés.

A5 — texte proposé (lp-commandlets, avant un nouveau script) :

API Python de l'éditeur : chercher (grep, jamais lecture entière) dans Intermediate/PythonStub/unreal.py, généré par le mode développeur du plugin Python.

Prérequis : le stub est absent aujourd'hui (établi). Il faut activer le mode développeur, un réglage par utilisateur (estimé : [/Script/PythonScriptPlugin.PythonScriptPluginUserSettings] bDeveloperMode=True dans EditorPerProjectUserSettings.ini), puis lancer l'éditeur une fois. Décision de l'utilisateur.

4. À garder pour plus tard (priorité B, utile sous condition)

# Idée Condition
B1 Tests par MCP : AutomationTestToolset (DiscoverTests obligatoire d'abord, sinon résultats vides → ListTests → RunTests → GetTestStatus → GetTestResults) ; en ligne de commande, éditeur headless (≈ 30 s de démarrage) Le projet n'a aucun test d'automatisation (grep de IMPLEMENT_*_AUTOMATION_TEST et BEGIN_DEFINE_SPEC : 0, établi). Sert si LPTestStringCompat devient un test d'automatisation (piste pour lp-validate).
B2 Jeu d'outils LifePlay en lecture dans LifePlayEditorTools, par exemple ce que find_nodes ne donne pas (noms d'événements et de macros, aujourd'hui par LPDumpFunction -Pins -Exec). Règles d'Epic à reprendre : méthodes statiques, types réels (pas de JSON dans une chaîne), succès = valeur et échec = erreur levée, doc minimale, un test par chemin de succès et par erreur. Lot à part (IMPL C++). Compatible avec lp-mcp règle 9 : un jeu d'outils de plus dans unreal-mcp, pas un serveur de plus. Les règles iraient dans une annexe reformulée lp-mcp/references/toolset.md (R9, R4).
B3 Hook SessionStart maison (Python, ≤ 5 s) inspiré du leur, qui dit ce qu'une session ignore : port 8000 joignable ou non, UeState (éditeur, build), verrou du dépôt pris ou libre R3 n'interdit que les hooks tiers. Coût de contexte à chaque session : à mesurer.

5. Écarté (et pourquoi)

  • Recompiler par LiveCodingToolset.CompileLiveCoding : contraire à lp-build (Tools/Build.ps1, lp-builder, journal archivé). Live Coding laisse aussi des binaires patchés hors de la chaîne UBT.
  • « Sauvegarde avant et après », sauvegardes en masse : contraire à lp-mcp-bp (seuls les assets de la fiche) ; notre point de retour est Snapshot.ps1.
  • describe_toolset sans filtre : contraire à lp-mcp règle 6 (75-116 Ko).
  • « Modifie l'éditeur au lieu de demander à l'utilisateur » : contraire à la porte SPEC, BUILD-GO, instantané.
  • ProgrammaticToolset.execute_tool_script : Python arbitraire ; déjà refusé par la garde de lp-mcp, limité aux lectures groupées dans lp-mcp-bp. Rien à reprendre.
  • Agent Skills de l'éditeur (UAsset ou Python, ListSkills / GetSkills / CreateSkill) : servent l'agent intégré à l'éditeur, que nous n'utilisons pas.
  • Proxy unreal_mcp_proxy (session gardée pendant les relances, ce qui supprimerait le /mcp → Reconnect) : absent du moteur (UE_5.8\Engine\Plugins\Experimental\ModelContextProtocol\ n'a pas d'Extras/Proxy, établi). À revoir à la prochaine version du moteur (R7).
  • Installation (AllToolsets, bAutoStartServer, GenerateClientConfig) : déjà en place (EditorPerProjectUserSettings.ini : port 8000, /mcp, bAutoStartServer=True, bEnableToolSearch=True).
  • Le hook bash d'Epic : remplacé, si l'utilisateur le veut, par B3.

6. Suite proposée

  1. L'utilisateur choisit les idées retenues (A1-A5, B1-B3) : ce choix vaut SPEC.
  2. Lot UES1 (nom provisoire, charte doc 36 à vérifier) : réservation par Big Boss de lp-mcp, lp-commandlets, lp-doc et des descriptions touchées (addon 5.8, jonction), de SK-ARBRE.md et des deux agents MCP ; instantané ; scénarios R8 pour A3 ; LICENSE dans le dossier lp-mcp, comme pour ue-cpp-build (MIT, révision, « reformulé ») ; VAL ; CHG ; ticket au gardien.
  3. Désactivation du plugin à tout moment : la copie de sauvegarde (§ 1) suffit au lot.