
Semaphore UI 2.21 führt KI-Coding-Agenten aus. Zwei neue Anwendungen, Claude Code Agent und Codex Agent, starten das Kommandozeilenwerkzeug des Agenten in einem Repository und übergeben ihm einen Prompt. Der Agent arbeitet selbstständig und berichtet im Task-Log, was er tut. Der Prompt kann Werte aus Variablengruppen und Survey-Variablen übernehmen, der Agent kann die Tools von MCP-Servern aufrufen, und das Log zeigt seine Arbeit als Transkript.
Semaphore 2.21 befindet sich in Entwicklung. Es ist noch nicht veröffentlicht: Diese Seite beschreibt, was bereits im Entwicklungszweig enthalten ist, und wächst bis zum Release. Details können sich noch ändern.
Highlights
- Vorlagen für Claude Code Agent und Codex Agent: Ein Agent ist eine Vorlage wie jede andere. Starten Sie ihn von Hand, über einen Zeitplan, eine Integration oder als Schritt eines Workflows.
- Prompt-Ausdrücke:
${{ vars.extra.NAME }},${{ vars.env.NAME }},${{ secrets.extra.NAME }}und${{ secrets.env.NAME }}setzen die Werte von Variablengruppen und Survey-Variablen in den Prompt ein, wie in GitHub Actions. - Prompt einer Aufgabe: Eine Vorlage kann demjenigen, der eine Aufgabe startet, erlauben, den Prompt für einen Lauf zu ersetzen.
- MCP-Inventar: ein neuer Inventartyp mit den entfernten MCP-Servern, deren Tools der Agent aufrufen kann. Tokens werden verschlüsselt gespeichert.
- Task-Log des Agenten: der Text des Agenten, Tool-Aufrufe, Subagenten und eine Zusammenfassung mit den Tokens und den Kosten, aktualisiert, während der Agent arbeitet.
- Isolation: Jede Aufgabe erhält ein eigenes, leeres Konfigurationsverzeichnis des Agenten. Tokens und die in den Prompt eingesetzten Secrets werden im Log maskiert.
Vorlagen für KI-Agenten

