Fehlgeschlagene CI mit einem KI-Agenten beheben

Fehlgeschlagene CI mit einem KI-Agenten beheben: GitHub-Actions-Fehler an einen signierten Webhook senden, in einem neuen Worktree reproduzieren und einen Draft-PR erhalten, den ein Mensch überprüft.

Aiden Flux

Aiden Flux

6 November 2026

Fehlgeschlagene CI mit einem KI-Agenten beheben

Kurze Antwort: Um fehlschlagende CI-Builds mit einem KI-Agenten zu beheben, senden Sie das CI-Fehlerereignis an einen Webhook. Ein Coding-Agent prüft dann, ob er den Fehler beheben kann, reproduziert ihn lokal in einem sauberen Worktree und pusht einen Fix auf einen Branch als Draft-Pull-Request. Anschließend prüft und mergt ein Mensch. Keine lokale Reproduktion bedeutet: kein Push.

Ein roter Build um 16 Uhr kostet mehr als der eigentliche Fix. Jemand muss seine aktuelle Arbeit unterbrechen, das Log öffnen, an 900 Zeilen Setup-Ausgabe vorbeiscrollen und findet schließlich einen Linting-Fehler oder einen veralteten Snapshot. Die Behebung dauert zwei Minuten – der Kontextwechsel zwanzig.

Genau an dieser Stelle zahlt sich ein Coding-Agent aus. Wahrscheinlich nutzen Sie bereits Claude Code, Codex oder einen anderen Agenten auf Ihrem Rechner. Was bisher fehlt, ist die Verbindung: ein Mechanismus, der den Fehler bemerkt, ihn mit dem passenden Kontext an den Agenten übergibt und verhindert, dass der Agent bloße Vermutungen in Ihr Repository pusht. Diese Anleitung zeigt, wie Sie diesen Ablauf mit GitHub Actions und einer Sharkly-Automation einrichten – das gleiche Prinzip funktioniert mit jedem CI-System, das HTTP-Requests senden kann.

Was ein KI-Agent in der CI gut reparieren kann (und was nicht)

Ein Agent eignet sich am besten für Fehler, die sich lokal auf einem Laptop reproduzieren lassen und für die es eine kleine, überprüfbare Lösung gibt. Am schlechtesten schneidet er bei Problemen ab, die in der Infrastruktur, bei Zugangsdaten oder bei Drittanbieter-Diensten liegen. Sortieren Sie also vor, bevor Sie automatisieren:

Fehlertyp Agenten-Eignung Warum
Lint- und Formatierungsfehler Sehr gut Deterministisch; der Linter bestätigt die Behebung
Typfehler Sehr gut Der Compiler bestätigt die Behebung
Fehlgeschlagener Snapshot nach beabsichtigter UI-Änderung Gut Leicht zu reproduzieren, aber ein Mensch sollte bestätigen, dass die Änderung gewollt war
Flaky Test Gemischt Reproduktion erfordert wiederholte Durchläufe; die Ursache ist oft eine echte Race Condition
Fehlschlagender Unit-Test nach Logikänderung Gemischt Möglicherweise ist der Test korrekt und der Code fehlerhaft
Runner ohne Speicherplatz, Netzwerk-Timeouts Schlecht Im Repository gibt es nichts zu beheben
Fehlende oder abgelaufene Secrets, Berechtigungsfehler Niemals Der Agent darf keine Zugangsdaten anfassen

Die Regel, die sich aus dieser Tabelle ergibt: Der Agent liefert nur dann einen Fix, wenn er auf seinem eigenen Computer miterlebt hat, wie der Test erst rot und dann grün wurde. In einem Design-Essay, den das DeepSeek-Harness-Team auf X veröffentlicht hat, wird dieses Muster als „silently reproduce and fix“ bezeichnet: Ein Trigger überwacht Ereignisse, verhält sich standardmäßig ruhig und meldet sich nur mit einem bestätigten, einfachen Fix. Dieser Essay beschreibt den Entwurf eines Prototyps, kein fertiges Produkt, aber das Prinzip gilt für jedes Setup, das Sie selbst aufbauen.

