Contesto di esecuzione e limiti

Completato

Una volta che un agente può eseguire azioni e connettersi agli strumenti, la domanda successiva è dove e come vengono eseguite tali azioni.

Il contesto di esecuzione definisce i limiti all'interno del quale opera un agente. Questo include il repository a cui può accedere, il ramo su cui funziona, il flusso di lavoro che esegue le attività e le autorizzazioni concesse.

Senza un contesto di esecuzione chiaramente definito, il comportamento dell'agente diventa imprevedibile e non sicuro.

In questa unità si apprenderà quanto segue:

  • Significato del contesto di esecuzione in GitHub
  • In che modo l'ambito del repository e del ramo definiscono i limiti
  • Come i flussi di lavoro isolano l'esecuzione
  • Come le autorizzazioni applicano il controllo sulle azioni dell'agente

Che cos'è il contesto di esecuzione?

Il contesto di esecuzione è il set di vincoli che definiscono dove opera un agente e a cosa può accedere.

In GitHub il contesto di esecuzione include:

  • Il repository in cui l'agente sta lavorando
  • Il ramo a cui mira l'agente
  • Il flusso di lavoro che esegue le attività
  • Autorizzazioni concesse a tale flusso di lavoro

Questo contesto determina sia la visibilità che la funzionalità.

Ambito del repository

Gli agenti operano sempre all'interno di un repository. Possono leggere e modificare solo il codice all'interno di tale repository. Interagiscono con problemi, richieste pull e flussi di lavoro associati. Non hanno accesso ad altri repository, a meno che non vengano concessi diritti in modo esplicito.

L'ambito del repository è il primo limite che limita il comportamento dell'agente.

Come viene configurato l'ambito del repository

Per gli agenti come l'agente cloud Copilot, questo limite viene configurato in modo esplicito a livello di repository.

Per eseguire questa configurazione:

  1. Apri il repository su GitHub
  2. Fare clic su Impostazioni
  3. Nella barra laterale, sotto Codice e automazione, fare clic su Copilot
  4. Selezionare Agente cloud
  5. Abilitare e configurare l'agente per quel repository
  6. Salvare la configurazione

Dopo la configurazione, l'agente ha come ambito tale repository e non può operare al di fuori di esso.

Ambito personalizzato dell'agente all'interno di un repository

Gli agenti personalizzati operano all'interno dello stesso limite del repository, ma possono perfezionarne ulteriormente l'ambito tramite la configurazione.

All'interno di un file dell'agente personalizzato (ad esempio, .github/agents/security-reviewer.agent.md), l'ambito viene definito usando campi come:

  • applyTo → limita i file o le directory su cui si concentra l'agente
  • strumenti → definisce le azioni che l'agente può eseguire

Esempio:

applyTo:
    - '**/*.js'
    - 'src/auth/**' tools:
    - read_file
    - search_files

Per configurare un agente personalizzato:

  1. Creare la directory .github/agents/ nel repository
  2. Aggiungere un file dell'agente con estensione agent.md
  3. Definire l'ambito usando applyTo e gli strumenti
  4. Eseguire il commit e il push del file

In questo modo l'agente può concentrarsi solo su parti specifiche del repository e operare con funzionalità limitate.

In che modo questo rientra nel contesto di esecuzione

L'ambito del repository definisce il percorso in cui opera l'agente, mentre la configurazione dell'agente personalizzato definisce le operazioni che l'agente può accedere e eseguire entro tale limite.

Insieme creano un controllo a più livelli.

Isolamento basato su ramo

Gli agenti non lavorano direttamente nel ramo principale.

Sono invece:

  • Creare un nuovo ramo dal ramo ypu selezionato
  • Apportare modifiche all'interno di tale ramo
  • Aprire una richiesta pull destinata a un ramo di base

Ciò isola le modifiche e garantisce che tutte le modifiche vengano esaminate prima di essere unite.

L'isolamento basato su rami è un meccanismo di sicurezza chiave.

Configurare un agente per l'uso dell'ambito basato su ramo