Eine Agenten-Vorlage startet Claude Code oder Codex in einem Verzeichnis eines Repositorys und übergibt ihm einen Prompt. Verwenden Sie sie für Arbeit, die Sie sonst einem Kollegen beschreiben würden: den letzten Commit prüfen, einen fehlschlagenden Test finden und beheben, eine Abhängigkeit aktualisieren und einen Pull Request öffnen.
Um eine zu erstellen, gehen Sie zu Aufgabenvorlagen, klicken Sie auf Neue Vorlage und dann auf Claude Code Agent oder Codex Agent.
| Feld | Beschreibung |
|---|---|
| Repository | Das Repository, in dem der Agent arbeitet. Semaphore klont oder aktualisiert es vor der Aufgabe, wie bei jeder anderen Vorlage. |
| Unterverzeichnispfad | Optional. Das Verzeichnis des Repositorys, in dem der Agent gestartet wird. |
| MCP-Server | Optional. Ein MCP-Inventar mit den Servern, deren Tools der Agent aufrufen kann. |
| Variablengruppen | Variablen und Secrets für den Agenten: der API-Schlüssel, Werte für die Prompt-Ausdrücke, Umgebungsvariablen des Agenten-Prozesses. |
| Prompt | Die Anweisung, mit der der Agent läuft. |
| CLI-Argumente | Zusätzliche Argumente für den Befehl des Agenten: das Modell, die Limits, die Berechtigungen. |
| Survey-Variablen | Fragen, die beim Start der Aufgabe gestellt werden. Die Antworten können in den Prompt eingesetzt werden. |
Was Sie benötigen. Das Kommandozeilenwerkzeug des Agenten muss auf der Maschine installiert sein, die Aufgaben ausführt, also auf dem Semaphore-Server oder dem Runner:
| Anwendung | Befehl | Installation |
|---|---|---|
| Claude Code Agent | claude |
npm install -g @anthropic-ai/claude-code |
| Codex Agent | codex |
npm install -g @openai/codex |
Semaphore aktiviert eine Anwendung, wenn es deren Befehl beim Start in PATH findet. Ein Administrator
kann sie auch auf der Seite Anwendungen aktivieren und den Pfad zur ausführbaren Datei festlegen.
Wie der Agent läuft. Semaphore startet den Agenten im Repository-Verzeichnis und übergibt den Prompt über dessen Standardeingabe, sodass der Prompt nicht in der Prozessliste erscheint:
| Anwendung | Befehl |
|---|---|
| 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> - |
- Zwischen Aufgaben bleibt nichts erhalten. Jeder Lauf ist eine neue Sitzung des Agenten. Was einen Lauf überdauern soll, gehört ins Repository: ein Commit, ein Pull Request, eine Datei.
- Auf Docker- und Kubernetes-Runnern läuft der Agent in einem Container, daher muss das Executor-Image
den Befehl
claudeodercodexenthalten.
API-Schlüssel
Der Agent liest seinen API-Schlüssel aus einer Umgebungsvariablen. Fügen Sie den Schlüssel einer Variablengruppe der Vorlage als geheime Umgebungsvariable hinzu:
| Anwendung | Variable | Ebenfalls akzeptiert |
|---|---|---|
| Claude Code Agent | ANTHROPIC_API_KEY |
CLAUDE_CODE_OAUTH_TOKEN |
| Codex Agent | OPENAI_API_KEY |
CODEX_API_KEY |
Die Anmeldung des Benutzers, unter dem Semaphore läuft, wird nicht verwendet: Das Konfigurationsverzeichnis des Agenten wird für die Aufgabe angelegt und ist leer, daher ist ein Schlüssel aus einer Variablengruppe der einzige Weg zur Authentifizierung. Ist keine der Variablen gesetzt, nennt das Task-Log die Variable, die hinzuzufügen ist.
Prompt-Ausdrücke
Der Prompt einer Vorlage kann Werte aus den Variablengruppen der Vorlage übernehmen. Schreiben Sie einen Ausdruck in doppelten geschweiften Klammern, wie in GitHub Actions, und Semaphore ersetzt ihn beim Start der Aufgabe:
| Ausdruck | Wert |
|---|---|
${{ vars.extra.NAME }} |
Eine zusätzliche Variable einer Variablengruppe. |
${{ vars.env.NAME }} |
Eine Umgebungsvariable einer Variablengruppe. |
${{ secrets.extra.NAME }} |
Eine geheime zusätzliche Variable einer Variablengruppe. |
${{ secrets.env.NAME }} |
Eine geheime Umgebungsvariable einer Variablengruppe. |
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 }}.
- Survey-Variablen sind zusätzliche Variablen: Die Antwort auf die Survey-Variable
versionist${{ vars.extra.version }}, und eine geheime ist${{ secrets.extra.NAME }}. Eine Survey-Variable, die als Umgebungsvariable übergeben wird, steht stattdessen unterenv. Eine unbeantwortete Survey-Variable ergibt eine leere Zeichenkette. - Eine Variable, die nicht existiert, lässt die Aufgabe fehlschlagen, bevor der Agent startet, mit einer Meldung, die den Ausdruck nennt. Semaphore führt keinen Agenten mit einer Lücke im Prompt aus.
- Ein falsch geschriebener Ausdruck wird beim Speichern der Vorlage abgelehnt:
${{ secrets.TOKEN }}hat wederextranochenv. - Andere Ausdrücke bleiben unverändert. Nur
vars.…undsecrets.…gehören zu Semaphore, sodass ein Prompt den Agenten bitten kann, einen Workflow mit${{ github.sha }}darin zu schreiben. Um einenvars- odersecrets-Ausdruck als Text zu erhalten, setzen Sie ein weiteres Dollarzeichen davor:$${{ secrets.env.NAME }}. - Ein Wert wird unverändert eingesetzt. Eine Zeichenkette wird wie geschrieben verwendet, eine Liste oder ein Objekt als JSON. Ein Wert wird nicht erneut nach Ausdrücken durchsucht.
- Ein Secret, das in den Prompt eingesetzt wurde, wird im Task-Log maskiert, wo immer der Agent es wiederholt.
Ein Secret im Prompt wird zusammen mit dem Rest des Prompts an den Modellanbieter gesendet. Geben Sie ein Secret bevorzugt an die Tools des Agenten weiter: als geheime Umgebungsvariable einer Variablengruppe oder als Token eines MCP-Servers.
Prompt einer Aufgabe
Ist in der Vorlage das Kontrollkästchen Prompt aktiviert, zeigt das Aufgabenformular den Prompt der Vorlage und lässt Sie ihn für einen Lauf ändern. Ein Zeitplan, eine Integration oder ein Workflow-Schritt kann auf dieselbe Weise einen eigenen Prompt führen. Über die API senden Sie ihn in den Aufgabenparametern:
{
"template_id": 12,
"params": {
"prompt": "Review the changes of the last release and list the risky ones."
}
}
Ein von einer Aufgabe mitgegebener Prompt wird genau so verwendet, wie er geschrieben ist: Prompt-Ausdrücke werden nur im Prompt ersetzt, der in der Vorlage gespeichert ist. So bleiben die Variablen und Secrets des Projekts unerreichbar für alle, die Aufgaben lediglich ausführen dürfen. Wenn die Vorlage es nicht erlaubt, wird eine Aufgabe, die einen Prompt mitbringt, abgelehnt.
MCP-Server