So funktioniert der CI-Fix-Loop

Die Schleife besteht aus fünf Teilen: einem Fehlerereignis, einem signierten Webhook, einem ressourcenschonenden Vorfilter, einer isolierten Reproduktion und einem menschlichen Review-Gate.

A five-step flow: a failed CI build sends a signed webhook, a filter drops events the agent should ignore, a Computer reproduces and fixes the failure in a worktree, and a person stamps the pull request
  1. Ihre CI schließt einen Durchlauf mit einem Fehler ab.
  2. Ein schlanker Workflow sendet einen signierten JSON-Payload an eine Webhook-URL.
  3. Der Agent liest den Payload und verwirft alles, was nicht in seinen Zuständigkeitsbereich fällt – etwa das falsche Repository oder Fehler auf einem Release-Branch.
  4. Der Agent erstellt einen Task, checkt einen frischen Worktree aus, reproduziert den Fehler und behebt ihn.
  5. Er pusht einen Branch und öffnet einen Draft-Pull-Request. Ein Mensch mergt oder schließt ihn.

Die Schritte 3 und 4 laufen als Sharkly-Automation. Eine Automation ist eine gespeicherte Reihe von Anweisungen zusammen mit dem Agent oder Crew, der sie ausführt – ausgelöst durch einen Trigger: einen Zeitplan, eine Statusänderung eines Tasks, eine Kommentarphrase oder einen Webhook.

Schritt 1: Den CI-Fehler an einen Webhook senden

GitHub Actions bietet ein workflow_run event, das ausgelöst wird, sobald ein anderer Workflow abgeschlossen ist. Es wird bei jedem Ergebnis ausgelöst, weshalb Sie mit einer Job-Bedingung auf failure filtern. Ein wichtiger Hinweis aus der GitHub-Dokumentation: Die Workflow-Datei muss auf dem Standard-Branch vorhanden sein, andernfalls wird sie nie getriggert.

Dieser Workflow wartet auf einen Workflow namens CI, erstellt einen kompakten JSON-Body, signiert ihn und sendet ihn ab:

name: Report CI failure
on:
  workflow_run:
    workflows: [CI]
    types: [completed]

jobs:
  notify:
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    runs-on: ubuntu-latest
    steps:
      - name: Send signed webhook
        env:
          WEBHOOK_URL: ${{ secrets.SHARKLY_WEBHOOK_URL }}
          SIGNING_SECRET: ${{ secrets.SHARKLY_SIGNING_SECRET }}
          REPO: ${{ github.repository }}
          RUN_ID: ${{ github.event.workflow_run.id }}
          RUN_URL: ${{ github.event.workflow_run.html_url }}
          BRANCH: ${{ github.event.workflow_run.head_branch }}
          SHA: ${{ github.event.workflow_run.head_sha }}
        run: |
          BODY=$(jq -nc --arg repo "$REPO" --arg run_id "$RUN_ID" \
            --arg url "$RUN_URL" --arg branch "$BRANCH" --arg sha "$SHA" \
            '{event:"ci_failure",repo:$repo,run_id:$run_id,run_url:$url,branch:$branch,sha:$sha}')
          TS=$(date +%s)
          SIG=$(printf '%s\n%s' "$TS" "$BODY" \
            | openssl dgst -sha256 -hmac "$SIGNING_SECRET" -binary | base64)
          curl -fsS -X POST "$WEBHOOK_URL" \
            -H "Content-Type: application/json" \
            -H "X-Webhook-Timestamp: $TS" \
            -H "X-Webhook-Signature: v1=$SIG" \
            --data-raw "$BODY"

Branch-Namen stammen von Mitwirkenden. Daher übergibt der Workflow sie über env und jq, anstatt sie direkt per String-Interpolation in das Shell-Skript einzufügen. Speichern Sie beide Werte als verschlüsselte Repository-Secrets und niemals direkt in der Datei.

