Approfondimenti e Trend sull'Intelligenza Artificiale

Definire il manifest di progetto e i confini architetturali per l'LLM

5 min di lettura
Laptop 3/4 su scrivania scura con editor aperto su # PROJECT RULES e regole architetturali, bordo arancione a sinistra
Windows macOS Linux
Immagine generata: Alex Lunalbi · Gemini · ai riparo

Come scrivere il manifest di progetto e i confini architetturali per l'LLM: cosa può toccare, cosa no, e come tenerlo allineato tra una sessione e l'altra.

Nella guida sull’architettura di un progetto vibe-coded, la cartella docs/ è il cervello a lungo termine del progetto. Al centro c’è un file specifico: lo SPEC.md, o manifest di progetto.

Quando usi un assistente IA, il problema non è solo fargli scrivere una funzione che oggi gira. È evitare che, tra tre giorni, per aggiungere un bottone in UI possa riscrivere la logica del database.

Qui ti mostro cosa mettere nel manifest e come fissare i confini architetturali (chi parla con chi, cosa si può toccare) prima del primo pezzo di codice.

Che cos’è davvero un manifest per l’LLM

Il manifest non è un README commerciale. Il README parla a un umano (installazione, scopo). Il manifest (SPEC.md / MANIFEST.md) è un contratto operativo tra te e l’assistente.

Tra una sessione e l’altra l’IA non «ricorda» le decisioni di ieri, a meno che non le rilegga. Se restano implicite, può scegliere la scorciatoia più breve — spesso la peggiore per sicurezza e debito tecnico — per la sola richiesta del momento.

A cosa serve:

  • ridare le regole a ogni nuova chat;
  • limitare dipendenze inutili;
  • segnare file/moduli da non toccare;
  • definire quando un compito è finito (Definition of Done).

Le sezioni fondamentali del manifest

Un manifest buono si legge in pochi secondi. Nei miei setup uso sei blocchi fissi.

Sezione dello SPEC.md Status Cosa scrivere (e perché)
Obiettivo Visione breve Obbligatorio Una o due frasi di perimetro. Es.: «Script Python locale per rinominare fatture PDF dal testo, senza API esterne.»
Stack Linguaggi e tool Obbligatorio Elenco rigido + versioni dove conta (es. Python 3.12, solo libreria X). Riduce allucinazioni di pacchetti.
Flusso dei dati Dove vive lo stato Obbligatorio SQLite? JSON? Solo memoria? Se non lo dici, l’IA può spargere log e file di stato a caso.
Confini Chi parla con chi Obbligatorio Es.: «La UI non interroga il DB: passa solo da api/.»
Non-scope Cosa non fa Consigliato Es.: «Niente auth utente. Niente cronologia cloud.» Blocca la sovra-ingegnerizzazione.
Definition of Done Chiusura feature Obbligatorio Es.: «Passa lo smoke test; niente crash su input vuoti; niente secret in log.»

Confini: regole di ingaggio

Senza isolamento, l’LLM può produrre un god-file: migliaia di righe che fanno DB + UI + auth + API. Da lì le modifiche diventano fragili e l’audit di sicurezza più difficile.

Do (imponi)

  • Modularità — file separati per UI, business, dati; evita monoliti.
  • Segreti — solo variabili d’ambiente; niente stringhe di connessione in chiaro.
  • Input — sanitizza/valida prima di passare ai layer interni.

Don’t (proibisci)

  • Dipendenze a sorpresa — niente pip/npm nuovi senza accordo.
  • Violazione di livello — la UI non importa i modelli DB; passa dai controller/API.
  • API pericolose — vietati eval() / os.system() salvo richiesta esplicita nel prompt corrente.

🚨 Avviso critico — Niente segreti nello SPEC
Non mettere API key, password o path personali in SPEC.md. Quel file finisce nel contesto inviato al provider del modello. Per gli esempi usa valori palesemente finti (sk-ESEMPIO-NON-REALE).

