Skip to content

Integrazione GitHub ​

Triggerfish si integra con GitHub attraverso due approcci complementari:

Configurazione Rapida: Tool API REST ​

Il modo più veloce per connettere GitHub. Fornisce all'agent 14 tool integrati per repository, PR, issue, Actions e ricerca nel codice -- tutti con propagazione del taint consapevole della classificazione.

bash
triggerfish connect github

Questo guida nella creazione di un Personal Access Token a granularità fine, lo valida e lo archivia nel portachiavi del SO. Questo è tutto -- l'agent ora può utilizzare tutti i tool github_*.

Consultare la documentazione delle Skill per approfondimenti su come funzionano le skill, o eseguire triggerfish skills list per vedere tutti i tool disponibili.

Avanzato: gh CLI + Webhook ​

Per il ciclo completo di feedback di sviluppo (l'agent crea branch, apre PR, risponde alla code review), Triggerfish supporta anche la gh CLI tramite exec e consegna delle review basata su webhook. Questo usa tre componenti componibili:

  1. gh CLI tramite exec -- eseguire tutte le azioni GitHub (creare PR, leggere review, commentare, fare merge)
  2. Consegna delle review -- due modalità: eventi webhook (istantanei, richiedono endpoint pubblico) o polling basato su trigger tramite gh pr view (funziona dietro firewall)
  3. Skill git-branch-management -- insegna all'agent il flusso di lavoro completo branch/PR/review

Insieme, questi creano un ciclo di feedback di sviluppo completo: l'agent crea branch, effettua commit del codice, apre PR e risponde al feedback dei revisori -- nessun codice API GitHub personalizzato richiesto.

Prerequisiti ​

gh CLI ​

La GitHub CLI (gh) deve essere installata e autenticata nell'ambiente dove Triggerfish viene eseguito.

bash
# Installare gh (Fedora/RHEL)
sudo dnf install gh

# Installare gh (macOS)
brew install gh

# Installare gh (Debian/Ubuntu)
sudo apt install gh

# Autenticarsi
gh auth login

Verificare l'autenticazione:

bash
gh auth status

L'agent usa gh tramite exec.run("gh ...") -- non è necessaria nessuna configurazione separata del token GitHub oltre al login di gh.

Git ​

Git deve essere installato e configurato con nome utente ed email:

bash
git config --global user.name "Triggerfish Agent"
git config --global user.email "triggerfish@example.com"

Accesso al Repository ​

Lo spazio di lavoro dell'agent deve essere un repository git (o contenerne uno) con accesso push al remote.

Consegna delle Review ​

Ci sono due modi per l'agent di essere informato sulle nuove review delle PR. Sceglierne uno o utilizzare entrambi insieme.

Opzione A: Polling Basato su Trigger ​

Nessuna connettività in ingresso richiesta. L'agent interroga GitHub su uno schedule usando gh pr view. Funziona dietro qualsiasi firewall, NAT o VPN.

Aggiungere un cron job a triggerfish.yaml:

yaml
scheduler:
  cron:
    jobs:
      - id: pr-review-check
        schedule: "*/15 * * * *"
        task: >
          Check all open PR tracking files in scratch/pr-tracking/.
          For each open PR, query GitHub for new reviews or state changes
          using gh pr view. Address any review feedback, handle merges
          and closures.
        classification: INTERNAL

Oppure aggiungere "check open PRs for review feedback" al TRIGGER.md dell'agent per l'esecuzione durante il ciclo regolare di risveglio del trigger.

Opzione B: Configurazione Webhook ​

I webhook consegnano gli eventi di review istantaneamente. Questo richiede che il gateway di Triggerfish sia raggiungibile dai server GitHub (es. tramite Tailscale Funnel, reverse proxy o tunnel).

Passo 1: Generare un secret del webhook ​

bash
openssl rand -hex 32

Archiviarlo come variabile d'ambiente:

bash
export GITHUB_WEBHOOK_SECRET="<secret-generato>"

Aggiungerlo al profilo della shell o al gestore dei secret affinché persista tra i riavvii.

Passo 2: Configurare Triggerfish ​

Aggiungere l'endpoint webhook a triggerfish.yaml:

yaml
webhooks:
  endpoints:
    - id: github
      path: /webhook/github
      # il secret è archiviato nel portachiavi del SO
      classification: INTERNAL
      actions:
        - event: "pull_request_review"
          task: >
            A PR review was submitted. Read the PR tracking file from
            scratch/pr-tracking/ to recover context. Check out the branch,
            read the review, address any requested changes, commit, push,
            and comment on the PR with a summary of changes made.
        - event: "pull_request_review_comment"
          task: >
            An inline review comment was posted on a PR. Read the PR
            tracking file, check out the branch, address the specific
            comment, commit, push.
        - event: "issue_comment"
          task: >
            A comment was posted on a PR or issue. Check if this is a
            tracked PR by looking up tracking files in scratch/pr-tracking/.
            If tracked, check out the branch and address the feedback.
        - event: "pull_request.closed"
          task: >
            A PR was closed or merged. Read the tracking file. If merged,
            clean up: delete local branch, archive tracking file to
            completed/. Notify the owner of the merge. If closed without
            merge, archive and notify.

Passo 3: Esporre l'endpoint webhook ​

Il gateway di Triggerfish deve essere raggiungibile dai server GitHub. Opzioni:

Tailscale Funnel (raccomandato per uso personale):

yaml
# In triggerfish.yaml
remote:
  tailscale:
    serve: true
    funnel:
      enabled: true
      paths: ["/webhook/*"]

Questo espone https://<tua-macchina>.ts.net/webhook/github a internet.

Reverse proxy (nginx, Caddy):

Inoltrare /webhook/github alla porta locale del gateway.

ngrok (sviluppo/test):

bash
ngrok http 8080

Utilizzare l'URL generato come target del webhook.

Passo 4: Configurare il webhook GitHub ​

Nel repository GitHub (o organizzazione):

  1. Andare in Settings > Webhooks > Add webhook
  2. Impostare il Payload URL all'endpoint esposto:
    https://<tuo-host>/webhook/github
  3. Impostare Content type su application/json
  4. Impostare Secret allo stesso valore di GITHUB_WEBHOOK_SECRET
  5. Sotto Which events would you like to trigger this webhook?, selezionare Let me select individual events e spuntare:
    • Pull requests (copre pull_request.opened, pull_request.closed)
    • Pull request reviews (copre pull_request_review)
    • Pull request review comments (copre pull_request_review_comment)
    • Issue comments (copre issue_comment su PR e issue)
  6. Cliccare Add webhook

GitHub invierà un evento ping per verificare la connessione. Controllare i log di Triggerfish per confermare la ricezione:

bash
triggerfish logs --tail

Come Funziona il Ciclo di Feedback ​

Con webhook (istantaneo) ​

Ciclo di review webhook GitHub: l'agent apre la PR, attende, riceve webhook sulla review, legge il file di tracciamento, gestisce il feedback, effettua commit e push

Con polling basato su trigger (dietro firewall) ​

Review basata su trigger GitHub: l'agent apre la PR, scrive il file di tracciamento, attende il risveglio del trigger, interroga per le review, gestisce il feedback

Entrambi i percorsi usano gli stessi file di tracciamento. L'agent recupera il contesto leggendo il file di tracciamento PR da ~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/.

File di Tracciamento PR ​

L'agent scrive un file di tracciamento per ogni PR che crea:

~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/<nome-branch>.json

Schema:

json
{
  "branch": "triggerfish/agent-1/fix-auth-timeout",
  "prNumber": 42,
  "prUrl": "https://github.com/owner/repo/pull/42",
  "task": "Fix authentication timeout when token expires during long requests",
  "repository": "owner/repo",
  "createdAt": "2025-01-15T10:30:00Z",
  "updatedAt": "2025-01-15T10:30:00Z",
  "lastCheckedAt": "2025-01-15T10:30:00Z",
  "lastReviewId": "",
  "status": "open",
  "commits": [
    "feat: add token refresh before expiry",
    "test: add timeout edge case coverage"
  ]
}

Dopo il merge, i file di tracciamento vengono archiviati in completed/.

Policy di Merge ​

Per impostazione predefinita, l'agent non effettua auto-merge delle PR approvate. Quando una review viene approvata, l'agent notifica il proprietario e attende un'istruzione esplicita di merge.

Per abilitare l'auto-merge, aggiungere a triggerfish.yaml:

yaml
github:
  auto_merge: true

Quando abilitato, l'agent eseguirà gh pr merge --squash --delete-branch dopo aver ricevuto una review con approvazione.

L'auto-merge è disabilitato per impostazione predefinita per

sicurezza. Abilitarlo solo se ci si fida delle modifiche dell'agent e si hanno regole di protezione dei branch (revisori richiesti, controlli CI) configurate in GitHub. :::

Opzionale: Server MCP GitHub ​

Per un accesso più ricco all'API GitHub oltre a ciò che la gh CLI e i tool integrati forniscono, è possibile anche configurare il server MCP GitHub:

yaml
mcp_servers:
  - id: github
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    # Il token GitHub viene letto dal portachiavi del SO
    classification: CONFIDENTIAL

Questo non è richiesto per la maggior parte dei flussi di lavoro -- i tool integrati github_* (configurati tramite triggerfish connect github) e la gh CLI coprono tutte le operazioni comuni. Il server MCP è utile per query avanzate non coperte dai tool integrati.

Considerazioni di Sicurezza ​

ControlloDettaglio
Verifica HMACTutti i webhook GitHub sono verificati con HMAC-SHA256 prima dell'elaborazione (modalità webhook)
ClassificazioneI dati GitHub sono classificati come INTERNAL per impostazione predefinita -- codice e dati PR non filtrano verso canali pubblici
Isolamento della sessioneOgni evento webhook o risveglio del trigger genera una sessione isolata fresca
No Write-DownLe risposte dell'agent a eventi PR classificati INTERNAL non possono essere inviate a canali PUBLIC
Gestione credenzialiLa gh CLI gestisce il proprio token di autenticazione; nessun token GitHub archiviato in triggerfish.yaml
Denominazione branchIl prefisso triggerfish/ rende i branch dell'agent facilmente identificabili e filtrabili

Se il repository contiene codice sensibile (proprietario, critico per la

sicurezza), considerare di impostare la classificazione del webhook a CONFIDENTIAL anziché INTERNAL. :::

Risoluzione dei Problemi ​

Il webhook non riceve eventi ​

  1. Verificare che l'URL del webhook sia raggiungibile da internet (usare curl da una macchina esterna)
  2. In GitHub, andare in Settings > Webhooks e controllare la scheda Recent Deliveries per errori
  3. Verificare che il secret corrisponda tra GitHub e GITHUB_WEBHOOK_SECRET
  4. Controllare i log di Triggerfish: triggerfish logs --tail

Le review PR non vengono rilevate (modalità polling) ​

  1. Verificare che il cron job pr-review-check sia configurato in triggerfish.yaml
  2. Verificare che il daemon sia in esecuzione: triggerfish status
  3. Verificare che i file di tracciamento esistano in ~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/
  4. Testare manualmente: gh pr view <number> --json reviews
  5. Controllare i log di Triggerfish: triggerfish logs --tail

gh CLI non autenticata ​

bash
gh auth status
# Se non autenticata:
gh auth login

L'agent non riesce a fare push al remote ​

Verificare remote git e credenziali:

bash
git remote -v
gh auth status

Assicurarsi che l'account GitHub autenticato abbia accesso push al repository.

File di tracciamento non trovato durante la review ​

L'agent cerca i file di tracciamento in ~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/. Se il file manca, la PR potrebbe essere stata creata al di fuori di Triggerfish, o lo spazio di lavoro è stato pulito. L'agent dovrebbe notificare il proprietario e saltare la gestione automatizzata.