109 lines
10 KiB
Markdown
109 lines
10 KiB
Markdown
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.
|