Ein Agent kann die Tools entfernter MCP-Server aufrufen: einen Issue-Tracker, eine Dokumentationssuche, Ihren eigenen Dienst. Die Server werden in einem Inventar des neuen Typs MCP-Inventar geführt, und ein Inventar dient sowohl Claude-Code- als auch Codex-Vorlagen.
| Feld | Beschreibung |
|---|---|
| Schalter | Ein ausgeschalteter Server bleibt in der Liste und wird dem Agenten nicht übergeben. |
| Name | Der Name, unter dem der Agent den Server kennt: bis zu 64 Buchstaben, Ziffern, - und _. |
| URL | Eine http- oder https-Adresse eines Servers, der MCP über HTTP oder SSE spricht. Ein Benutzername oder Passwort in der URL wird nicht akzeptiert. |
| Token | Optional. Der Agent sendet es im Authorization-Header als Bearer-Token. |
- Ein gespeichertes Token wird verschlüsselt abgelegt und nie wieder angezeigt: Geben Sie ein neues ein, um es zu ersetzen, oder entfernen Sie es.
- Das Token erreicht den Agenten als Umgebungsvariable seines Prozesses. Es wird weder in die Konfigurationsdatei des Agenten noch auf die Kommandozeile noch ins Task-Log geschrieben.
- Der Agent erhält genau diese Server. Ihre Tools sind im Voraus freigegeben, da niemand da ist, um einen Aufruf zu bestätigen, und MCP-Server, die für den Benutzer konfiguriert sind, unter dem Semaphore läuft, werden nicht verwendet.
Task-Log

Das Task-Log zeigt die Arbeit des Agenten, während sie geschieht, als Transkript und nicht als die JSON-Ereignisse, die das Kommandozeilenwerkzeug ausgibt:
- Text des Agenten, Zeile für Zeile. Codex gibt eine Nachricht aus, wenn sie vollständig ist.
- Tool-Aufrufe, jeder in einer Zeile: der Status, der MCP-Server und das Tool, die Argumente. Klicken Sie auf eine Zeile, um die Argumente und das Ergebnis zu sehen. Ein fehlgeschlagener Aufruf ist von Anfang an aufgeklappt.
- Subagenten: Die Zeilen eines Subagenten sind mit dessen Namen gekennzeichnet.
- Die erste Zeile eines Claude-Code-Laufs nennt das Modell und die MCP-Server, wobei diejenigen, die keine Verbindung hergestellt haben, rot dargestellt sind.
- Die Zusammenfassung am Ende: die Anzahl der Turns, die Dauer, die Tokens und die Kosten, soweit der Agent sie meldet.
Roh-Log zeigt dasselbe Log als reinen Text.
Sicherheit
- Ein Agent führt Befehle aus. Im Rahmen der Berechtigungen, die ihm sein Kommandozeilenwerkzeug gibt, kann der Agent das Repository-Verzeichnis lesen und ändern, Programme als der Benutzer ausführen, der Aufgaben ausführt, und die Tools seiner MCP-Server aufrufen. Geben Sie einer Agenten-Vorlage ein Repository und Tokens mit den engsten Rechten, die für die Arbeit ausreichen, und einen separaten Runner für Arbeit, die Sie vom Server getrennt halten möchten.
- Jede Aufgabe hat ein eigenes Konfigurationsverzeichnis des Agenten (
CLAUDE_CONFIG_DIR,CODEX_HOME), das für die Aufgabe angelegt und danach entfernt wird. Einstellungen, Anmeldungen und MCP-Server des Benutzers, unter dem Semaphore läuft, erreichen den Agenten nicht, und eine Variable einer Variablengruppe kann das Verzeichnis nicht umleiten. - Der Prompt und das, was der Agent liest, gehen an den Modellanbieter: die Dateien des Repositorys, die Ausgabe von Befehlen, die Ergebnisse von Tools.
- Ein Repository kann dem Agenten Anweisungen geben. Text in den Dateien, die der Agent liest, in einem Issue oder im Ergebnis eines Tools kann ändern, was der Agent tut. Richten Sie einen Agenten mit mächtigen Tokens nicht auf Inhalte, die Sie nicht kontrollieren.
- Tokens und Secrets werden im Task-Log maskiert: Die Tokens der MCP-Server und die in den Prompt
eingesetzten Secrets werden durch
********ersetzt. - Variablen und Secrets bleiben von der Kommandozeile eines Agenten fern, wo die Prozessliste sie zeigen würde.
Dokumentation
Das Benutzerhandbuch enthält eine Seite mit jedem Feld und jeder Regel: KI-Agenten.