Per configurare un agente cloud di Copilot per operare con un ambito basato su rami, seguire questa procedura:

  1. Selezione di un ramo di base:
    • Accedere alla pagina degli Agenti: vai alla sezione Agenti nel tuo repository GitHub.
  2. Scegliere il ramo di base: quando si delegano le attività all'agente di codifica Copilot, è possibile selezionare un ramo di base specifico. In questo modo l'agente può creare un nuovo ramo in base al ramo selezionato anziché al ramo predefinito (in genere "main").

Gli agenti personalizzati operano all'interno di un repository, ma non controllano direttamente il comportamento dei rami. L'ambito basato su ramo è determinato dal sistema che esegue l'agente.

Come funziona

Se usato con un agente cloud:

  • Il sistema crea automaticamente un ramo
  • Applica le modifiche
  • Apre una richiesta pull

Se usato nei flussi di lavoro (CI):

  • Il flusso di lavoro determina il ramo
  • L'agente viene eseguito nel contesto del ramo

Cosa controllano gli agenti personalizzati

Gli agenti personalizzati definiscono:

  • Su quali file si concentrano (applyTo)
  • Quali azioni possono eseguire (strumenti)
  • Come si comportano (istruzioni)

Ma non definiscono:

  • Creazione di rami
  • Comportamento della richiesta pull
  • Isolamento dell'esecuzione

L'ambito di applicazione basato sul ramo viene sempre applicato dal contesto di esecuzione e non dall'agente personalizzato stesso.

Abilitare un agente per eseguire azioni autonome, inclusa la creazione di rami e richieste pull

Gli agenti possono eseguire azioni autonome all'interno di un repository dopo l'abilitazione e l'esecuzione di un'attività.

Steps:

  1. Abilitare l'agente per il repository.

    • Passare a Impostazioni → Copilot → agente cloud
    • Abilitare l'agente, selezionare il repository
  2. Assegnare un'attività all'agente.

    • Problema, Copilot Chat o interfaccia degli agenti
    • Esempio: correzione di un bug, implementazione di una funzionalità
  3. Consentire all'agente di eseguire l'attività.

    L'agente farà:

    • Creare un ramo
    • Apportare modifiche al codice
    • Eseguire il commit e il push degli aggiornamenti
  4. Rivedere e finalizzare.

    Dopo essere soddisfatti delle modifiche e dei risultati del codice, attivare una pull request. È possibile richiedere modifiche nella richiesta pull o procedere con il merge.

L'agente funziona in modo autonomo all'interno del repository creando rami, modificando il codice e aprendo le richieste pull, pur continuando a funzionare all'interno di un flusso di lavoro controllato e controllabile.

Limiti del flusso di lavoro

L'esecuzione avviene all'interno di flussi di lavoro basati su GitHub Actions. Ogni flusso di lavoro definisce i trigger di esecuzione, i passaggi eseguiti e l'ambiente in cui viene eseguito il codice. I flussi di lavoro fungono da contenitori di esecuzione controllata. Assicurano che le attività vengano eseguite in un ambiente pulito, l'esecuzione sia ripetibile e i log e i risultati vengano acquisiti. I flussi di lavoro sono anche il modo in cui viene eseguito il comportamento dell'agente negli ambienti CI.

Limiti di autorizzazione

Le autorizzazioni definiscono le operazioni che un agente può eseguire all'interno del contesto di esecuzione.

Ai flussi di lavoro vengono assegnate autorizzazioni tramite token, ad esempio il GITHUB_TOKEN.

Queste autorizzazioni possono consentire o limitare:

  • Lettura del contenuto del repository
  • Scrittura di codice
  • Creazione di richieste pull
  • Accesso ai segreti
  • Attivazione di flussi di lavoro

Le autorizzazioni devono essere sempre definite in modo esplicito e minimizzate.

Protezioni nei flussi di lavoro agentici di GitHub

