create-pwt 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +51 -0
  2. package/bin/create-pwt +7 -0
  3. package/bin/init.sh +136 -0
  4. package/bin/update.sh +112 -0
  5. package/package.json +22 -0
  6. package/template/.claude/agents/task-agent.md +142 -0
  7. package/template/.claude/settings.json +15 -0
  8. package/template/.claude/skills/analisi/SKILL.md +50 -0
  9. package/template/.claude/skills/architettura/SKILL.md +58 -0
  10. package/template/.claude/skills/blueprint/SKILL.md +85 -0
  11. package/template/.claude/skills/deploy/SKILL.md +63 -0
  12. package/template/.claude/skills/design/SKILL.md +51 -0
  13. package/template/.claude/skills/implementazione/SKILL.md +148 -0
  14. package/template/.claude/skills/implementazione/code-quality-reviewer-prompt.md +83 -0
  15. package/template/.claude/skills/implementazione/spec-reviewer-prompt.md +73 -0
  16. package/template/.claude/skills/legale/SKILL.md +57 -0
  17. package/template/.claude/skills/pianificazione/SKILL.md +88 -0
  18. package/template/.claude/skills/qa/SKILL.md +59 -0
  19. package/template/.claude/skills/ricerca/SKILL.md +50 -0
  20. package/template/.claude/skills/roadmap/SKILL.md +170 -0
  21. package/template/.claude/skills/setup/SKILL.md +128 -0
  22. package/template/.claude/skills/start/SKILL.md +23 -0
  23. package/template/.claude/skills/task/SKILL.md +360 -0
  24. package/template/CLAUDE.md +70 -0
  25. package/template/README.md +59 -0
  26. package/template/STATE.json +44 -0
  27. package/template/project.json +39 -0
  28. package/template/system/preferences.json +92 -0
  29. package/template/system/schemas/state.schema.json +293 -0
  30. package/template/system/schemas/workflow.schema.json +104 -0
  31. package/template/system/workflow-v5.json +1216 -0
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # create-pwt
2
+
3
+ AI-driven project workflow scaffolding for [Claude Code](https://claude.ai/code).
4
+
5
+ **You direct, Claude executes.** From idea to launch — every project documented, every session productive, zero context lost.
6
+
7
+ ## Quick start
8
+
9
+ Requires an active [Claude Code](https://claude.ai/code) subscription.
10
+
11
+ ```bash
12
+ npx create-pwt
13
+ ```
14
+
15
+ Or clone the repo and use `npm run init` to always work with the latest version.
16
+
17
+ ## What it does
18
+
19
+ Creates a standalone project folder with:
20
+
21
+ - **9-phase workflow** (38 tasks) from idea to launch — ideation, scope, planning, design, architecture, implementation, QA, release, growth
22
+ - **Skills for Claude Code** (`/start`, `/task`, `/roadmap`, `/setup`) — one command to resume any session
23
+ - **Persistent state** (`STATE.json`) — resume any session with `/start`, zero context lost between sessions
24
+ - **Sub-agent with ReAct checkpointing** — isolated task execution with mid-task pause/resume support
25
+ - **TDD enforcement** in the implementation phase — micro-planning + test-first + two-stage review
26
+
27
+ ## Requirements
28
+
29
+ - [Claude Code](https://claude.ai/code) subscription (no API key needed — runs on your existing subscription)
30
+ - macOS or Linux, bash
31
+
32
+ ## How it works
33
+
34
+ ```
35
+ npx create-pwt # scaffold a new project
36
+ cd <your-project>
37
+ # open in Claude Code, then:
38
+ /start # Claude reads STATE.json and picks up where you left off
39
+ ```
40
+
41
+ After phase 0, `/roadmap` generates a custom roadmap for your specific project — skipping irrelevant tasks (e.g. no design phase for API-only projects).
42
+
43
+ ## Docs
44
+
45
+ - [How it works](https://github.com/FabioD95/Project-Workflow-Template/blob/main/docs/HOW-IT-WORKS.md) — full system explanation
46
+ - [Architecture](https://github.com/FabioD95/Project-Workflow-Template/blob/main/docs/ARCHITECTURE.md) — patterns and decisions
47
+ - [Roadmap](https://github.com/FabioD95/Project-Workflow-Template/blob/main/docs/ROADMAP.md) — development roadmap
48
+
49
+ ## Source
50
+
51
+ [github.com/FabioD95/Project-Workflow-Template](https://github.com/FabioD95/Project-Workflow-Template)
package/bin/create-pwt ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ const { spawnSync } = require('child_process');
4
+ const path = require('path');
5
+ const script = path.join(__dirname, 'init.sh');
6
+ const result = spawnSync('bash', [script, ...process.argv.slice(2)], { stdio: 'inherit' });
7
+ process.exit(result.status ?? 1);
package/bin/init.sh ADDED
@@ -0,0 +1,136 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Cross-platform sed in-place
5
+ sed_inplace() {
6
+ local expr="$1"; local file="$2"
7
+ if [[ "$(uname)" == "Darwin" ]]; then
8
+ sed -i '' "$expr" "$file"
9
+ else
10
+ sed -i "$expr" "$file"
11
+ fi
12
+ }
13
+
14
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
15
+ TEMPLATE_DIR="$SCRIPT_DIR/../template"
16
+
17
+ echo "==================================="
18
+ echo " Project Workflow — Init Progetto "
19
+ echo "==================================="
20
+ echo ""
21
+
22
+ # 1. Nome progetto
23
+ read -p "Nome del progetto: " PROJECT_NAME
24
+ if [ -z "$PROJECT_NAME" ]; then
25
+ echo "Errore: nome progetto obbligatorio." >&2
26
+ exit 1
27
+ fi
28
+
29
+ SLUG=$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr '_' '-')
30
+
31
+ # 2. Destinazione
32
+ echo ""
33
+ echo "Dove vuoi creare il progetto?"
34
+ echo " 1) Cartella corrente → $(pwd)/$SLUG"
35
+ echo " 2) Scegli un percorso diverso"
36
+ echo ""
37
+ read -p "Scelta [1]: " DEST_CHOICE
38
+ DEST_CHOICE=${DEST_CHOICE:-1}
39
+
40
+ if [ "$DEST_CHOICE" = "2" ]; then
41
+ read -p "Percorso: " DEST_INPUT
42
+ DEST="${DEST_INPUT%/}/$SLUG"
43
+ else
44
+ DEST="$(pwd)/$SLUG"
45
+ fi
46
+
47
+ # 3. Riepilogo e conferma
48
+ echo ""
49
+ echo "Riepilogo:"
50
+ echo " Nome: $PROJECT_NAME"
51
+ echo " Slug: $SLUG"
52
+ echo " Cartella: $DEST"
53
+ echo ""
54
+ read -p "Confermi? [s/N]: " CONFIRM
55
+ if [[ ! "$CONFIRM" =~ ^[sS]$ ]]; then
56
+ echo "Annullato."
57
+ exit 0
58
+ fi
59
+
60
+ # 4. Controllo destinazione
61
+ if [ -d "$DEST" ]; then
62
+ echo "Errore: la cartella '$DEST' esiste già." >&2
63
+ exit 1
64
+ fi
65
+
66
+ # 5. Copia template
67
+ cp -r "$TEMPLATE_DIR" "$DEST"
68
+
69
+ # Crea struttura docs/
70
+ mkdir -p "$DEST/docs/phases"
71
+
72
+ # 6. Gestione preferenze
73
+ PREFS_DEST="$DEST/system/preferences.json"
74
+ PREFS_TEMPLATE="$DEST/system/preferences.json"
75
+ MASTER_PREFS="$TEMPLATE_DIR/system/preferences.json"
76
+
77
+ echo ""
78
+ echo "Preferenze del progetto:"
79
+ echo " 1) Inizia vuoto — Claude te le chiederà man mano che servono [default]"
80
+ if [ -f "$MASTER_PREFS" ]; then
81
+ echo " 2) Importa dal profilo master → $MASTER_PREFS"
82
+ fi
83
+ echo " 3) Importa da un progetto esistente"
84
+ echo ""
85
+ read -p "Scelta [1]: " PREFS_CHOICE
86
+ PREFS_CHOICE=${PREFS_CHOICE:-1}
87
+
88
+ case "$PREFS_CHOICE" in
89
+ 2)
90
+ if [ -f "$MASTER_PREFS" ]; then
91
+ cp "$MASTER_PREFS" "$PREFS_DEST"
92
+ echo "✓ Preferenze importate dal profilo master"
93
+ else
94
+ cp "$PREFS_TEMPLATE" "$PREFS_DEST"
95
+ echo "⚠ Profilo master non trovato — usando preferenze vuote"
96
+ fi
97
+ ;;
98
+ 3)
99
+ echo ""
100
+ read -p "Percorso cartella del progetto sorgente: " SRC_PROJECT
101
+ SRC_PREFS="${SRC_PROJECT%/}/system/preferences.json"
102
+ if [ -f "$SRC_PREFS" ]; then
103
+ cp "$SRC_PREFS" "$PREFS_DEST"
104
+ echo "✓ Preferenze importate da: $SRC_PROJECT"
105
+ else
106
+ cp "$PREFS_TEMPLATE" "$PREFS_DEST"
107
+ echo "⚠ preferences.json non trovato in '$SRC_PREFS' — usando preferenze vuote"
108
+ fi
109
+ ;;
110
+ *)
111
+ # preferences.json è già in $DEST dopo cp -r — niente da fare
112
+ echo "✓ Preferenze vuote — Claude te le chiederà man mano"
113
+ ;;
114
+ esac
115
+
116
+ # 7. Popola STATE.json
117
+ DATE=$(date +%Y-%m-%dT%H:%M:%S)
118
+ sed_inplace "s/\"project_id\": \"\"/\"project_id\": \"$SLUG\"/" "$DEST/STATE.json"
119
+ sed_inplace "s/\"project_name\": \"\"/\"project_name\": \"$PROJECT_NAME\"/" "$DEST/STATE.json"
120
+ sed_inplace "s/\"last_updated\": \"\"/\"last_updated\": \"$DATE\"/" "$DEST/STATE.json"
121
+
122
+ # 8. Popola project.json
123
+ TODAY=$(date +%Y-%m-%d)
124
+ sed_inplace "s/\"id\": \"\"/\"id\": \"$SLUG\"/" "$DEST/project.json"
125
+ sed_inplace "s/\"name\": \"\"/\"name\": \"$PROJECT_NAME\"/" "$DEST/project.json"
126
+ sed_inplace "s/\"slug\": \"\"/\"slug\": \"$SLUG\"/" "$DEST/project.json"
127
+ sed_inplace "s/\"created_at\": \"\"/\"created_at\": \"$TODAY\"/" "$DEST/project.json"
128
+
129
+ echo ""
130
+ echo "✓ Progetto '$PROJECT_NAME' creato in: $DEST"
131
+ echo ""
132
+ echo "Prossimi passi:"
133
+ echo " cd \"$DEST\""
134
+ echo " git init (opzionale)"
135
+ echo " Apri la cartella in Claude Code e scrivi: /start"
136
+ echo ""
package/bin/update.sh ADDED
@@ -0,0 +1,112 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5
+ TEMPLATE_DIR="$SCRIPT_DIR/../template"
6
+
7
+ echo "==================================="
8
+ echo " Project Workflow — Update Progetto"
9
+ echo "==================================="
10
+ echo ""
11
+
12
+ # Accetta path come argomento o chiede interattivamente
13
+ if [ -n "$1" ]; then
14
+ PROJECT_DIR="$1"
15
+ else
16
+ read -p "Percorso del progetto da aggiornare: " PROJECT_DIR
17
+ fi
18
+
19
+ PROJECT_DIR="${PROJECT_DIR%/}"
20
+
21
+ # Validazione
22
+ if [ ! -d "$PROJECT_DIR" ]; then
23
+ echo "Errore: directory '$PROJECT_DIR' non trovata." >&2
24
+ exit 1
25
+ fi
26
+
27
+ if [ ! -f "$PROJECT_DIR/STATE.json" ]; then
28
+ echo "Errore: non è un progetto pwt (STATE.json non trovato in '$PROJECT_DIR')." >&2
29
+ exit 1
30
+ fi
31
+
32
+ PROJECT_NAME=$(grep -o '"project_name": "[^"]*"' "$PROJECT_DIR/STATE.json" | cut -d'"' -f4)
33
+
34
+ echo "Progetto: $PROJECT_NAME"
35
+ echo "Directory: $PROJECT_DIR"
36
+ echo ""
37
+ echo "Verranno aggiornati:"
38
+ echo " .claude/skills/ (sovrascrive con skills correnti)"
39
+ echo " .claude/agents/ (sovrascrive con agents correnti)"
40
+ echo " .claude/settings.json (sovrascrive)"
41
+ echo " CLAUDE.md (sovrascrive)"
42
+ echo " README.md (sovrascrive)"
43
+ if [ -d "$PROJECT_DIR/.claude/commands" ]; then
44
+ echo " .claude/commands/ (eliminato — legacy)"
45
+ fi
46
+ if [ -d "$PROJECT_DIR/phases" ]; then
47
+ echo " phases/ → docs/phases/ (migrazione struttura)"
48
+ fi
49
+ echo ""
50
+ echo "NON verranno toccati: STATE.json, project.json, system/preferences.json"
51
+ echo ""
52
+ read -p "Confermi? [s/N]: " CONFIRM
53
+ if [[ ! "$CONFIRM" =~ ^[sS]$ ]]; then
54
+ echo "Annullato."
55
+ exit 0
56
+ fi
57
+
58
+ echo ""
59
+
60
+ # Aggiorna .claude/skills/
61
+ rm -rf "$PROJECT_DIR/.claude/skills"
62
+ cp -r "$TEMPLATE_DIR/.claude/skills" "$PROJECT_DIR/.claude/skills"
63
+ echo "✓ Aggiornato .claude/skills/"
64
+
65
+ # Aggiorna .claude/agents/
66
+ rm -rf "$PROJECT_DIR/.claude/agents"
67
+ cp -r "$TEMPLATE_DIR/.claude/agents" "$PROJECT_DIR/.claude/agents"
68
+ echo "✓ Aggiornato .claude/agents/"
69
+
70
+ # Aggiorna .claude/settings.json
71
+ cp "$TEMPLATE_DIR/.claude/settings.json" "$PROJECT_DIR/.claude/settings.json"
72
+ echo "✓ Aggiornato .claude/settings.json"
73
+
74
+ # Elimina .claude/commands/ legacy
75
+ if [ -d "$PROJECT_DIR/.claude/commands" ]; then
76
+ rm -rf "$PROJECT_DIR/.claude/commands"
77
+ echo "✓ Eliminato .claude/commands/ (legacy)"
78
+ fi
79
+
80
+ # Aggiorna CLAUDE.md e README.md
81
+ cp "$TEMPLATE_DIR/CLAUDE.md" "$PROJECT_DIR/CLAUDE.md"
82
+ echo "✓ Aggiornato CLAUDE.md"
83
+
84
+ cp "$TEMPLATE_DIR/README.md" "$PROJECT_DIR/README.md"
85
+ echo "✓ Aggiornato README.md"
86
+
87
+ # Migrazione phases/ → docs/phases/
88
+ if [ -d "$PROJECT_DIR/phases" ]; then
89
+ mkdir -p "$PROJECT_DIR/docs"
90
+ mv "$PROJECT_DIR/phases" "$PROJECT_DIR/docs/phases"
91
+ echo "✓ Migrato phases/ → docs/phases/"
92
+ fi
93
+
94
+ # Assicura docs/phases esista
95
+ mkdir -p "$PROJECT_DIR/docs/phases"
96
+
97
+ # Opzionale: aggiorna workflow e schemas
98
+ echo ""
99
+ read -p "Aggiornare anche system/workflow-v5.json e system/schemas/? [s/N]: " UPDATE_SYS
100
+ if [[ "$UPDATE_SYS" =~ ^[sS]$ ]]; then
101
+ cp "$TEMPLATE_DIR/system/workflow-v5.json" "$PROJECT_DIR/system/workflow-v5.json"
102
+ rm -rf "$PROJECT_DIR/system/schemas"
103
+ cp -r "$TEMPLATE_DIR/system/schemas" "$PROJECT_DIR/system/schemas"
104
+ echo "✓ Aggiornati system/workflow-v5.json e system/schemas/"
105
+ fi
106
+
107
+ echo ""
108
+ echo "✓ Progetto '$PROJECT_NAME' aggiornato alla struttura corrente."
109
+ echo ""
110
+ echo "Prossimi passi:"
111
+ echo " Apri la cartella in Claude Code e scrivi: /start"
112
+ echo ""
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "create-pwt",
3
+ "version": "1.0.0",
4
+ "description": "AI-driven project workflow scaffolding for Claude Code — npx create-pwt",
5
+ "license": "MIT",
6
+ "author": "Fabio D.",
7
+ "homepage": "https://github.com/FabioD95/Project-Workflow-Template#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/FabioD95/Project-Workflow-Template.git",
11
+ "directory": "packages/cli"
12
+ },
13
+ "keywords": ["claude-code", "project-management", "workflow", "ai", "scaffolding", "template"],
14
+ "engines": { "node": ">=18" },
15
+ "bin": {
16
+ "create-pwt": "./bin/create-pwt"
17
+ },
18
+ "files": [
19
+ "bin/",
20
+ "template/"
21
+ ]
22
+ }
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: task-agent
3
+ description: Agente di esecuzione task isolato. Riceve contesto completo dall'orchestratore (task data, risposte interrogazione, checkpoint precedente), esegue il lavoro (skill, web search, MCP), e restituisce un JSON checkpoint strutturato. Invocato da /task dopo la fase di interrogazione.
4
+ model: sonnet
5
+ ---
6
+
7
+ # Task Agent — Esecutore isolato
8
+
9
+ Sei l'agente di esecuzione del workflow. Lavori in isolamento con il tuo contesto. Non interagire mai con l'utente — restituisci sempre e solo un JSON checkpoint come risposta finale.
10
+
11
+ ## Input atteso
12
+
13
+ L'orchestratore ti passa tutto il contesto nel prompt di invocazione, in questo formato:
14
+
15
+ ```
16
+ TASK_ID: <id>
17
+ TASK_TITLE: <titolo>
18
+ SKILL: <nome skill oppure "null">
19
+ ITERAZIONE: <numero iterazione corrente>
20
+ CONTESTO_AGGIUNTIVO: <risposta utente al blocco precedente, oppure "nessuno">
21
+
22
+ OUTPUT_DIPENDENZE:
23
+ <contenuto degli output depends_on, uno per uno>
24
+
25
+ RISPOSTE_INTERROGAZIONE:
26
+ - <domanda 1>: <risposta 1>
27
+ - <domanda 2>: <risposta 2>
28
+
29
+ OUTPUT_SCHEMA:
30
+ <sezioni richieste dall'output_schema della task>
31
+ Formato: <format>
32
+ Lunghezza: <length>
33
+
34
+ DOD:
35
+ <definition of done>
36
+
37
+ CHECKPOINT_PRECEDENTE:
38
+ <JSON del checkpoint precedente se ITERAZIONE > 1, oppure "nessuno">
39
+ ```
40
+
41
+ ## Procedura di esecuzione
42
+
43
+ ### 1. Analisi del contesto
44
+
45
+ Leggi l'intero input. Se `CHECKPOINT_PRECEDENTE` non è "nessuno", riprendi dal `risultato_parziale` contenuto nel checkpoint — non ripetere lavoro già completato.
46
+
47
+ ### 2. Esecuzione skill (se `SKILL` != "null")
48
+
49
+ Leggi `.claude/skills/<SKILL>/SKILL.md` e segui le istruzioni in quel file come guida principale per l'esecuzione.
50
+
51
+ Strumenti disponibili: `Read`, `Write`, `Glob`, `Grep`, `WebSearch`, `WebFetch`, tool MCP (Figma, Postman, ClickUp, ecc.).
52
+
53
+ Se un MCP tool richiesto non è disponibile, documenta la limitazione nel risultato e continua senza bloccare.
54
+
55
+ ### 3. Generazione output
56
+
57
+ Segui `OUTPUT_SCHEMA` per strutturare l'output. Se mancano informazioni che:
58
+ - non puoi ricavare autonomamente
59
+ - non sono ricercabili online
60
+ - dipendono da una decisione dell'utente
61
+
62
+ → imposta `stato: "partial"`, documenta il blocco, e fermati.
63
+
64
+ Se hai tutto → imposta `stato: "done"` con `output_finale` completo.
65
+
66
+ ### 3.5 Verifica pre-completamento
67
+
68
+ Prima di impostare `stato: "done"`, esegui queste tre verifiche nell'ordine. Se una qualsiasi fallisce, imposta `stato: "partial"` con `bloccato_su` che descrive esattamente cosa manca.
69
+
70
+ **A. Copertura OUTPUT_SCHEMA**
71
+ Per ogni sezione elencata in OUTPUT_SCHEMA, verifica che `output_finale` contenga un heading o sotto-sezione corrispondente. Se manca una sezione → partial, con `bloccato_su: "Sezione mancante nell'output: [nome sezione]"`.
72
+
73
+ **B. Self-review DOD (criterio per criterio)**
74
+ Rileggi il DOD dall'inizio. Per ogni criterio singolo (separato da punto, punto e virgola, o a capo):
75
+
76
+ 1. Isola il criterio
77
+ 2. Cerca nell'output_finale il contenuto che lo soddisfa
78
+ 3. Valuta: il contenuto soddisfa il criterio nel **merito** (non solo nella forma)?
79
+ - Se il criterio dice "almeno 3 alternative analizzate" → conta le alternative nell'output. Sono 3 o più?
80
+ - Se il criterio dice "piano realistico per 1-2 persone" → il piano tiene conto delle ore/settimana dichiarate?
81
+ - Se il criterio dice "differenziante esplicitato e motivato" → c'è sia il differenziante che la motivazione?
82
+ 4. Segna internamente: ✅ soddisfatto / ❌ non soddisfatto
83
+
84
+ Se uno o più criteri risultano ❌:
85
+ - Se puoi correggere l'output autonomamente → correggi e ripeti la verifica
86
+ - Se non puoi (mancano informazioni) → partial, con `bloccato_su: "Criteri DOD non soddisfatti: [lista criteri]"` e `contesto_necessario: "[domanda specifica per ottenere l'informazione mancante]"`
87
+
88
+ **C. Markdown ben formato**
89
+ Verifica che:
90
+ - Tutti i blocchi di codice siano chiusi (``` aperti = ``` chiusi)
91
+ - Le tabelle abbiano header e separatore
92
+ - I link markdown abbiano URL validi (non placeholder `[testo]()`)
93
+
94
+ Se il markdown è malformato → correggi e ripeti la verifica. Se non correggibile → partial.
95
+
96
+ Solo se tutte e tre le verifiche passano → procedi al punto 4 con `stato: "done"`.
97
+
98
+ ### 4. Output finale
99
+
100
+ Rispondi **solo** con il JSON checkpoint, senza testo prima o dopo:
101
+
102
+ **Se `stato: "partial"`:**
103
+ ```json
104
+ {
105
+ "stato": "partial",
106
+ "task_id": "<id>",
107
+ "iterazione": <numero>,
108
+ "completato": ["<step A>", "<step B>"],
109
+ "risultato_parziale": "<markdown parziale prodotto finora, o null>",
110
+ "bloccato_su": "<descrizione precisa del blocco>",
111
+ "contesto_necessario": "<domanda chiusa e specifica da porre all'utente>",
112
+ "output_finale": null,
113
+ "file_prodotti": [],
114
+ "decisioni_da_approvare": []
115
+ }
116
+ ```
117
+
118
+ **Se `stato: "done"`:**
119
+ ```json
120
+ {
121
+ "stato": "done",
122
+ "task_id": "<id>",
123
+ "iterazione": <numero>,
124
+ "completato": ["<step A>", "<step B>", "stesura output"],
125
+ "risultato_parziale": null,
126
+ "bloccato_su": null,
127
+ "contesto_necessario": null,
128
+ "output_finale": "<contenuto markdown completo>",
129
+ "file_prodotti": [],
130
+ "decisioni_da_approvare": ["<scelta tecnica/di prodotto rilevante>"]
131
+ }
132
+ ```
133
+
134
+ `decisioni_da_approvare`: scelte consequenziali fatte durante l'esecuzione che l'utente deve conoscere (es. "Stack confermato: Next.js + Supabase", "Feature X esclusa dallo scope"). Lista vuota se nessuna scelta rilevante.
135
+
136
+ ## Regole operative
137
+
138
+ - Non scrivere mai file di output in `docs/phases/` — compito dell'orchestratore dopo l'approvazione
139
+ - Non modificare `STATE.json` — compito dell'orchestratore
140
+ - Il `risultato_parziale` deve includere tutto il lavoro prodotto finora in markdown (viene passato alla prossima iterazione)
141
+ - Sii conservativo sui blocchi: blocca solo se l'informazione è genuinamente necessaria e non ricavabile da nessuna fonte disponibile
142
+ - Se `ITERAZIONE > 1`, aggiungi `CONTESTO_AGGIUNTIVO` al contesto e continua dal `risultato_parziale` del checkpoint precedente
@@ -0,0 +1,15 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "compact",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "echo 'Compattazione completata. Leggi STATE.json e avvia automaticamente la task corrente usando la procedura in .claude/skills/task/SKILL.md, senza aspettare input utente.'"
10
+ }
11
+ ]
12
+ }
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: analisi
3
+ description: Analisi strutturata (GO/NO-GO, rischi, KPI, strategia) — invocato dall'orchestratore /task
4
+ user-invocable: false
5
+ ---
6
+
7
+ <HARD-GATE>
8
+ - NON saltare l'analisi dei rischi anche se il progetto sembra semplice. Ogni progetto ha almeno rischi di tipo tecnologico, di mercato e di competenze.
9
+ - NON produrre raccomandazione GO/NO-GO senza aver analizzato tutti e 5 i vettori di rischio (tecnologia, mercato, competenze, legale, finanziario).
10
+ </HARD-GATE>
11
+
12
+ # Skill: Analisi strutturata
13
+
14
+ Sei un agente specializzato nell'analisi strutturata per decisioni di prodotto. Produci framework di analisi pronti da integrare nell'output della task.
15
+
16
+ ## Input atteso (passato dall'orchestratore)
17
+ - Output delle task dipendenti (idea, competitor, scope, stack)
18
+ - Risposte raccolte dall'utente durante l'interrogazione
19
+ - Tipo di analisi richiesta (GO/NO-GO, rischi, KPI, strategia)
20
+
21
+ ## Comportamento per tipo di task
22
+
23
+ ### GO / NO-GO tecnico (task 0.3)
24
+ 1. Analizza complessità basandoti su: integrations, data model, real-time, mobile, infra
25
+ 2. Classifica: **Bassa** (< 2 mesi solo) / **Media** (2–4 mesi) / **Alta** (> 4 mesi o team)
26
+ 3. Identifica le 3 sfide tecniche principali con stima di impatto
27
+ 4. Produci raccomandazione GO/PAUSA/NO-GO con motivazione in 3–5 bullet
28
+
29
+ ### Analisi rischi e vincoli legali (task 1.5)
30
+ 1. Identifica rischi da: tecnologia, mercato, competenze, legale, finanziario
31
+ 2. Per ognuno: probabilità (A/M/B), impatto (A/M/B), mitigazione concreta
32
+ 3. Per la parte legale: valuta obblighi GDPR, cookie law, ToS, licenze OSS, settori regolamentati
33
+ 4. Produci:
34
+ - Matrice rischi (tabella)
35
+ - Tabella competenze: ho / devo imparare / devo esternalizzare
36
+ - Checklist vincoli legali con stato: OK / da verificare / bloccante
37
+
38
+ ### Analisi KPI post-lancio (task 8.1)
39
+ 1. Incrocia KPI definiti in 1.3 con dati raccolti
40
+ 2. Identifica trend (crescita, plateau, declino)
41
+ 3. Proponi insight su cosa sta funzionando e cosa no
42
+ 4. Suggerisci 2–3 azioni prioritarie
43
+
44
+ ### Decisione strategica (task 8.3)
45
+ 1. Analizza: traction, sostenibilità, opportunità di mercato, effort vs. reward
46
+ 2. Proponi framework di decisione: CRESCI / PIVOT / SUNSET
47
+ 3. Documenta lessons learned in formato actionable per progetti futuri
48
+
49
+ ## Output
50
+ Markdown con tabelle e bullet strutturati. Dati prima, opinioni dopo (chiaramente marcate come "Raccomandazione:").
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: architettura
3
+ description: Architettura tecnica, schema DB, API con integrazione Postman MCP — invocato dall'orchestratore /task
4
+ user-invocable: false
5
+ ---
6
+
7
+ <HARD-GATE>
8
+ - NON definire API endpoints prima di aver completato lo schema database con tutte le entità, relazioni e RLS policies.
9
+ - NON omettere le RLS policies per nessuna tabella — ogni tabella deve avere almeno una policy documentata.
10
+ </HARD-GATE>
11
+
12
+ # Skill: Architettura tecnica
13
+
14
+ Sei un agente specializzato in architettura software per applicazioni Next.js + Supabase. Produci decisioni architetturali documentate e, se disponibile il Postman MCP, crei le collection API.
15
+
16
+ ## Input atteso (passato dall'orchestratore)
17
+ - Feature core da 1.2
18
+ - Stack confermato da 1.3
19
+ - Flussi utente da 3.1
20
+ - Risposte raccolte dall'utente (entità DB, ruoli, multi-tenancy, operazioni async)
21
+
22
+ ## Comportamento
23
+
24
+ ### Architettura sistema, modello dati e API (task 4.1)
25
+
26
+ **1. Architettura ad alto livello**
27
+ Produce diagramma testuale (o Mermaid) che mostra:
28
+ - Client (Next.js) → API layer → Supabase
29
+ - Servizi esterni e come si integrano
30
+ - Flussi async/background se presenti
31
+
32
+ **2. Schema database**
33
+ Per ogni entità:
34
+ - Nome tabella (snake_case)
35
+ - Campi: nome | tipo | nullable | default | note
36
+ - Relazioni: FK, junction tables per N:N
37
+ - RLS policy: chi può SELECT/INSERT/UPDATE/DELETE
38
+ - Indici consigliati
39
+
40
+ **3. API endpoints**
41
+ Per ogni endpoint necessario oltre alle Server Actions:
42
+ - Metodo | Path | Autenticazione | Input (body/params) | Output | Note
43
+
44
+ **4. Se disponibile Postman MCP**:
45
+ - Usa `createCollection` per creare la collection API del progetto
46
+ - Usa `createCollectionRequest` per ogni endpoint documentato
47
+ - Usa `createEnvironment` con variabili: `BASE_URL`, `SUPABASE_URL`, `ANON_KEY`
48
+
49
+ ### Struttura progetto e convenzioni (task 4.2)
50
+ 1. Struttura cartelle (deviazioni dallo standard se necessarie)
51
+ 2. Convenzioni naming: componenti, hooks, tipi, API routes
52
+ 3. Pattern state management usato
53
+ 4. Tracking plan: eventi analytics critici dal giorno 1
54
+
55
+ ## Output
56
+ Markdown con tabelle e diagrammi Mermaid.
57
+ Link alla Postman collection se creata.
58
+ Ogni decisione deve avere una motivazione (anche breve).