i18n/de/skills/circuit-breaker-pattern/SKILL.md
Circuit-Breaker-Logik fuer agentische Tool-Aufrufe implementieren — Tool-Gesundheit tracken, zwischen Closed/Open/Half-Open-Zustaenden wechseln, Aufgabenumfang bei Tool-Ausfaellen reduzieren, ueber Faehigkeitskarten zu Alternativen routen und Fehlerbudgets durchsetzen, um Fehlerakkumulation zu verhindern. Trennt Orchestrierung (entscheiden was versucht werden soll) von Ausfuehrung (Tools aufrufen), gemaess dem Expeditor-Muster. Verwenden beim Aufbau von Agenten, die von mehreren Tools mit unterschiedlicher Zuverlaessigkeit abhaengen, beim Entwurf fehlertoleranter agentischer Workflows, bei der Wiederherstellung nach Tool-Ausfaellen mitten in einer Aufgabe oder beim Haerten bestehender Agenten gegen kaskadende Tool-Fehler.
npx skillsauth add pjt222/agent-almanac circuit-breaker-patternInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Graceful Degradation bei Tool-Ausfaellen. Ein Agent, der fuenf Tools aufruft und eines defekt ist, sollte nicht vollstaendig versagen — er sollte das defekte Tool erkennen, aufhoeren es aufzurufen, den Umfang auf das verbleibend Erreichbare reduzieren und ehrlich berichten, was uebersprungen wurde. Dieser Skill kodifiziert diese Logik mit dem Circuit-Breaker-Muster aus verteilten Systemen, angepasst an agentische Tool-Orchestrierung.
Die Kernidee, aus kirapixelads' "Kuechen-Brandproblem": Der Expeditor (Orchestrierungsschicht) darf nicht selbst kochen. Die Trennung von Belangen zwischen dem Entscheiden was versucht werden soll und wie es versucht werden soll verhindert, dass der Orchestrator in der Wiederholungsschleife eines fehlerhaften Tools gefangen wird.
Dokumentieren, was jedes Tool bereitstellt und welche Alternativen existieren. Diese Karte ist die Grundlage fuer Umfangsreduzierung — ohne sie laesst ein Tool-Ausfall den Agenten raten, was als naechstes zu tun ist.
capability_map:
- tool: Grep
provides: Inhaltssuche ueber Dateien
alternatives:
- tool: Bash
method: "rg oder grep Befehl"
degradation: "verliert Greps eingebaute Ausgabeformatierung"
- tool: Read
method: "vermutete Dateien direkt lesen"
degradation: "erfordert zu wissen welche Dateien zu pruefen; keine breite Suche"
fallback: "Nutzer fragen, welche Dateien untersucht werden sollen"
- tool: Bash
provides: Befehlsausfuehrung, Build-Tools, Git-Operationen
alternatives: []
fallback: "Befehle berichten, die manuell ausgefuehrt werden muessen"
- tool: Read
provides: Dateiinhalt-Inspektion
alternatives:
- tool: Bash
method: "cat oder head Befehl"
degradation: "verliert Zeilennummerierung und Kuerzungssicherheit"
fallback: "Nutzer bitten, Dateiinhalte einzufuegen"
- tool: Write
provides: Dateierstellung
alternatives:
- tool: Edit
method: "ueber vollstaendige Datei-Edit erstellen"
degradation: "erfordert, dass die Datei bereits fuer Edit existiert"
- tool: Bash
method: "echo/cat heredoc"
degradation: "verliert Writes atomare Dateierstellung"
fallback: "Dateiinhalte ausgeben, damit Nutzer manuell speichert"
- tool: WebSearch
provides: Externe Informationsabfrage
alternatives: []
fallback: "Benoettigte Informationen benennen; Nutzer bitten sie bereitzustellen"
Fuer jedes Tool dokumentieren:
Erwartet: Eine vollstaendige Faehigkeitskarte, die jedes vom Agenten genutzte Tool abdeckt. Jeder Eintrag hat mindestens einen Fallback, auch wenn keine Tool-Alternative existiert. Die Karte macht explizit, was sonst implizit ist: welche Tools kritisch (keine Alternativen) und welche substituierbar sind.
Bei Fehler: Wenn die Tool-Liste unklar ist, mit den allowed-tools aus dem Skill-Frontmatter beginnen. Wenn Alternativen unsicher sind, als degradation: "unbekannt — vor Verwendung testen" markieren statt sie wegzulassen.
Den Zustandstracker fuer jedes Tool einrichten. Jedes Tool startet im CLOSED-Zustand (gesund, normaler Betrieb).
Circuit-Breaker-Zustandstabelle:
+------------+--------+-------------------+------------------+-----------------+
| Tool | Zustand| Aufeinanderfolgend | Letzter Fehler | Letzter Erfolg |
+------------+--------+-------------------+------------------+-----------------+
| Grep | CLOSED | 0 | — | — |
| Bash | CLOSED | 0 | — | — |
| Read | CLOSED | 0 | — | — |
| Write | CLOSED | 0 | — | — |
| Edit | CLOSED | 0 | — | — |
| WebSearch | CLOSED | 0 | — | — |
+------------+--------+-------------------+------------------+-----------------+
Fehlerbudget: 0 / 5 verbraucht
Zustandsdefinitionen:
Zustandsuebergaenge:
Erwartet: Eine Zustandstabelle fuer alle Tools mit CLOSED-Zustand und null Fehleranzahlen initialisiert. Fehlerschwelle und Budget explizit deklariert.
Bei Fehler: Wenn die Tool-Liste nicht im Voraus enumeriert werden kann (dynamische Tool-Entdeckung), Zustand beim ersten Verwenden jedes Tools initialisieren. Das Muster gilt weiterhin — die Tabelle wird nur inkrementell aufgebaut.
Wenn der Agent ein Tool aufrufen muss, diese Entscheidungssequenz befolgen. Dies ist die Expeditor-Logik — sie entscheidet ob der Aufruf versucht werden soll, nicht wie er ausgefuehrt werden soll.
VOR jedem Tool-Aufruf:
1. Tool-Zustand in der Circuit-Breaker-Tabelle pruefen
2. Wenn OPEN:
a. Pruefen ob Zeit fuer Half-Open-Sonde ist
- Ja → zu HALF-OPEN wechseln, mit Sonden-Aufruf fortfahren
- Nein → Tool ueberspringen, zu Alternative routen (Schritt 4)
3. Wenn HALF-OPEN:
a. Einen Sonden-Aufruf machen
b. Erfolg → zu CLOSED wechseln, aufeinanderfolgende Fehler auf 0 zuruecksetzen
c. Fehler → zu OPEN wechseln, Fehlerbudget erhoehen
4. Wenn CLOSED:
a. Aufruf normal durchfuehren
NACH jedem Tool-Aufruf:
1. Erfolg:
- Aufeinanderfolgende Fehler auf 0 zuruecksetzen
- Zeitstempel letzten Erfolgs aufzeichnen
2. Fehler:
- Aufeinanderfolgende Fehler erhoehen
- Zeitstempel letzten Fehlers und Fehlermeldung aufzeichnen
- Verbrauchtes Fehlerbudget erhoehen
- Wenn aufeinanderfolgende Fehler >= Schwelle:
zu OPEN wechseln
protokollieren: "Schaltkreis OFFEN fuer [Tool]: [Fehlerzahl] aufeinanderfolgende Fehler"
- Wenn Fehlerbudget erschoepft:
PAUSE — Aufgabe nicht fortsetzen
Nutzer berichten (Schritt 6)
Der Expeditor wiederholt einen fehlgeschlagenen Aufruf nie sofort. Er zeichnet den Fehler auf, prueft Schwellen und macht weiter. Wiederholungen erfolgen nur durch den HALF-OPEN-Sondenmechanismus in einem spaeteren Schritt.
Erwartet: Eine klare Entscheidungsschleife, die der Agent vor und nach jedem Tool-Aufruf befolgt. Tool-Gesundheit wird kontinuierlich getrackt. Die Expeditor-Schicht blockiert nie bei einem fehlerhaften Tool.
Bei Fehler: Wenn Zustand ueber Aufrufe hinweg nicht praktikabel getrackt werden kann (z. B. zustandslose Ausfuehrung), zu einem einfacheren Modell degradieren: Gesamtfehler zaehlen und bei Budget pausieren. Der Drei-Zustands-Circuit-Breaker ist ideal; ein Fehlerzhaler ist das Minimum-viable-Muster.
Wenn der Schaltkreis eines Tools OPEN ist, die Faehigkeitskarte (Schritt 1) konsultieren und zur besten verfuegbaren Alternative routen.
Routing-Prioritaet:
Beispiel-Routing-Entscheidung:
Benoetiges Tool: Grep (Schaltkreis OPEN)
Aufgabe: Alle Dateien mit "API_KEY" finden
Route 1: Bash mit rg Befehl
→ Degradierung: verliert Greps eingebaute Formatierung
→ Entscheidung: AKZEPTABEL — diese Route verwenden
Wenn Bash auch OPEN:
Route 2: Vermutete Konfigurationsdateien direkt lesen
→ Degradierung: erfordert Raten welche Dateien; keine breite Suche
→ Entscheidung: PARTIELL — nur bekannte Konfigurationspfade versuchen
Wenn Read auch OPEN:
Route 3: Nutzer fragen
→ "Ich muss Dateien mit 'API_KEY' finden, aber meine Such-
Tools sind nicht verfuegbar. Koennen Sie ausfuehren: grep -r 'API_KEY' ."
→ Entscheidung: FALLBACK — Nutzer stellt die Information bereit
Wenn Nutzer nicht verfuegbar:
Route 4: Umfangsreduzierung
→ "API-Schlussel-Suche" aus Aufgabenumfang entfernen
→ Dokumentieren: "UEBERSPRUNGEN: API-Schlussel-Suche — keine Tools verfuegbar"
Erwartet: Wenn ein Tool-Schaltkreis oeffnet, routet der Agent transparent zu einer Alternative oder reduziert den Umfang. Routing-Entscheidung und eventuelle Degradierungen sind in der Aufgabenausgabe dokumentiert.
Bei Fehler: Wenn die Faehigkeitskarte unvollstaendig ist (keine Alternativen gelistet), standardmaessig auf Umfangsreduzierung zurueckfallen und berichten. Arbeit nie still uebergehen — immer dokumentieren, was uebersprungen wurde und warum.
Wenn Tools offen-geschaltet sind und Alternativen erschoepft sind, die Aufgabe auf das reduzieren, was noch mit funktionierenden Tools erledigt werden kann. Das ist kein Versagen — es ist ehrliches Umfangsmanagement.
Umfangsreduzierungsprotokoll:
Umfangsreduzierungsbericht:
Urspruenglicher Umfang: 5 Unteraufgaben
[x] 1. Konfigurationsdateien lesen (Read: CLOSED)
[x] 2. Nach veralteten Mustern suchen (Grep: CLOSED)
[ ] 3. Testpakete ausfuehren (Bash: OPEN — keine Alternative)
[x] 4. Dokumentation aktualisieren (Edit: CLOSED)
[ ] 5. In Staging deployen (Bash: OPEN — keine Alternative)
Reduzierter Umfang: 3 Unteraufgaben erreichbar
Zurueckgestellt: 2 Unteraufgaben benoetigen Bash (Schaltkreis OPEN)
Empfehlung: Unteraufgaben 1, 2, 4 jetzt abschliessen.
Unteraufgaben 3 und 5 benoetigen Bash — im naechsten Zyklus
sondieren oder Nutzer kann Befehle manuell ausfuehren.
Zurueckgestellte Unteraufgaben nicht versuchen. Open-geschaltete Tools nicht wiederholt aufrufen in der Hoffnung, sie werden funktionieren. Der Circuit Breaker existiert genau dafuer — seinem Zustand vertrauen.
Erwartet: Eine klare Aufteilung der Aufgabe in erreichbare und zurueckgestellte Arbeit. Der Agent schliessst alle erreichbare Arbeit ab und berichtet zurueckgestellte Elemente mit Grund und was sie entsperren wuerde.
Bei Fehler: Wenn Umfangsreduzierung alle Unteraufgaben entfernt (jedes Tool ist defekt), direkt zu Schritt 6 uebergehen — pausieren und berichten. Ein Agent ohne funktionierende Tools sollte keinen Fortschritt vortaeuschen.
Wenn ein Tool Daten zurueckgibt, die moeglicherweise veraltet sind (gecachte Ergebnisse, veraltete Snapshots, zuvor abgerufene Inhalte), diese explizit kennzeichnen statt sie als aktuell zu behandeln.
Veraltungsindikatoren:
Kennzeichnungsprotokoll:
Bei der Praesentation moeglicherweise veralteter Daten:
"[VERALTETE DATEN — abgerufen um {Zeitstempel}, spiegelt moeglicherweise nicht aktuellen Zustand wider]
Dateiinhalte des letzten erfolgreichen Lesens:
..."
"[GECACHTES ERGEBNIS — Grep gab identische Ergebnisse zum vorherigen Aufruf zurueck;
Dateisystem koennte sich seitdem geaendert haben]"
"[NICHT VERIFIZIERT — WebSearch-Ergebnis vom {Datum}; aktueller Status unbekannt]"
Veraltete Daten nie still als aktuell praesentieren. Der Nutzer oder nachgelagerte Agent muss die Datenqualitaet kennen, um fundierte Entscheidungen zu treffen.
Erwartet: Alle Tool-Ausgaben, die moeglicherweise veraltet sind, tragen explizite Kennzeichnungen. Frische Daten werden nicht gekennzeichnet (Kennzeichnung ist fuer Unsicherheit reserviert, nicht fuer Bestaetigung).
Bei Fehler: Wenn Veraltung nicht bestimmt werden kann (keine Zeitstempel, keine Vergleichsbasis), die Unsicherheit vermerken: "[AKTUALITAET UNBEKANNT — keine Vergleichsbasis]". Unsicherheit ueber Aktualitaet ist selbst Information.
Gesamtfehler ueber alle Tools hinweg tracken. Wenn das Budget erschoepft ist, pausiert der Agent und berichtet statt weiter Fehler anzusammeln.
Fehlerbudget-Durchsetzung:
Budget: 5 Fehler pro Zyklus
Aktuell: 4 / 5 verbraucht
Fehler 1: Bash — "Berechtigung verweigert" (Schritt 3)
Fehler 2: Bash — "Befehl nicht gefunden" (Schritt 3)
Fehler 3: Bash — "Timeout nach 120s" (Schritt 4)
Fehler 4: WebSearch — "Verbindung abgelehnt" (Schritt 5)
Status: 1 Fehler verbleibend vor obligatorischer Pause
→ Naechster Tool-Aufruf erfolgt mit erhoehter Vorsicht
→ Wenn er fehlschlaegt: PAUSE und Statusbericht generieren
Bei Budget-Erschoepfung:
FEHLERBUDGET ERSCHOEPFT — PAUSIERE
Abgeschlossene Arbeit:
- Unteraufgabe 1: Konfigurationsdateien lesen (ERFOLG)
- Unteraufgabe 2: Nach veralteten Mustern suchen (ERFOLG)
Unvollstaendige Arbeit:
- Unteraufgabe 3: Testpakete ausfuehren (FEHLGESCHLAGEN — Bash Schaltkreis OPEN)
- Unteraufgabe 4: Dokumentation aktualisieren (NICHT VERSUCHT — pausiert)
- Unteraufgabe 5: In Staging deployen (NICHT VERSUCHT — pausiert)
Tool-Gesundheit:
Grep: CLOSED (gesund)
Read: CLOSED (gesund)
Edit: CLOSED (gesund)
Bash: OPEN (3 aufeinanderfolgende Fehler — Berechtigung/Befehl/Timeout)
WebSearch: OPEN (1 Fehler — Verbindung abgelehnt)
Fehler: 5 / 5 Budget verbraucht
Empfehlung:
1. Bash-Fehler untersuchen — wahrscheinlich Umgebungsproblem
2. Netzwerkkonnektivitaet fuer WebSearch pruefen
3. Aufgabe nach Behebung von Unteraufgabe 4 fortsetzen
Die Pause-und-Bericht-Funktion erfuellt dieselbe Funktion wie ein Sicherungsautomat in elektrischen Systemen: Sie verhindert die Anhaefung von Schaeden. Ein Agent, der weiterhin kaputte Tools aufruft, verschwendet Kontextfenster, verwirrt den Nutzer mit wiederholten Fehlern und kann inkonsistente Teilergebnisse produzieren.
Erwartet: Der Agent stoppt sauber, wenn das Fehlerbudget erschoepft ist. Der Bericht umfasst abgeschlossene Arbeit, unvollstaendige Arbeit, Tool-Gesundheit und handlungsrelevante naechste Schritte.
Bei Fehler: Wenn der Agent keinen sauberen Bericht generieren kann (z. B. Zustandstracking ging verloren), alle verfuegbaren Informationen ausgeben. Ein partieller Bericht ist besser als stille Fortsetzung.
Pruefen, dass die Orchestrierungslogik (Schritte 2–7) sauber von der Tool-Ausfuehrung getrennt ist.
Was der Expeditor (Orchestrierung) tut:
Was der Expeditor NICHT tut:
Wenn der Expeditor "kocht" (Tool-Aufrufe macht, um andere Tool-Fehler zu umgehen), ist die Trennung gebrochen. Der Expeditor sollte zu einem alternativen Tool routen oder den Umfang reduzieren — nicht versuchen, das defekte Tool zu reparieren.
Erwartet: Eine klare Grenze zwischen Orchestrierungsentscheidungen und Tool-Ausfuehrung. Die Expeditor-Schicht kann beschrieben werden ohne auf spezifische Tool-APIs oder Fehlertypen zu verweisen.
Bei Fehler: Wenn Orchestrierung und Ausfuehrung verflochten sind, durch Extrahieren der Entscheidungslogik in einen separaten Schritt refaktorieren, der vor jedem Tool-Aufruf laeuft. Der Entscheidungsschritt produziert eine von vier Ausgaben: AUFRUFEN, UEBERSPRINGEN, SONDIEREN oder PAUSIEREN. Der Ausfuehrungsschritt handelt auf diese Ausgabe.
Wenn mehrere Tools Infrastruktur teilen (Netzwerk, Dateisystem, Berechtigungen), kann eine einzelne Ursache mehrere Sicherungsautomaten gleichzeitig ausloesen. Dieses korrelierte Muster erkennen und behandeln statt jeden Sicherungsautomaten unabhaengig zu behandeln.
Indikatoren fuer kaskadende Fehler:
Antwortprotokoll:
Backoff-Compounding: Bei kaskadierenden Fehlern exponentielle Verzoegerung fuer Half-Open-Sonden verwenden: bei Schritt 3 sondieren, dann Schritt 6, dann Schritt 12. Maximales Intervall bei 20 Schritten kappen, um permanente Schaltkreissperrung zu verhindern. Das verhindert, dass schnelle Sonden ein sich erholendes System ueberstrapazieren.
Erwartet: Korrelierte Fehler werden als einzelnes systemisches Ereignis erkannt und behandelt statt als N unabhaengige Sicherungsautomaten-Ausloesungen. Das Fehlerbudget zaehlt das systemische Ereignis einmal, nicht N-mal.
Bei Fehler: Wenn Korrelationserkennung nicht praktikabel ist (Fehler haben unterschiedliche Fehlersignaturen trotz gemeinsamer Ursache), auf unabhaengige Einzel-Tool-Sicherungsautomaten zurueckfallen. Das System degradiert weiterhin graceful — es verbraucht das Budget nur schneller.
Bevor die Circuit-Breaker-Schleife (Schritt 3) eingesetzt wird, optional pruefen, ob ein Tool verfuegbar ist und wahrscheinlich erfolgreich sein wird. Das reduziert unnoetige Sicherungsautomaten-Ausloesungen durch vorhersehbare Fehler.
Pre-Call-Pruefungen:
| Pruefung | Methode | Aktion bei Fehler | |----------|--------|-----------------| | Tool existiert | Pruefen ob Tool in allowed-tools-Liste ist | Ueberspringen — nicht mal versuchen | | MCP-Server-Gesundheit | Server-Prozess/Verbindungsstatus pruefen | Sofort zu Alternative routen | | Ressourcenverfuegbarkeit | Pruefen ob Zieldatei/URL/Endpunkt existiert | Routen oder Umfang reduzieren |
Entscheidungstabelle:
Pre-Call-Bewertung:
VERFUEGBAR → mit Circuit-Breaker-Schleife fortfahren (Schritt 3)
DEGRADIERT → mit Vorsicht fortfahren, Fehlerschwelle um 1 verringern
NICHT VERFUEGBAR → Tool ueberspringen, zu Alternative routen (Schritt 4) ohne Budget zu verbrauchen
Pre-Call-Pruefungen sind beratend, nicht massgeblich. Ein Tool, das Pre-Call-Pruefungen besteht, kann waehrend der Ausfuehrung immer noch fehlschlagen. Der Circuit Breaker bleibt der primaere Zuverlaessigkeitsmechanismus.
Erwartet: Vorhersehbare Fehler (fehlende Tools, nicht erreichbare Server) werden abgefangen, bevor sie das Fehlerbudget verbrauchen. Der Circuit Breaker behandelt nur echte Laufzeitfehler.
Bei Fehler: Wenn Pre-Call-Pruefungen nicht verfuegbar sind oder zu viel Overhead hinzufuegen, diesen Schritt vollstaendig ueberspringen. Die Circuit-Breaker-Schleife in Schritt 3 behandelt alle Fehler — Pre-Call-Auswahl ist eine Optimierung, kein Erfordernis.
fail-early-pattern — komplementaeres Muster: fail-early validiert Eingaben vor Arbeitsbeginn; circuit-breaker verwaltet Fehler waehrend der Arbeitescalate-issues — wenn das Fehlerbudget erschoepft oder die Umfangsreduzierung erheblich ist, an einen Spezialisten oder Menschen eskalierenwrite-incident-runbook — wiederkehrende Tool-Ausfall-Muster als Runbooks fuer schnellere Diagnose dokumentierenassess-context — bewerten ob der aktuelle Ansatz angepasst werden kann, wenn mehrere Tools degradiert sind; paart mit Umfangsreduzierungsentscheidungentesting
Launch all available agents in parallel waves for open-ended hypothesis generation on problems where the correct domain is unknown. Use when facing a cross-domain problem with no clear starting point, when single-agent approaches have stalled, or when diverse perspectives are more valuable than deep expertise. Produces a ranked hypothesis set with convergence analysis and adversarial refinement.
tools
Write integration tests for a Node.js CLI application using the built-in node:test module. Covers the exec helper pattern, output assertions, filesystem state verification, cleanup hooks, JSON output parsing, error case testing, and state restoration after destructive tests. Use when adding tests to an existing CLI, testing a new command, verifying adapter behavior across frameworks, or setting up CI for a CLI tool.
development
Screen a proposed trademark for conflicts and distinctiveness before filing. Covers trademark database searches (TMview, WIPO Global Brand Database, USPTO TESS), distinctiveness analysis using the Abercrombie spectrum, likelihood of confusion assessment using DuPont factors and EUIPO relative grounds, common law rights evaluation, and goods/services overlap analysis. Produces a conflict report with a risk matrix. Use before adopting a new brand name, logo, or slogan — distinct from patent prior art search, which uses different databases, legal frameworks, and analysis methods.
tools
Scaffold a new CLI command using Commander.js with options, action handler, three output modes (human-readable, quiet, JSON), and optional ceremony variant. Covers command naming, option design, shared context patterns, error handling, and integration testing. Use when adding a command to an existing Commander.js CLI, designing a new CLI tool from scratch, or standardizing command structure across a multi-command CLI.