Novità in Semaphore UI 2.21

CTO e fondatore
In sviluppo

Aggiunge i modelli Claude Code Agent e Codex Agent per eseguire agenti IA di programmazione, le espressioni nel prompt, un inventario MCP e un log dell'attività in forma di trascrizione.

Discuti questa versione con l’IA

L'editor di un modello Claude Code Agent

Semaphore UI 2.21 esegue agenti IA di programmazione. Due nuove applicazioni, Claude Code Agent e Codex Agent, avviano lo strumento a riga di comando dell’agente in un repository e gli passano un prompt. L’agente lavora in autonomia e riporta ciò che fa nel log dell’attività. Il prompt può ricevere valori dai gruppi di variabili e dalle variabili di survey, l’agente può chiamare gli strumenti dei server MCP e il log mostra il suo lavoro come una trascrizione.

Semaphore 2.21 è in sviluppo. Non è ancora stato rilasciato: questa pagina descrive ciò che è già presente nel ramo di sviluppo e crescerà fino al rilascio. I dettagli possono ancora cambiare.

Novità principali

  • Modelli Claude Code Agent e Codex Agent: un agente è un modello come gli altri. Si avvia a mano, con una pianificazione, con un’integrazione o come passo di un workflow.
  • Espressioni nel prompt: ${{ vars.extra.NAME }}, ${{ vars.env.NAME }}, ${{ secrets.extra.NAME }} e ${{ secrets.env.NAME }} inseriscono nel prompt i valori dei gruppi di variabili e delle variabili di survey, come in GitHub Actions.
  • Prompt di un’attività: un modello può consentire a chi avvia un’attività di sostituire il prompt per una singola esecuzione.
  • Inventario MCP: un nuovo tipo di inventario con i server MCP remoti i cui strumenti l’agente può chiamare. I token sono conservati cifrati.
  • Log dell’attività dell’agente: il testo dell’agente, le chiamate agli strumenti, i subagenti e un riepilogo con i token e il costo, aggiornati mentre l’agente lavora.
  • Isolamento: ogni attività riceve una propria directory di configurazione dell’agente, vuota. I token e i secret inseriti nel prompt sono mascherati nel log.

Modelli di agenti IA

Il menu Nuovo modello con le voci Claude Code Agent e Codex Agent

Un modello di agente avvia Claude Code o Codex in una directory di un repository e gli passa un prompt. Usalo per il lavoro che altrimenti descriveresti a un collega: rivedere l’ultimo commit, trovare e correggere un test che fallisce, aggiornare una dipendenza e aprire una pull request.

Per crearne uno, vai in Modelli di attività, fai clic su Nuovo modello e poi su Claude Code Agent o Codex Agent.

Campo Descrizione
Repository Il repository in cui lavora l’agente. Semaphore lo clona o lo aggiorna prima dell’attività, come per qualsiasi altro modello.
Percorso della sottodirectory Facoltativo. La directory del repository in cui viene avviato l’agente.
Server MCP Facoltativo. Un inventario MCP con i server i cui strumenti l’agente può chiamare.
Gruppi di variabili Variabili e secret per l’agente: la chiave API, i valori per le espressioni nel prompt, le variabili d’ambiente del processo dell’agente.
Prompt L’istruzione con cui viene eseguito l’agente.
Argomenti CLI Argomenti aggiuntivi per il comando dell’agente: il modello, i limiti, i permessi.
Variabili di survey Domande poste all’avvio dell’attività. Le risposte possono essere inserite nel prompt.

Cosa serve. Lo strumento a riga di comando dell’agente deve essere installato sulla macchina che esegue le attività, il server Semaphore o il runner:

Applicazione Comando Installazione
Claude Code Agent claude npm install -g @anthropic-ai/claude-code
Codex Agent codex npm install -g @openai/codex

Semaphore abilita un’applicazione quando all’avvio trova il suo comando in PATH. Un amministratore può anche abilitarla e impostare il percorso dell’eseguibile nella pagina Applicazioni.

Come viene eseguito l’agente. Semaphore avvia l’agente nella directory del repository con il prompt sullo standard input, così il prompt non compare nell’elenco dei processi:

Applicazione Comando
Claude Code Agent claude -p --output-format=stream-json --verbose --include-partial-messages --mcp-config=<file> --strict-mcp-config --no-session-persistence <CLI args>
Codex Agent codex exec --json --skip-git-repo-check <CLI args> -
  • Nulla viene conservato tra un’attività e l’altra. Ogni esecuzione è una nuova sessione dell’agente. Ciò che deve sopravvivere a un’esecuzione va nel repository: un commit, una pull request, un file.
  • Sui runner Docker e Kubernetes l’agente viene eseguito in un container, quindi l’immagine dell’executor deve contenere il comando claude o codex.

Chiave API

L’agente prende la chiave API da una variabile d’ambiente. Aggiungi la chiave a un gruppo di variabili del modello come variabile d’ambiente segreta:

Applicazione Variabile Accettata anche
Claude Code Agent ANTHROPIC_API_KEY CLAUDE_CODE_OAUTH_TOKEN
Codex Agent OPENAI_API_KEY CODEX_API_KEY

Il login dell’utente che esegue Semaphore non viene usato: la directory di configurazione dell’agente viene creata per l’attività ed è vuota, quindi una chiave di un gruppo di variabili è l’unico modo per autenticarsi. Se nessuna delle variabili è impostata, il log dell’attività indica quale aggiungere.

Espressioni nel prompt

Il prompt di un modello può ricevere valori dai gruppi di variabili del modello. Scrivi un’espressione tra doppie parentesi graffe, come in GitHub Actions, e Semaphore la sostituisce all’avvio dell’attività:

Espressione Valore
${{ vars.extra.NAME }} Una variabile extra di un gruppo di variabili.
${{ vars.env.NAME }} Una variabile d’ambiente di un gruppo di variabili.
${{ secrets.extra.NAME }} Una variabile extra segreta di un gruppo di variabili.
${{ secrets.env.NAME }} Una variabile d’ambiente segreta di un gruppo di variabili.
Find the flaky tests in services/api and fix them.
Open a pull request against ${{ vars.extra.base_branch }} and post its link
to ${{ vars.env.TRACKER_URL }} with the token ${{ secrets.env.TRACKER_TOKEN }}.
  • Le variabili di survey sono variabili extra: la risposta alla variabile di survey version è ${{ vars.extra.version }}, e una segreta è ${{ secrets.extra.NAME }}. Una variabile di survey consegnata come variabile d’ambiente si trova invece sotto env. Una variabile di survey lasciata senza risposta dà una stringa vuota.
  • Una variabile inesistente fa fallire l’attività prima che l’agente parta, con un messaggio che indica l’espressione. Semaphore non esegue un agente con un buco nel prompt.
  • Un’espressione scritta in modo errato viene rifiutata al salvataggio del modello: ${{ secrets.TOKEN }} non ha extra né env.
  • Le altre espressioni vengono lasciate così come sono. Solo vars.… e secrets.… appartengono a Semaphore, quindi un prompt può chiedere all’agente di scrivere un workflow che contiene ${{ github.sha }}. Per mantenere come testo un’espressione vars o secrets, anteponi un altro simbolo del dollaro: $${{ secrets.env.NAME }}.
  • Un valore viene inserito così com’è. Una stringa viene usata come è scritta, un elenco o un oggetto come JSON. Nel valore non vengono cercate di nuovo espressioni.
  • Un secret inserito nel prompt viene mascherato nel log dell’attività, ovunque l’agente lo ripeta.

Un secret nel prompt viene inviato al provider del modello insieme al resto del prompt. È preferibile passare un secret agli strumenti dell’agente: come variabile d’ambiente segreta di un gruppo di variabili o come token di un server MCP.

Prompt di un’attività

Con la casella Prompt abilitata nel modello, il modulo dell’attività mostra il prompt del modello e consente di modificarlo per una singola esecuzione. Una pianificazione, un’integrazione o un passo di un workflow possono conservare un proprio prompt allo stesso modo. Tramite l’API, invialo nei parametri dell’attività:

{
  "template_id": 12,
  "params": {
    "prompt": "Review the changes of the last release and list the risky ones."
  }
}