Laboratorio: creare il file e agganciarlo

1. Creazione

Windows (CMD):

mkdir docs
type nul > docs\SPEC.md

Windows (PowerShell):

New-Item -ItemType Directory -Force docs | Out-Null
New-Item -ItemType File -Force docs\SPEC.md | Out-Null

macOS / Linux:

mkdir -p docs
touch docs/SPEC.md

Compila le sei sezioni con i dati del tuo progetto (non lasciare placeholder eterni).

2. Prompt «zero-code» (prima del codice)

Non dare lo SPEC e chiedere subito l’app intera: rischi sovrascritture e pezzi non testabili.

Apri una chat nuova e ancora il file:

Leggi docs/SPEC.md (obiettivo, stack, confini, non-scope, Definition of Done).
Non generare ancora nessun codice.
Rispondi solo con un elenco puntato dei limiti architetturali che devi rispettare,
poi attendi istruzioni sul primo modulo.

💡 Consiglio pratico — Cursor
Digita @docs/SPEC.md nella chat prima del prompt, così forzi il caricamento del file.

3. Un modulo alla volta

Quando l’assistente conferma i limiti (niente eval, stack bloccato, UI ≠ DB), chiedi solo la connessione dati. Verifica. Nuova sessione → di nuovo @docs/SPEC.md → API. Poi UI.

Manutenzione: quando aggiornare

Il manifest non è eterno. Se da «solo memoria» passi a «salva PDF su disco», lo scope è cambiato: aggiorna lo SPEC prima di chiedere l’implementazione.

Altrimenti la sessione successiva leggerà regole obsolete. Se hai sperimentato due ore e non ricordi i confini nuovi, puoi chiedere:

In base alle ultime modifiche concordate, proponi un diff per docs/SPEC.md
che rifletta i nuovi confini. Non toccare il codice applicativo.

Poi valuti tu se accettare il diff.

Errori comuni

  1. Troppo vago — «Fai un’app Python sicura» non è un confine. Specifica moduli, hash, dipendenze ammesse.
  2. Solo security theater — vietare eval non basta: senza regole di comunicazione tra layer, la UI può comunque interrogare il DB.
  3. Niente DoD — «migliora il codice» senza criterio → decorazioni infinite e regressioni.

Domande Frequenti (FAQ)

Cos’è un manifest di progetto per l’LLM?

Un documento locale (SPEC.md) che fissa obiettivo, stack, confini e Definition of Done. Funziona da contratto operativo tra te e l’assistente tra una sessione e l’altra.

Qual è la differenza tra README e SPEC.md?

Il README parla agli umani (uso, installazione). Lo SPEC dà istruzioni imperative all’IA su come generare e cosa non fare.

Quali confini servono anche in un progetto piccolo?

Isolamento dati (UI ≠ storage diretto), divieto di dipendenze non autorizzate, niente credenziali hardcoded. Anche in 200 righe conta.

Dove metto il file e come lo cito in Cursor?

Di solito docs/SPEC.md. In chat: @docs/SPEC.md poi il prompt. Allinea la struttura alla guida architettura vibe-coded.

Devo riscrivere il manifest a ogni feature?

No. Aggiornalo quando cambiano confini, stack o obiettivo (es. da memoria a file su disco).

Posso mettere API key o password nello SPEC?

No. Usa finti esempi e punta a .env / secret del provider. Lo SPEC finisce nel contesto remoto del modello.

Il manifest sostituisce .cursorrules?

No. Lavorano in coppia: regole editor / stile risposta vs architettura e confini di questo progetto. Un pezzo dedicato alle .cursorrules è in coda nel cluster.

Letture opzionali

Alex Lunalbi

Alex Lunalbi

Security & privacy

Dona su PayPal

Scrivo di sicurezza digitale pratica e codice IA. Su ai riparo ogni procedura è verificata su macchine reali.

Tag
  • vibe coding,
  • llm,
  • architettura,
  • cursor