> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurazione dichiarativa

> Definisci il tuo ambiente in blueprint YAML. Le build vengono eseguite automaticamente per creare snapshot da cui si avvia ogni sessione.

<div id="getting-started">
  ## Per iniziare
</div>

<Info>
  **Prerequisiti**: Devin deve avere accesso ai tuoi repository prima che tu possa configurarne l'ambiente. Se non hai ancora configurato l'integrazione Git, consulta [Prima di iniziare](/it/onboard-devin/environment#before-you-start) per i passaggi di configurazione. Gli utenti Enterprise devono anche concedere a ogni org l'accesso ai rispettivi repo in **Enterprise Settings > Autorizzazioni repository**.
</Info>

<Info>
  **Usi ancora la configurazione classica?** Puoi passare alla configurazione dichiarativa in qualsiasi momento. Devin può gestire per te gran parte della migrazione. Consulta [Migrazione alla configurazione dichiarativa
  ](/it/onboard-devin/environment/migration).
</Info>

<Tabs>
  <Tab title="Lascia fare a Devin (consigliato)">
    Ideale per la maggior parte degli utenti. Devin analizza il tuo progetto, determina quali strumenti e dipendenze sono necessari e genera il blueprint per te. Tu devi solo rivederlo e approvarlo.

    <Steps>
      <Step title="Avvia una sessione Devin">
        Apri una nuova sessione e chiedi a Devin di configurare il repository. Ad esempio: *"Configura l'ambiente per questo repo."*
      </Step>

      <Step title="Rivedi e approva">Devin propone un blueprint. Vedrai delle **schede di suggerimento** nella tua timeline. Esaminale e fai clic su **Approva**.</Step>

      <Step title="Verifica">
        Una volta completata la build, avvia una nuova sessione. Devin si avvia dal nuovo snapshot con tutto già configurato. Prova a chiedere a Devin di eseguire i tuoi comandi di lint o di test per confermare che tutto funzioni.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Configurazione manuale">
    Ideale quando sai esattamente di cosa ha bisogno il tuo ambiente o vuoi il pieno controllo su ogni passaggio. È più veloce se hai già pronti i tuoi comandi.

    <Steps>
      <Step title="Vai alla configurazione dell'ambiente">
        Vai a **Settings > Environment > Blueprints** nella barra laterale della tua organizzazione.

        Se non vedi questa opzione, la tua organizzazione potrebbe essere ancora sulla configurazione classica. Consulta [Migrazione alla configurazione dichiarativa](/it/onboard-devin/environment/migration) per iniziare.
      </Step>

      <Step title="Aggiungi repository">
        Fai clic su **Aggiungi** nella sezione Repository. Seleziona i repository con cui vuoi che Devin lavori, quindi conferma.

        I repository aggiunti qui vengono clonati nell'ambiente di Devin durante ogni build. Puoi aggiungerne altri in qualsiasi momento.
      </Step>

      <Step title="Scrivi il tuo blueprint">
        Fai clic su un repository per aprire il relativo editor del blueprint. Ecco un semplice esempio:

        ```yaml theme={null}
        initialize: |
          curl -LsSf https://astral.sh/uv/install.sh | sh

        maintenance: |
          uv sync

        knowledge:
          - name: lint
            contents: uv run ruff check .
          - name: test
            contents: uv run pytest
        ```

        Per altri linguaggi e pattern, consulta la [Libreria di template](/it/onboard-devin/environment/templates).
      </Step>

      <Step title="Salva e avvia la build">Fai clic su **Salva**. Una build si avvia automaticamente (in genere 2–10 minuti). Monitora l'avanzamento da **Settings > Environment > Snapshots** in **Build corrente**.</Step>

      <Step title="Verifica">
        Quando la build mostra **Success**, avvia una nuova sessione Devin. Devin si avvia dal nuovo snapshot con tutto già configurato. Prova a chiedere a Devin di eseguire i tuoi comandi di lint o di test per verificare che l'ambiente funzioni.
      </Step>
    </Steps>
  </Tab>
</Tabs>

Il resto di questa guida descrive in dettaglio la procedura manuale. È utile anche per comprendere che cosa ha generato Devin se hai seguito il percorso consigliato.

<div id="how-it-works">
  ## Come funziona
</div>

La configurazione dichiarativa si basa su tre concetti:

| Concetto      | Cos'è                                                                                       | Analogia       |
| ------------- | ------------------------------------------------------------------------------------------- | -------------- |
| **Blueprint** | Una configurazione YAML che descrive cosa installare e come configurare l'ambiente di Devin | Dockerfile     |
| **Build**     | Il processo che esegue il blueprint, clona le repo e produce uno snapshot                   | `docker build` |
| **Snapshot**  | Un'immagine immutabile e avviabile dell'ambiente da cui vengono avviate le sessioni         | Docker image   |

**I blueprint descrivono ciò che vuoi ottenere.** Li scrivi e li modifichi nell'interfaccia Settings.

**Le build eseguono i blueprint per produrre snapshot.** Le build vengono eseguite automaticamente quando salvi un blueprint e periodicamente (\~ogni 24 ore) per mantenere aggiornate le dipendenze.

**Gli snapshot sono la base da cui si avviano le sessioni.** Ogni organizzazione ha uno snapshot attivo. Ogni sessione avvia una nuova copia. Le modifiche apportate nella sessione non vengono salvate nello snapshot.

<div id="blueprint-sections">
  ### Sezioni del blueprint
</div>

Un blueprint ha tre sezioni, più un blocco `clone` facoltativo per i blueprint a livello di repo:

| Sezione       | Scopo                                                                                            | Quando viene eseguita                                                                                 |
| ------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| `initialize`  | Installa strumenti, runtime e pacchetti di sistema                                               | Solo durante le build. I risultati vengono salvati nello snapshot.                                    |
| `maintenance` | Installa/aggiorna le dipendenze del progetto, scrive le configurazioni delle credenziali         | Durante le build. Viene mostrato all'agente all'inizio della sessione (non eseguito automaticamente). |
| `knowledge`   | Informazioni di riferimento per Devin (comandi di lint, test e build)                            | Non viene eseguito. Caricato nel contesto di Devin all'inizio della sessione.                         |
| `clone`       | Esegue l'override dei valori predefiniti di git clone per il repository (solo a livello di repo) | Applicato durante il passaggio di clone della build.                                                  |

**`initialize`** è pensato per le operazioni che devono avvenire una sola volta: runtime dei linguaggi, pacchetti di sistema, strumenti CLI globali.

**`maintenance`** è pensato per l'installazione delle dipendenze che devono rimanere aggiornate. Viene eseguito durante le build e mostrato all'agente all'inizio della sessione, così può eseguirlo di nuovo se le dipendenze sono cambiate (ad es. dopo aver recuperato la versione più recente del codice). I comandi non vengono eseguiti automaticamente all'inizio della sessione, ma devono comunque essere rapidi e incrementali (usa `npm install`, non `npm ci`).

**`knowledge`** contiene informazioni di riferimento e non viene eseguito. È qui che indichi a Devin i comandi corretti per lint, testing e build. Mantieni le voci leggere e focalizzate sui comandi eseguibili.

**`clone`** (solo a livello di repo) esegue l'override dei valori predefiniti che Devin usa quando clona la repo nello snapshot — ad esempio, facendo il checkout di un branch non predefinito (`ref`), cambiando la destinazione del clone (`path`) o saltando sottomoduli od oggetti LFS. Ogni campo è facoltativo. Per l'elenco completo dei campi, vedi [riferimento del blueprint → clone](/it/onboard-devin/environment/blueprint-reference#clone).

<Info>
  **Knowledge qui vs la funzionalità di prodotto Knowledge:** La sezione `knowledge` del blueprint serve per brevi riferimenti ai comandi legati all'ambiente. Per documenti di architettura, convenzioni e
  flussi di lavoro del team, usa invece la funzionalità [Knowledge](/it/product-guides/knowledge) standalone.
</Info>

<Info>
  **YAML multi-documento:** L'editor del blueprint supporta YAML multi-documento usando il separatore `---`. Questo ti consente di organizzare blueprint complessi in sezioni logiche all'interno di un singolo editor.
</Info>

Per la specifica completa dei campi (tipi di passaggio, variabili d'ambiente, segreti e file allegati), vedi il [riferimento del blueprint](/it/onboard-devin/environment/blueprint-reference).

<div id="blueprint-scope">
  ### Ambito dei blueprint
</div>

Puoi definire i blueprint a due livelli:

| Livello            | Dove configurare                                                      | Cosa inserire qui                                                                                         |
| ------------------ | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| **Organizzazione** | Settings > Environment > Blueprints > Configurazione a livello di org | Strumenti condivisi tra tutte le repo: runtime dei linguaggi, gestori di pacchetti, autenticazione Docker |
| **Repository**     | Settings > Environment > Blueprints > \[nome repo]                    | Configurazione specifica del progetto: `npm install`, comandi lint/test/build                             |

I blueprint sono **additivi**: i blueprint delle repo si aggiungono a quello della org. Il `maintenance` di una repo può usare gli strumenti installati nell'`initialize` della org. Se solo una repo ha bisogno di uno strumento, inseriscilo nel blueprint di quella repo. Se invece serve a tutte le repo, inseriscilo nel blueprint della org.

<Info>
  **Utenti Enterprise:** Esiste un terzo livello, il blueprint Enterprise, che si applica a tutte le organizzazioni. Per maggiori dettagli, consulta [Panoramica dell'ambiente Enterprise](/it/enterprise/environment-management/overview).
</Info>

<div id="builds-and-sessions">
  ## Build e sessioni
</div>

<div id="the-snapshot">
  ### Lo snapshot
</div>

La tua organizzazione ha **uno snapshot attivo**: un'immagine VM con i tuoi strumenti, repo e dipendenze già installati. Tutte le repo configurate vengono clonate e predisposte in quell'unica immagine. Ogni sessione si avvia da una copia pulita.

<div id="how-builds-work">
  ### Come funzionano le build
</div>

Una build crea un nuovo snapshot eseguendo i tuoi blueprint in sequenza:

```
1. Enterprise blueprint, if configured (runs in ~):
   a. initialize
   b. maintenance
2. Org blueprint (runs in ~):
   a. initialize
   b. maintenance
3. Clone all repositories (up to 10 concurrent).
   Each repo's blueprint may override clone defaults via the
   `clone` block (branch/tag, depth, submodules, LFS, etc.).
4. For each configured repo, in the order shown in Settings
   (runs in ~/repos/<repo-name>):
   a. initialize
   b. maintenance
5. Health check, then snapshot is saved
```

I layer sono **additivi**: i comandi specifici per repo possono usare gli strumenti installati dall'org o dal blueprint Enterprise. I livelli inferiori non possono sovrascrivere ciò che è stato configurato a un livello superiore. Le build richiedono in genere 5–15 minuti. I singoli passaggi scadono dopo 1 ora.

<div id="how-sessions-work">
  ### Come funzionano le sessioni
</div>

Ogni sessione avvia una **copia pulita** dello snapshot. Quando la sessione termina, tutte le modifiche vengono scartate. All'avvio della sessione:

1. Viene scaricata la versione più recente del codice per le repo pertinenti.
2. I comandi `maintenance` (Enterprise, org e repo) vengono resi disponibili all'agente come contesto — **non vengono eseguiti automaticamente**. L'agente può eseguirli di nuovo se rileva che le dipendenze sono cambiate dall'ultima build.
3. Le voci di `knowledge` di quella repo vengono caricate nel contesto di Devin.

<Info>
  **Knowledge è per repo.** Se hai configurato 5 repo, Devin vede solo le voci di Knowledge della repo su cui sta lavorando.
</Info>

<div id="what-triggers-a-build">
  ### Cosa attiva una build
</div>

| Attivazione                           | Descrizione                                                      |
| ------------------------------------- | ---------------------------------------------------------------- |
| Salvataggio di un blueprint           | Creazione, aggiornamento o eliminazione di un blueprint          |
| Aggiunta o rimozione di un repository | Qualsiasi modifica all'elenco dei repository                     |
| Aggiunta di un segreto del repository | Per rendere disponibili i nuovi segreti è necessaria una rebuild |
| Attivazione manuale                   | Facendo clic su **Build snapshot** nella UI                      |
| Aggiornamento periodico               | Automatico, circa ogni 24 ore                                    |
| Suggerimento di Devin                 | Devin propone una modifica al blueprint durante una session      |

Viene eseguita una sola build alla volta. Le nuove attivazioni annullano qualsiasi build in coda e ne avviano una nuova da zero.

<div id="build-statuses">
  ### Stati delle build
</div>

| Status        | Meaning                                                                                                                                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Success**   | Tutti i passaggi sono stati completati. Lo snapshot è pronto.                                                                                                                                                      |
| **Partial**   | Alcuni passaggi a livello di repo non sono andati a buon fine, ma lo snapshot è utilizzabile. Le repo completate con successo funzionano normalmente; per quelle non riuscite è necessario correggere i blueprint. |
| **Failed**    | Errore critico (configurazione dell'org o di Enterprise non riuscita). Lo snapshot non è utilizzabile.                                                                                                             |
| **Cancelled** | Sostituita da una build più recente o annullata manualmente.                                                                                                                                                       |

Una build **parziale** produce comunque uno snapshot funzionante. Se una repo su cinque ha un blueprint non valido, le altre quattro sono completamente funzionali.

<Tip>**La build non va a buon fine?** Consulta [Risoluzione dei problemi delle build](#troubleshooting-builds) per una guida al debug passaggio per passaggio.</Tip>

<div id="managing-your-environment">
  ## Gestione del tuo ambiente
</div>

<div id="repository-states">
  ### Stati dei repository
</div>

I repository possono trovarsi in tre stati nelle impostazioni di Environment:

| Stato           | Significato                                                                                              |
| --------------- | -------------------------------------------------------------------------------------------------------- |
| **Configurato** | Ha un blueprint con inizializzazione/manutenzione/Knowledge. È completamente configurato nello snapshot. |
| **Incluso**     | Clonato nello snapshot, ma senza blueprint personalizzato. Devin può accedere al codice.                 |
| **Disponibile** | Connesso all'org, ma non aggiunto all'ambiente. Non clonato.                                             |

**Incluso vs. configurato:** un repo "incluso" viene clonato in modo che Devin possa accedere al codice, ma non ha comandi di configurazione personalizzati. Un repo "configurato" ha istruzioni esplicite di inizializzazione/manutenzione/Knowledge.

<div id="secrets">
  ### Secrets
</div>

Fai riferimento ai Secrets usando la sintassi `$VARIABLE_NAME`. Aggiungili nella scheda **Secrets** dell'editor del blueprint.

```yaml theme={null}
maintenance:
  - name: Configure private registry
    run: npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
```

I segreti sono disponibili come variabili d'ambiente durante le build e le sessioni. Vengono rimossi prima che lo snapshot venga salvato, ma se un comando scrive un valore segreto in un file di configurazione durante `initialize`, quel valore rimane nello snapshot. Inserisci in `maintenance` i passaggi che scrivono le credenziali, così vengono aggiornati durante le build periodiche.

Per maggiori dettagli sugli ambiti dei segreti e sul loro comportamento, consulta il [riferimento del blueprint](/it/onboard-devin/environment/blueprint-reference#environment-variables-and-secrets).

<div id="multiple-repositories">
  ### Repository multipli
</div>

Ogni repo ha il proprio blueprint. Durante una build, tutte le repo vengono configurate nello stesso snapshot, clonate in directory separate e con le dipendenze installate in modo indipendente.

Se due repo installano versioni diverse di uno strumento globale o modificano file condivisi (come `~/.bashrc`), ha la precedenza quella eseguita per ultima. Per evitare conflitti, inserisci le installazioni degli strumenti condivisi nel blueprint org-wide.

<div id="github-actions">
  ### GitHub Actions
</div>

Invece di scrivere script shell per installare strumenti e runtime, puoi fare riferimento direttamente alle GitHub Actions nel tuo blueprint. Devin scarica ed esegue l'azione durante la build, proprio come i runner CI di GitHub eseguono i passaggi di un'azione.

```yaml theme={null}
initialize:
  - name: Install Python 3.12
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
```

Questo è particolarmente utile per le azioni di configurazione dei linguaggi come `setup-python`, `setup-node` e `setup-go`, che si occupano automaticamente della gestione delle versioni e della configurazione del PATH.

Per dettagli sulla sintassi, esempi e limitazioni, consulta [GitHub Actions nei blueprint](/it/onboard-devin/environment/github-actions).

<div id="monorepos">
  ### Monorepo
</div>

Puoi eseguire comandi nelle sottodirectory tramite subshell oppure creare blueprint dedicati a livello di workspace per i singoli package. Devin supporta anche voci di Knowledge per package, in modo che ogni workspace abbia i propri comandi di lint, test e build.

Consulta [Workspace e monorepo](/it/onboard-devin/environment/workspaces) per istruzioni di configurazione ed esempi.

<div id="pinning-and-auto-updates">
  ### Blocco e aggiornamenti automatici
</div>

Per impostazione predefinita, Devin usa lo snapshot della build riuscita più recente. Il **blocco** ti consente di fissare lo snapshot di una build specifica. È utile quando una nuova build introduce una regressione o quando vuoi congelare l'ambiente per un gruppo di sessioni.

**Per bloccare:** vai a **Settings > Environment > Snapshot**, trova la build nella cronologia (deve essere `success` o `partial` e avere meno di 7 giorni) e fai clic su **Blocca**. Quando il blocco è attivo, gli aggiornamenti periodici vengono ignorati e l'interfaccia mostra **Aggiornamenti automatici in pausa**.

**Per sbloccare:** fai clic su **Riprendi aggiornamenti automatici**. Devin passa alla build riuscita più recente.

<div id="git-backed-blueprints">
  ### Blueprint basati su Git
</div>

Puoi memorizzare i blueprint come file `.devin/blueprint.yaml` direttamente nel tuo repository. Dopo aver unito le modifiche, chiama l'API di sincronizzazione (o fai clic su Sync nella UI) per aggiornare il blueprint, quindi avvia una build. In questo modo ottieni lo stesso flusso di lavoro di revisione del codice che usi per il codice dell'applicazione, con la sincronizzazione automatizzata tramite un passaggio di CI.

Consulta [Git-backed blueprints](/it/onboard-devin/environment/git-backed-blueprints) per le istruzioni di configurazione e i dettagli.

<div id="troubleshooting-builds">
  ## Risoluzione dei problemi di build
</div>

<div id="initialize-step-failed">
  ### Il passaggio Initialize non è riuscito
</div>

**Cause comuni:** errore di battitura in un comando shell, pacchetto non disponibile, timeout di rete, riferimento errato a GitHub Action.

**Soluzione:** verifica i log di build per individuare l'errore esatto. Aggiorna `initialize` nel tuo blueprint e salva. Una nuova build viene attivata automaticamente.

<div id="repository-clone-failed">
  ### Clonazione del repository non riuscita
</div>

**Cause comuni:** Devin non ha accesso alla repo, la repo è stata rinominata/spostata/eliminata, problema di rete temporaneo.

**Soluzione:** Verifica l'accesso alla repo nelle impostazioni del provider Git. Rimuovi e aggiungi nuovamente la repo se è stata rinominata.

<div id="maintenance-step-failed">
  ### Passaggio di manutenzione non riuscito
</div>

**Cause comuni:** conflitto tra dipendenze, libreria di sistema mancante, spazio su disco esaurito, file di lock non aggiornato.

**Soluzione:** Verifica i log del pacchetto o comando che ha causato l'errore. Aggiorna `maintenance` o `initialize` per installare le dipendenze mancanti, oppure correggi il file di lock nel tuo repository.

<div id="build-timeout">
  ### Timeout della build
</div>

Ogni passaggio ha un timeout di 1 ora. Cause comuni: la compilazione dal sorgente di dipendenze native di grandi dimensioni (utilizza binari precompilati), il download di artefatti di grandi dimensioni, comandi che restano bloccati in attesa di input (tutti i comandi devono essere non interattivi).

<div id="iterating-on-fixes">
  ### Perfezionare le soluzioni
</div>

1. Verifica i log di build per individuare l'errore
2. Aggiorna il blueprint pertinente
3. Salva (una nuova build si attiva automaticamente)
4. Monitora i log della nuova build
5. Ripeti finché la build non va a buon fine

<Info>Non è necessario attendere che una build fallita termini. Salvare una nuova configurazione annulla qualsiasi build in coda e ne avvia una nuova da zero.</Info>

<div id="next-steps">
  ## Prossimi passaggi
</div>

<CardGroup cols={2}>
  <Card title="Build differenziali" icon="bolt" href="/it/onboard-devin/environment/differential-builds">
    Accelera le build ricompilando solo i workspace i cui blueprint sono cambiati.
  </Card>

  <Card title="GitHub Actions nei blueprint" icon="github" href="/it/onboard-devin/environment/github-actions">
    Usa GitHub Actions per installare linguaggi, strumenti e SDK senza dover scrivere script shell.
  </Card>

  <Card title="Workspace e monorepo" icon="folder-tree" href="/it/onboard-devin/environment/workspaces">
    Subshell, ambiti del workspace e voci di Knowledge per repo multi-package.
  </Card>

  <Card title="Riferimento del blueprint" icon="book" href="/it/onboard-devin/environment/blueprint-reference">
    Riferimento completo dei campi: tipi di passaggio, variabili d'ambiente, segreti e file allegati.
  </Card>

  <Card title="Libreria di template" icon="copy" href="/it/onboard-devin/environment/templates">
    Blueprint da copiare e incollare per Python, Node.js, Go, Java, Ruby, Rust e pattern avanzati.
  </Card>

  <Card title="Blueprint basati su Git" icon="code-branch" href="/it/onboard-devin/environment/git-backed-blueprints">
    Archivia i blueprint nel tuo repo come `.devin/blueprint.yaml` e sincronizzali tramite l'API o la UI.
  </Card>

  <Card title="Migrazione dalla configurazione classica" icon="arrow-right" href="/it/onboard-devin/environment/migration">
    Guida passo passo per passare dalla procedura guidata interattiva ai blueprint dichiarativi.
  </Card>

  <Card title="Gestione degli ambienti Enterprise" icon="building" href="/it/enterprise/environment-management/overview">
    Gestione degli ambienti a livello Enterprise: gerarchia a 3 livelli, segreti e configurazione tra org.
  </Card>
</CardGroup>