Un prompt fornito da un’attività viene usato esattamente come è scritto: le espressioni nel prompt vengono sostituite solo nel prompt salvato nel modello. In questo modo le variabili e i secret del progetto restano fuori dalla portata di chi può soltanto eseguire attività. Se il modello non lo consente, un’attività che porta con sé un prompt viene rifiutata.

Server MCP

Il modulo di un inventario MCP con tre server

Un agente può chiamare gli strumenti di server MCP remoti: un issue tracker, una ricerca nella documentazione, un tuo servizio. I server sono conservati in un inventario del nuovo tipo Inventario MCP, e un unico inventario serve sia i modelli Claude Code sia quelli Codex.

Campo Descrizione
Interruttore Un server disattivato resta nell’elenco e non viene passato all’agente.
Nome Il nome con cui l’agente conosce il server: fino a 64 lettere, cifre, - e _.
URL Un indirizzo http o https di un server che parla MCP su HTTP o SSE. Un nome utente o una password nell’URL non sono accettati.
Token Facoltativo. L’agente lo invia nell’header Authorization come bearer token.
  • Un token salvato viene conservato cifrato e non viene più mostrato: digitane uno nuovo per sostituirlo, oppure rimuovilo.
  • Il token arriva all’agente come variabile d’ambiente del suo processo. Non viene scritto nel file di configurazione dell’agente, nella riga di comando né nel log dell’attività.
  • L’agente riceve esattamente questi server. I loro strumenti sono approvati in anticipo, poiché non c’è nessuno a confermare una chiamata, e i server MCP configurati per l’utente che esegue Semaphore non vengono usati.

Log dell’attività

Il log di un'attività Claude Code: il modello, le chiamate agli strumenti, un subagente, il riepilogo

Il log dell’attività mostra il lavoro dell’agente mentre avviene, come una trascrizione e non come gli eventi JSON stampati dallo strumento a riga di comando:

  • Il testo dell’agente, riga per riga. Codex stampa un messaggio quando è completo.
  • Le chiamate agli strumenti, ciascuna su una riga: lo stato, il server MCP e lo strumento, gli argomenti. Fai clic su una riga per vedere gli argomenti e il risultato. Una chiamata fallita è aperta fin dall’inizio.
  • I subagenti: le righe di un subagente sono contrassegnate con il suo nome.
  • La prima riga di un’esecuzione di Claude Code indica il modello e i server MCP, con in rosso quelli che non si sono connessi.
  • Il riepilogo alla fine: il numero di turni, la durata, i token e il costo, per quanto l’agente li riporta.

Log grezzo mostra lo stesso log come testo semplice.

Sicurezza

  • Un agente esegue comandi. Entro i permessi che il suo strumento a riga di comando gli concede, l’agente può leggere e modificare la directory del repository, eseguire programmi come l’utente che esegue le attività e chiamare gli strumenti dei suoi server MCP. Assegna a un modello di agente un repository e dei token con i diritti più ristretti sufficienti per il lavoro, e un runner separato per il lavoro che vuoi tenere distinto dal server.
  • Ogni attività ha una propria directory di configurazione dell’agente (CLAUDE_CONFIG_DIR, CODEX_HOME), creata per l’attività e rimossa al termine. Le impostazioni, i login e i server MCP dell’utente che esegue Semaphore non arrivano all’agente, e una variabile di un gruppo di variabili non può reindirizzare la directory.
  • Il prompt e ciò che l’agente legge vanno al provider del modello: i file del repository, l’output dei comandi, i risultati degli strumenti.
  • Un repository può dare istruzioni all’agente. Il testo nei file che l’agente legge, in una issue o nel risultato di uno strumento può cambiare ciò che l’agente fa. Non puntare un agente dotato di token potenti verso contenuti che non controlli.
  • I token e i secret sono mascherati nel log dell’attività: i token dei server MCP e i secret inseriti nel prompt vengono sostituiti con ********.
  • Le variabili e i secret restano fuori dalla riga di comando di un agente, dove l’elenco dei processi li mostrerebbe.

Documentazione

La guida utente ha una pagina con ogni campo e ogni regola: Agenti IA.