I flussi di lavoro agentici di GitHub sono progettati con difesa avanzata. I controlli chiave includono:

  • Token di sola lettura per impostazione predefinita in modo che l'agente possa esaminare lo stato del repository senza modificarlo direttamente
  • Output sicuri che consentono all'agente di proporre azioni mentre un passaggio separato gestito decide cosa è consentito
  • Assenza di segreti nel processo dell'agente, mantenendo le credenziali sensibili all'esterno del runtime usato dall'agente di codifica
  • Esecuzione in contenitori in modalità sandbox
  • Isolamento della rete e accesso in uscita consentito
  • Rilevamento delle minacce che analizza gli output proposti prima dell'applicazione di qualsiasi azione di scrittura

Questo modello aiuta a ridurre i rischi di agenti con privilegi elevati, iniezioni di comandi e modifiche impreviste del repository.

Perché i confini sono importanti

Il contesto di esecuzione è ciò che rende i sistemi agente sicuri.

Combinando:

  • Ambito del repository
  • Isolamento del ramo
  • Esecuzione del flusso di lavoro
  • Controllo delle autorizzazioni

GitHub assicura che gli agenti funzionino entro limiti chiari e applicabili.

Ciò impedisce:

  • Modifiche non controllate al codice di produzione
  • Accesso a risorse impreviste
  • Esecuzione non sicura o non revisionata

Modalità di chiamata degli agenti tramite flussi di lavoro

Per eseguire attività guidate dall'agente come parte dell'integrazione continua, è necessario richiamarle all'interno di un flusso di lavoro. In questa configurazione, il flusso di lavoro diventa il limite dell'esecuzione e l'agente viene eseguito all'interno dello strumento di esecuzione usando passaggi e autorizzazioni definiti.

Steps:

  1. Creare o aprire un file del flusso di lavoro nel repository: .github/workflows/agent-task.yml

  2. Definire quando deve essere eseguito il flusso di lavoro:

    on:
     workflow_dispatch: 
    schedule: - cron: '0 9 * * *' 
    

    È anche possibile usare eventi come push o pull_request a seconda del caso d'uso.

  3. Impostare le autorizzazioni del flusso di lavoro:

    permissions: 
        contents: read
    

    Modificare le autorizzazioni in base alle operazioni che il flusso di lavoro deve eseguire.

  4. Definire un processo e uno strumento di esecuzione:

    jobs: 
    	agent-task: 
    		runs-on: ubuntu-latest 
    
    
  5. Vedere il repository:

    uses: actions/checkout@v4
    
  6. Configurare Node.js:

    uses: actions/setup-node@v4 
    with: node-version: '18' 
    
  7. Fornire l'autenticazione:

    env: COPILOT_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    
  8. Esegui l'attività dell'agente:

    run: | npx @github/copilot-cli 
    -p "Summarize recent changes in this repository" 
    --no-ask-user (Optional) 
    
  9. Usare un agente personalizzato:

    run: | npx @github/copilot-cli 
    --agent security-reviewer 
    -p "Review this code for vulnerabilities" 
    --no-ask-user
    

Il flusso di lavoro diventa il percorso di esecuzione controllato per l'agente. L'attività viene eseguita in uno strumento di esecuzione definito, con un trigger definito, all'interno di un contesto di repository definito e con solo le autorizzazioni concesse a tale flusso di lavoro.

Ambito del ramo ed esecuzione del flusso di lavoro

I flussi di lavoro vengono eseguiti su un branch specifico.

Poiché gli agenti apportano modifiche in un ramo:

  • L'ambito dell'esecuzione del flusso di lavoro viene definito in base al ramo
  • Le modifiche sono isolate dal ramo predefinito
  • La convalida viene eseguita prima dell'unione

Ciò garantisce che l'attività dell'agente rimanga contenuta all'interno di un ambito di esecuzione controllato.

Punto chiave

Il contesto di esecuzione definisce dove operano gli agenti. I limiti, ad esempio l'ambito del repository, l'isolamento dei rami, i flussi di lavoro e le autorizzazioni, assicurano che le azioni dell'agente rimangano controllate, prevedibili e sicure.

Si apprenderà quindi a progettare percorsi di esecuzione sicuri, tra cui ripetizioni, ripristini agli stati precedenti e meccanismi di escalation.