Groups Compose
Organizza nodi correlati del canvas pai-pro in frame titolati con bounding box calcolati
Richiede configurazione
Cosa fa
Raggruppa nodi correlati sul canvas di produzione cinematografica pai-pro — inquadrature di scena, set di riferimento dei personaggi, battute di atto — in frame visivi titolati, spostando i membri in un layout con ordine di lettura e calcolando il bounding box del frame con dimensioni fisse delle carte e padding di 24px. Emette un singolo aggiornamento atomico del layout tramite la CLI canvas_layout.js del repository, che scrive posizioni dei nodi e frame di gruppo insieme invece di modificare workflow.json. Si attiva su richieste come "group these as Scene 2", "frame the character refs", o "arrange act 2 on the canvas".
Rapporto di test
Clonato il repository; skills/groups-compose è un singolo SKILL.md di 105 righe con frontmatter name+description valido e senza script inclusi, nessun problema di sicurezza (grep per curl|sh, base64, esfiltrazione di chiavi/token, testo di injection: nessun risultato). I due elementi a cui fa riferimento si risolvono — server/cli/canvas_layout.js e agent-templates/PROJECT_AGENT.md entrambi HTTP 200 raw; i percorsi usano $PAI_REPO_ROOT, nulla di specifico della macchina. Non ho potuto eseguire la CLI end-to-end (fa POST al visualizzatore pai-pro su localhost:7488, che richiede ./scripts/setup + start.sh), quindi ho testato contro il validatore puro del server, server/lib/canvas_layout.js (zero importazioni), su un canvas sintetico a 6 nodi con un frame preesistente: ho scritto una patch di layout di base ragionando solo dai dati workflow/positions più la forma del frame esistente, quindi una seconda patch seguendo la ricetta della skill. Entrambe sono state ACCETTATE da applyCanvasLayoutPatch, ma il frame di base era 1780x1060 (1.886.800 px2) con 2 delle 5 schede membro che cadevano fuori dal box del frame (video_1 a y=1100 e audio_5 a x=1900) perché canvas_positions.json non contiene larghezze/altezze delle schede, mentre la patch della skill ha prodotto 1318x468 (616.824 px2, 3.06x più stretto) con 0 membri che traboccano e tutti e cinque i nodi spostati in una riga note-left / media-right con gli spazi documentati di 40px e 36px. La documentazione perde un punto: l'obbligo della skill di "evict from old frames in the same update" è già gestito automaticamente dal server (la mia baseline ha omesso l'eviction e il frame obsoleto è stato comunque rimosso), e SKILL.md non menziona mai che il visualizzatore deve essere in esecuzione affinché il passo 7 abbia successo.
Testato il: 2026-07-31 · Claude Code 2.x (agent harness)
Installazione
git clone --depth 1 https://github.com/Utopai-Research/pai-pro.git /tmp/groups-compose-src
mkdir -p ~/.claude/skills
cp -R /tmp/groups-compose-src/skills/groups-compose ~/.claude/skills/groups-compose
# The skill only does anything inside a pai-pro project: its one write path is
# node "$PAI_REPO_ROOT/server/cli/canvas_layout.js" --layout-json '{...}'
# which POSTs to the local viewer at http://localhost:7488. So you also need:
# cd /tmp/groups-compose-src && ./scripts/setup --agent claude # installs deps, sets PAI_REPO_ROOT, registers skills
# ./scripts/start.sh # starts the viewer on :7488
# Plugin-marketplace alternative (installs all 7 pai-pro skills):
# /plugin marketplace add Utopai-Research/pai-pro then /plugin install pai-pro
# Skill folder is a single SKILL.md, no bundled scripts. Comandi e prompt di esempio
/groups-composeOrganizza nodi correlati del canvas pai-pro in frame titolati con bounding box calcolati
Gli skill si attivano con richieste in linguaggio naturale, senza comandi da ricordare. Dopo l'installazione, prompt come questi lo attivano (in inglese):
Group these scene nodes into a frameCluster the character references on the canvasArrange these act beats into a titled group