Schritt 2: Die Automation und ihren Webhook-Trigger erstellen

Erstellen Sie in Ihrem Space eine Automation, weisen Sie sie dem Agenten zu, der die Fehler beheben soll, und fügen Sie einen Webhook-Trigger hinzu. Sharkly zeigt die vollständige URL nur ein einziges Mal an – beim Erstellen oder Neugenerieren des Triggers. Kopieren Sie sie daher direkt in das GitHub-Secret.

Aktivieren Sie ein Signing-Secret. Ohne Secret fungiert die URL als Bearer-Token: Jeder, der sie besitzt, kann einen Durchlauf starten. Mit Secret muss gemäß der Automations-Dokumentation jeder Request einen X-Webhook-Signature-Header mit v1= sowie einem Base64-codierten HMAC-SHA256 über den Zeitstempel, einen Zeilenumbruch und den Roh-Body enthalten, signiert mit dem whsec_-Secret. Sharkly lehnt Zeitstempel ab, die mehr als 300 Sekunden abweichen, und akzeptiert eine gegebene Signatur innerhalb von 10 Minuten nur einmal, sodass abgefangene Requests nicht erneut abgespielt werden können.

Der Trigger muss aktiviert und die Automation auf „Active“ gesetzt sein, bevor ein gültiger Request einen Durchlauf starten kann. Testen Sie das Ganze zuerst über „Run now“.

Schritt 3: Anweisungen schreiben – erst filtern, dann fixen

Eine Automation, die über einen Webhook ausgeführt wird, erstellt nicht automatisch einen Task. Da der Durchlauf keinen verknüpften Task hat, sollten Ihre Instruktionen explizit einen anlegen; so erhält jeder Fehler einen Datensatz, einen Diskussions-Thread für Rückfragen und einen Status, den Ihr Team einsehen kann. Platzieren Sie die einfachen Prüfungen ganz oben, damit die meisten Ereignisse in Sekundenschnelle abgehandelt sind:

You receive a CI failure webhook. The trigger payload is JSON with
event, repo, run_id, run_url, branch, sha.

1. Stop with no output unless event == "ci_failure" and repo is
   acme/web. Stop if branch starts with "release/".
2. Search open tasks for run_id. If one exists, stop.
3. File a task titled "CI fix: <repo> run <run_id>" with run_url in
   the body. Do all further work under that task.
4. Read the failed steps: gh run view <run_id> --log-failed
5. If the cause is a secret, permission, runner, or network problem,
   comment the diagnosis on the task and stop. Change nothing.
6. Check out sha in a fresh worktree. Run the failing command and
   confirm it fails the same way. If it does not reproduce, comment
   what you tried and stop. Never push an unreproduced fix.
7. Make the smallest change that fixes it. Do not edit CI config,
   lockfiles, or tests you were not asked to fix. Rerun the command
   and the nearest test suite.
8. Push to branch ci-fix/<TASK-ID> and open a draft PR with
   gh pr create --draft, task ID in the title. Comment the PR link
   on the task and hand it to a human for review.

Hierbei sind zwei Details entscheidend: Status- und Kommentar-Trigger reagieren derzeit organisationsweit. Aus diesem Grund empfiehlt die Dokumentation, Eingaben innerhalb der Instruktionen zu validieren. Ein Webhook ist zwar an seine URL gebunden, aber Schritt 1 schützt zusätzlich vor versehentlich fehlgeleiteten Requests. Zudem erfüllt die Task-ID im Branch-Namen eine wichtige Funktion: Ist die GitHub-Integration angebunden, verknüpft eine Task-ID im Branch, im PR-Titel oder im PR-Body den Pull-Request automatisch wieder mit dem Task.

Schritt 4: Auf einem Computer in einem isolierten Worktree ausführen

