From lutecepowers-v8
Migration v7 → v8 via Agent Teams. Parallel teammates, script-heavy, JSON-driven task decomposition.
npx claudepluginhub lutece-platform/lutece-dev-plugin-claude --plugin lutecepowers-v8This skill uses the workspace's default tool permissions.
Migrates any Lutece plugin/module/library from v7 to v8 using **Agent Teams (Swarm Mode)**. The Team Lead (you) orchestrates, specialized teammates execute in parallel, and bash scripts handle all mechanical work.
patterns/cache-patterns.mdpatterns/cdi-patterns.mdpatterns/events-patterns.mdpatterns/fileupload-patterns.mdpatterns/mvc-patterns.mdpatterns/rest-patterns.mdpatterns/template-macros.mdscripts/add-liquibase-headers.shscripts/extract-context-beans.shscripts/migrate-java-mechanical.shscripts/migrate-template-mechanical.shscripts/progress-report.shscripts/scan-project.shscripts/task-splitter.shscripts/verify-file.shscripts/verify-migration.shteammates/config-migrator.mdteammates/java-migrator.mdteammates/template-migrator.mdteammates/test-migrator.mdSearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Migrates any Lutece plugin/module/library from v7 to v8 using Agent Teams (Swarm Mode). The Team Lead (you) orchestrates, specialized teammates execute in parallel, and bash scripts handle all mechanical work.
Prerequisites: Agent Teams must be enabled (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1).
Confirm the current directory is a Lutece project (pom.xml with lutece-plugin/module/library packaging).
mkdir -p .migration
bash ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/scripts/scan-project.sh . > .migration/scan.json
Read .migration/scan.json and show the user:
For every Lutece dependency in scan.json:
v8Status: "available" → OK (already cloned in ~/.lutece-references/)v8Status: "unknown" → Search GitHub orgs lutece-platform and lutece-secteur-public for v8 branchdevelop_core8 > develop8 > develop8.x > develop~/.lutece-references/:
git clone -q --branch <v8_branch> --single-branch https://github.com/<org>/<artifactId>.git ~/.lutece-references/<artifactId>
This ensures teammates can search reference sources for ALL dependencies, not just the 21 pre-cloned repos.bash ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/scripts/task-splitter.sh .migration/scan.json .migration
Read the output to know how many teammates to spawn.
Switch to Delegate Mode (Shift+Tab). From this point, you orchestrate only — never implement.
Config Migrator (1 teammate)
${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/teammates/config-migrator.md.migration/tasks-config.jsonVerifier (1 teammate)
${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/teammates/verifier.mdJava Migrator(s) (1-3, based on scan.json recommendation)
${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/teammates/java-migrator.md.migration/tasks-java-0.json, .migration/tasks-java-1.json, .migration/tasks-java-2.jsonTemplate Migrator (0-1, if templates/JSP exist)
${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/teammates/template-migrator.md.migration/tasks-template.jsonTest Migrator (0-1, if test files exist)
${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/teammates/test-migrator.md.migration/tasks-test.jsonWhen spawning each teammate, provide:
Read your instruction file at [path to teammates/*.md].
Read your task assignment at [path to .migration/tasks-*.json].
Execute all steps in your instructions. Use scripts from ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/scripts/.
Pattern files are at ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/patterns/ — load only when needed.
Reference implementations: always search ~/.lutece-references/ before writing any new pattern.
Migration samples with real before/after diffs: ${CLAUDE_PLUGIN_ROOT}/migrations-samples/ — consult when stuck on a specific migration pattern.
Run verify-file.sh after each file you complete.
Wire the dependency graph:
Config Migrator ──────────────────────────────────────── (no blockers, runs first)
│
├──→ Java Migrator 0 ─┐
├──→ Java Migrator 1 ─┤ (blocked by Config Migrator)
└──→ Java Migrator 2 ─┘
│
├──→ Template Migrator ─┐ (blocked by ALL Java Migrators)
└──→ Test Migrator ─────┤ (blocked by Config + at least 1 Java Migrator)
│
└──→ Verifier: Final Build (blocked by ALL above)
While teammates work:
bash ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/scripts/progress-report.sh .
When the Verifier reports BUILD SUCCESS (compile + tests) and verify-migration.sh: 0 FAIL, spawn a Reviewer teammate:
Read your instruction file at ${CLAUDE_PLUGIN_ROOT}/agents/lutece-v8-reviewer.md.
Review this project for v8 compliance. Do NOT modify any files.
Reference implementations: ~/.lutece-references/
Migration samples: ${CLAUDE_PLUGIN_ROOT}/migrations-samples/
Why a teammate? In Delegate Mode, the Lead can only spawn teammates — the Task tool is not available. The reviewer runs as a read-only teammate that reports findings without modifying files.
Process the reviewer's findings:
When ALL of the following are true:
Then:
verify-migration.sh results (PASS/FAIL/WARN counts)mvn clean install — compile + tests)~/.lutece-references/ before writing new patternsverify-file.sh after each file, not just at the endAll in ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/scripts/:
| Script | Purpose | Used by |
|---|---|---|
scan-project.sh | Full project scan → JSON | Lead (Phase A) |
task-splitter.sh | JSON scan → per-teammate task files | Lead (Phase B) |
migrate-java-mechanical.sh | javax→jakarta + Spring→CDI + net.sf.json imports | Java Migrators |
migrate-template-mechanical.sh | BO macros + null-safety + namespace | Template Migrator |
extract-context-beans.sh | Spring context XML → JSON catalog | Config Migrator |
verify-migration.sh | 70+ checks, optional --json mode | Verifier |
verify-file.sh | Per-file verification subset | All teammates |
add-liquibase-headers.sh | Liquibase headers on SQL files | Config Migrator |
progress-report.sh | Migration progress display | Lead (Phase E) |
All in ${CLAUDE_PLUGIN_ROOT}/skills/lutece-migration-v8-agent-teams/patterns/:
| File | Content | Loaded by |
|---|---|---|
cdi-patterns.md | CDI scopes, injection, producers, singleton, Models, Pager, Key Imports | Java Migrators (always) |
events-patterns.md | Event/listener migration | Java Migrators (if events) |
cache-patterns.md | EhCache→JCache | Java Migrators (if cache) |
rest-patterns.md | Jersey→JAX-RS, filters, providers | Java Migrators (if REST) |
mvc-patterns.md | @RequestParam, CSRF auto-filter, @ModelAttribute | Java Migrators (if JspBean/XPage) |
template-macros.md | v8 Freemarker macros, jQuery→vanilla JS | Template Migrator |
fileupload-patterns.md | FileItem→MultipartItem | Java Migrators (if fileupload) |