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, version3.1.1(plugin.json). Révision épinglée par la marketplaceclaude-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, manifesteMD5.txt;skills/unreal-mcp/SKILL.md=f8e2d497…,create-toolset/SKILL.md=f2dc9d3d…). - Activation :
enabledPluginsdans.claude/settings.jsondu 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é dansLifePlay.uproject(on les active un par un, pasAllToolsets).- « 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 estSnapshot.ps1. describe_toolsetsans filtre : contraire àlp-mcprè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 delp-mcp, limité aux lectures groupées danslp-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
- L'utilisateur choisit les idées retenues (A1-A5, B1-B3) : ce choix vaut SPEC.
- Lot
UES1(nom provisoire, charte doc 36 à vérifier) : réservation par Big Boss delp-mcp,lp-commandlets,lp-docet des descriptions touchées (addon 5.8, jonction), deSK-ARBRE.mdet des deux agents MCP ; instantané ; scénarios R8 pour A3 ;LICENSEdans le dossierlp-mcp, comme pourue-cpp-build(MIT, révision, « reformulé ») ; VAL ; CHG ; ticket au gardien. - Désactivation du plugin à tout moment : la copie de sauvegarde (§ 1) suffit au lot.