Ein Computer ist der angebundene Host, auf dem Ihr Agent läuft – mit eigenen Runtimes, Dateien und Git-Zugangsdaten. Stellen Sie das Repository des Agenten auf den Temporary-Modus ein, damit jeder Durchlauf ein eigenes Task-Verzeichnis und einen separaten Worktree erhält. Zwei Fehler, die im Abstand von einer Minute eintreffen, können sich so nicht gegenseitig in die Quere kommen. Zu den technischen Details siehe parallele Agenten in isolierten Worktrees und die Referenz zu git-worktree.

Der Git-Zugriff erfolgt über den Computer, nicht über die GitHub-App. Die Integration verknüpft Pull-Requests und synchronisiert Issues; das Klonen und Pushen nutzt weiterhin den SSH-Schlüssel, das HTTPS-Token oder das gh-Login auf diesem Host. Erteilen Sie diesen Zugangsdaten ausschließlich Push-Rechte für Branches und schützen Sie Ihren Standard-Branch, sodass für jeden Merge ein Review erforderlich ist.

Kosten und Leitplanken

Jeder Durchlauf wird über den Tarif der jeweiligen Runtime abgerechnet. Da Sharkly keine Tokens verkauft, kostet ein CI-Fix-Durchlauf genau das, was eine Claude-Code- oder Codex-Sitzung dieser Dauer heute für Sie kostet. Der Schnellfilter in Schritt 1 ist Ihre wichtigste Kostenbremse: Ein Ereignis, das bereits bei Schritt 1 stoppt, verbraucht nur wenige hundert Tokens statt einer vollständigen Reproduktion.

A connected Computer in Sharkly with its detected Runtimes and its concurrent-task limit, which caps how many fix runs execute at once

Die Nebenläufigkeit (Concurrency) ist das zweite Steuerungselement. Jeder Computer verfügt über ein Limit für parallele Tasks, und Durchläufe in temporären Verzeichnissen nutzen standardmäßig die Hälfte davon. Ist die Kapazität erschöpft, werden zusätzliche Durchläufe in eine Warteschlange eingereiht, anstatt einen einzelnen Laptop zu überlasten. Ein chaotischer Vormittag mit 30 roten Builds führt somit zu einer Warteschlange, nicht zum Systemkollaps.

Die übrigen Punkte sind Regeln, die Sie einmalig festlegen:

  • Ausschließlich Draft-PRs. Der Agent mergt niemals eigenständig. Unter Human-in-the-Loop-Coding-Agenten erfahren Sie, an welcher Stelle das Review-Gate sitzen sollte.
  • Ein Versuch pro Durchlauf. Schlägt der erste Fix bei der erneuten lokalen Ausführung fehl, kommentiert der Agent den Task und stoppt.
  • Eine Denylist: CI-Konfigurationen, Secrets, Lockfiles, Migrationen.
  • Pausieren Sie die Automation auf ihrer Einstellungsseite, wenn Sie Instruktionen anpassen, und aktivieren Sie sie erst nach einem Testlauf via „Run now“ wieder.

Überprüfen Sie das System gründlich, bevor Sie ihm blind vertrauen. Hier greift der Plan-, Observe- und Verify-Loop: Analysieren Sie eine Woche lang die Ausführungshistorie, bevor Sie weitere Repositories freigeben.

Alternativen

Sie können pro Fehler auch direkt einen Task anlegen, anstatt eine Webhook-Automation zu nutzen. Richten Sie den Workflow dazu auf ein Skript aus, das sharkly task create aufruft, und lassen Sie den zugewiesenen Agenten die Arbeit aufnehmen. Dadurch erhalten Sie für jeden roten Build einen Task – auch für solche, die der Agent ignorieren sollte –, weshalb sich dieser Ansatz eher für Repositories mit geringem Aufkommen eignet. Teams, die Issues bereits über GitHub verwalten, können alternativ damit beginnen, ein GitHub-Issue an einen KI-Agenten zuzuweisen.

Mit einem Repository starten

