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.
- package/README.md +51 -0
- package/bin/create-pwt +7 -0
- package/bin/init.sh +136 -0
- package/bin/update.sh +112 -0
- package/package.json +22 -0
- package/template/.claude/agents/task-agent.md +142 -0
- package/template/.claude/settings.json +15 -0
- package/template/.claude/skills/analisi/SKILL.md +50 -0
- package/template/.claude/skills/architettura/SKILL.md +58 -0
- package/template/.claude/skills/blueprint/SKILL.md +85 -0
- package/template/.claude/skills/deploy/SKILL.md +63 -0
- package/template/.claude/skills/design/SKILL.md +51 -0
- package/template/.claude/skills/implementazione/SKILL.md +148 -0
- package/template/.claude/skills/implementazione/code-quality-reviewer-prompt.md +83 -0
- package/template/.claude/skills/implementazione/spec-reviewer-prompt.md +73 -0
- package/template/.claude/skills/legale/SKILL.md +57 -0
- package/template/.claude/skills/pianificazione/SKILL.md +88 -0
- package/template/.claude/skills/qa/SKILL.md +59 -0
- package/template/.claude/skills/ricerca/SKILL.md +50 -0
- package/template/.claude/skills/roadmap/SKILL.md +170 -0
- package/template/.claude/skills/setup/SKILL.md +128 -0
- package/template/.claude/skills/start/SKILL.md +23 -0
- package/template/.claude/skills/task/SKILL.md +360 -0
- package/template/CLAUDE.md +70 -0
- package/template/README.md +59 -0
- package/template/STATE.json +44 -0
- package/template/project.json +39 -0
- package/template/system/preferences.json +92 -0
- package/template/system/schemas/state.schema.json +293 -0
- package/template/system/schemas/workflow.schema.json +104 -0
- 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).
|