Wählen Sie das Repository mit den meisten Lint- und Typfehlern, richten Sie den oben beschriebenen Workflow ein und führen Sie die Automation dreimal manuell aus, bevor Sie den Webhook scharf schalten. Sobald Sie mehr als einen Agenten betreiben möchten, zeigt Ihnen der Leitfaden wie man 10 KI-Coding-Agenten gleichzeitig ausführt alles Weitere. Der Einstieg in Sharkly ist kostenlos: Verbinden Sie einen Computer und überlassen Sie Ihrem bestehenden Agenten den nächsten roten Build.

FAQ

Kann ein KI-Agent fehlschlagende CI-Builds eigenständig beheben?

Er kann Lint-, Typ- und Snapshot-Fehler beheben, die er lokal reproduzieren kann. Er sollte Änderungen jedoch nicht selbstständig mergen. Behalten Sie Draft-PRs als Ausgabe bei und lassen Sie die Freigabe durch einen Menschen erfolgen.

Wie triggere ich einen KI-Agenten, wenn GitHub Actions fehlschlägt?

Fügen Sie einen Workflow für das Event workflow_run mit types: [completed] und der Job-Bedingung conclusion == 'failure' hinzu. Dieser Job sendet einen signierten Request an die Webhook-URL des Agenten.

Was hindert den Agenten daran, einen falschen Fix zu pushen?

Die Reproduktionsregel. Der Agent muss den Fehler lokal sehen, eine Änderung vornehmen und beobachten, dass derselbe Befehl erfolgreich durchläuft. Gelingt keine Reproduktion, hinterlässt er einen Kommentar im Task und pusht nichts.

Erstellt die GitHub-Integration von Sharkly Pull-Requests?

Nein. Sie verknüpft Pull-Requests mit Tasks und synchronisiert Issues. Das Öffnen des PRs übernimmt der Agent über die Git- und gh-Zugangsdaten auf seinem Computer.

Was ist mit Flaky Tests?

Lassen Sie den Agenten den fehlgeschlagenen Test mehrmals ausführen, bevor er eine Entscheidung trifft. Ist der Test in einigen Durchläufen erfolgreich und schlägt in anderen fehl, sollte der Agent das Flaky-Verhalten im Task dokumentieren, statt oberflächliche Änderungen am Code vorzunehmen.

Wie viel kostet ein CI-Fix-Durchlauf?

Die Kosten entsprechen den Tokens, die Ihre Runtime für diese Sitzung verbraucht. Sharkly-Durchläufe werden direkt über Ihren Claude-Code-, Codex- oder API-Tarif abgerechnet.

Mehr entdecken

Was GPT-6 Cyber für Teams bedeutet, die KI-Agenten einsetzen

Was GPT-6 Cyber für Teams bedeutet, die KI-Agenten einsetzen

GPT-6 Cyber erfordert Daybreak Red sowie eine Modellfreigabe und kostet 20 $ pro Million Input-Tokens. So sollten KI-Agenten-Teams Sicherheitsprüfungen und Triage steuern.

6 November 2026

Gemini Omni 1.2 Flash Preise: Was 0,07 $ pro Sekunde im Teameinsatz kosten

Gemini Omni 1.2 Flash Preise: Was 0,07 $ pro Sekunde im Teameinsatz kosten

Die Preise für Gemini Omni 1.2 Flash beginnen bei 0,07 $ pro Sekunde für 720p, Teams zahlen jedoch pro Versuch. Hier finden Sie sämtliche Tarife nach Auflösung und eine wiederverwendbare monatliche Budgetvorlage.

6 November 2026

Ist Gemini Omni 1.2 Flash kostenlos?

Ist Gemini Omni 1.2 Flash kostenlos?

Für Gemini Omni 1.2 Flash gibt es keinen kostenlosen Tarif in der Gemini API, und auch das Google-Cloud-Guthaben von 300 US-Dollar gilt nicht für die Gemini API. Wo Videos zum Nulltarif tatsächlich funktionieren (Google Vids und Flow), welche Limits jeweils gelten, was ein Clip kostet und was es...

6 November 2026