python-resilience
von wshobsonpython-resilience ist ein Guidance-Skill für eine robustere Fehlerbehandlung in Python mit Retries, exponentiellem Backoff, Jitter, Timeouts und begrenzten Retry-Fenstern. Nutze ihn, um praxistaugliche Resilience-Patterns für externe Aufrufe einzusetzen und tenacity-ähnliche Wrapper mit klareren Retry-Regeln umzusetzen.
Dieser Skill erreicht 78/100 und ist damit ein überzeugender Eintrag für Verzeichnisnutzer, die Python-Muster für Retry, Timeout und Fehlertoleranz suchen. Die Repository-Hinweise zeigen praxisnahe Inhalte mit klaren Einsatzsignalen, Grundkonzepten und Codebeispielen, sodass ein Agent ihn voraussichtlich mit weniger Interpretationsaufwand als einen generischen Prompt anwenden kann; das Vertrauen in die Einführung wird jedoch durch fehlende Begleitdateien, Installationshinweise und ausführbare Referenz-Assets eingeschränkt.
- Klar auslösbar: Frontmatter und „When to Use This Skill“ decken Retries, Timeouts, transiente Fehler, Rate Limiting und Circuit Breakers ausdrücklich ab.
- Guter Praxisnutzen: Der Skill enthält einen Quick Start mit konkretem Python-Code auf Basis von tenacity sowie Resilience-Konzepten wie exponentiellem Backoff, Jitter und begrenzten Retries.
- Substanziell auch für sich allein nutzbar: SKILL.md ist umfangreich, strukturiert und kein Platzhalter, mit mehreren Überschriften zu Konzepten und workflow-orientierter Anleitung.
- Es sind keine Support-Dateien, Skripte oder Referenzen enthalten; Nutzer müssen die Anleitung daher ohne ausführbare Beispiele in ihren eigenen Projektkontext übertragen.
- SKILL.md enthält weder einen Installationsbefehl noch Verweise auf Repositorys oder Dateien, was die Sicherheit bei Abhängigkeiten, Setup und der Integration der Muster in reale Codebasen einschränkt.
Überblick über den python-resilience Skill
Was python-resilience leistet
Der python-resilience Skill hilft dir dabei, Python-Code so zu entwerfen, dass er bei unzuverlässigen Abhängigkeiten kontrollierter und sicherer fehlschlägt. Im Mittelpunkt stehen praxistaugliche Resilience-Muster: Retries, exponentielles Backoff, Jitter, Timeouts, begrenzte Retry-Fenster und fehlertolerante Wrapper um externe Aufrufe.
Für wen sich dieser Skill lohnt
Dieser python-resilience skill passt besonders gut für Entwickler, Plattform-Teams und Agent-Nutzer, die an Services arbeiten, die mit APIs, Datenbanken, Queues oder anderen vernetzten Systemen sprechen. Besonders nützlich ist er, wenn du Hilfe bei der Code-Generierung brauchst, die über „füge einen Retry hinzu“ hinausgeht und stattdessen sinnvolle Grenzen für den Umgang mit Fehlern setzt.
Die eigentliche Aufgabe, die er löst
Die meisten Nutzer brauchen keine Theorieseite über Reliability. Sie brauchen funktionierende Python-Muster für Fragen wie:
- „Soll dieser Fehler erneut versucht werden oder sofort fehlschlagen?“
- „Welche Backoff-Strategie ist unter Last sicher?“
- „Wo sollten Timeouts definiert werden?“
- „Wie vermeide ich unendliche Retries und Thundering Herds?“
- „Welcher Decorator oder Helper sollte diesen externen Call kapseln?“
Der python-resilience Skill ist wertvoll, weil er diese Entscheidungen explizit macht, statt Retry-Logik als Einzeilen-Patch zu behandeln.
Was ihn von einem generischen Prompt unterscheidet
Ein generischer Coding-Prompt fügt möglicherweise überall Retries ein oder ignoriert den Unterschied zwischen transienten und permanenten Fehlern. python-resilience for Reliability ist klar meinungsstärker: Nur retrybare Fehler erneut versuchen, Jitter ergänzen, Versuche und Gesamtzeit begrenzen und externe Systemgrenzen als Hauptort für Resilience-Logik behandeln.
Was die Quelle tatsächlich abdeckt
Der Upstream-Skill besteht aus einer einzigen Datei SKILL.md, ist aber dennoch inhaltlich substanziell. Im Zentrum stehen:
- transiente vs. permanente Fehler
- exponentielles Backoff
- Jitter
- begrenzte Retries
- praxisnahe Python-Beispiele mit
tenacity
Das macht den Skill leicht prüfbar und schnell einsetzbar, bedeutet aber auch: Du bekommst Leitlinien, keine fertige Bibliothek und kein Test-Harness.
Wann dieser Skill besonders gut passt
Nutze python-resilience, wenn du:
- Third-Party-APIs aufrufst
- instabile Netzwerk- oder Service-Interaktionen kapselst
- Microservices oder Worker baust
- Reliability-Kontrollen in gemeinsame Client-Utilities einziehst
- mit Rate Limiting, temporären Ausfällen oder sporadischen Timeouts umgehst
Wenn dein Code überwiegend aus reiner In-Process-Logik besteht, ist dieser Skill wahrscheinlich nicht die Installation mit dem größten Hebel.
So nutzt du den python-resilience Skill
Installationskontext für python-resilience
Installiere den Skill aus dem Repository wshobson/agents:
npx skills add https://github.com/wshobson/agents --skill python-resilience
Öffne nach der Installation zuerst die Skill-Datei:
plugins/python-development/skills/python-resilience/SKILL.md
Dieser Bereich des Repositories scheint nur das Skill-Dokument zu enthalten. Die Übernahme ist daher unkompliziert: Skill lesen und die Muster anschließend im eigenen Code anwenden.
Diese Datei solltest du zuerst lesen
Beginne mit SKILL.md von oben nach unten. Die wertvollsten Abschnitte für den Einstieg sind:
When to Use This SkillCore ConceptsQuick Start
Diese Reihenfolge gibt dir zuerst Fit, dann Designregeln und anschließend die Form der Implementierung, bevor du das Modell bittest, deinen Code zu ändern.
Welche Eingaben der Skill von dir braucht
Die Qualität der python-resilience usage hängt stark vom Kontext ab, den du mitlieferst. Bevor du den Skill aufrufst, solltest du Folgendes zusammentragen:
- die Funktion oder Service-Grenze, die geschützt werden soll
- den Typ der Abhängigkeit: HTTP API, DB, Queue, Cache, Dateisystem
- die genauen Exceptions oder Fehlersymptome, die beobachtet wurden
- ob Fehler transient oder permanent sind
- Timeout-Erwartungen
- Idempotenz-Bedingungen
- maximal akzeptable Latenz
- Retry-Budget: Anzahl der Versuche oder Gesamtdauer
- ob viele Clients gleichzeitig erneut versuchen könnten
Ohne diese Angaben erzeugt das Modell oft zu breit angelegte Retry-Logik.
Aus einem groben Ziel einen starken Prompt machen
Schwacher Prompt:
Add resilience to this Python API client.
Besserer Prompt:
Use the python-resilience skill to refactor this Python client method.
Context:
- Dependency: third-party HTTP API
- Library: httpx
- Traffic: moderate, bursty
- Common failures: read timeout, connect timeout, occasional 429 and 503
- Permanent failures: 400, 401, 403 should not be retried
- Idempotency: safe to retry GET requests only
- SLO: fail within 8 seconds total
- Requirement: use bounded retries, exponential backoff with jitter, and clear logging
Task:
- Propose a retry policy
- Implement the wrapper/decorator
- Explain which exceptions and status codes are retryable
- Show where timeout configuration should live
Das funktioniert besser, weil der Skill dadurch genau die Entscheidungsgrenzen bekommt, für die er ausgelegt ist.
Erst die Policy anfordern, dann den Code
Ein starker Workflow mit dem python-resilience guide sieht so aus:
- nach der Fehlerklassifikation fragen
- eine Retry-/Timeout-Policy anfordern
- die Trade-offs prüfen
- erst danach Implementierungscode erzeugen
So springst du nicht direkt zu Decorators, bevor überhaupt klar ist, was retried werden sollte und was nicht.
Den Skill an externen Systemgrenzen einsetzen
Der Skill ist am wirksamsten bei Code, der Prozess- oder Netzwerkgrenzen überschreitet, zum Beispiel:
httpx- oderrequests-Aufrufe- Message-Publishing oder -Consumption
- Datenbankabfragen mit bekannten transienten Fehlermustern
- Cloud-SDK-Aufrufe
- Service-Client-Methoden
Starte nicht damit, große Business-Workflows Ende-zu-Ende zu kapseln. Setze Resilience-Kontrollen zuerst um die instabile Abhängigkeit herum.
Woran du gute python-resilience-Ausgaben erkennst
Wenn der Skill gut arbeitet, sollte die Ausgabe in der Regel Folgendes enthalten:
- explizite Regeln für transiente vs. permanente Fehler
- endliche Retry-Grenzen
- exponentielles Backoff
- Jitter
- Platzierung der Timeouts
- Beispiele mit Python-Tools wie
tenacity - Hinweise zu Idempotenz und Side Effects
Wenn das Ergebnis nur „retry 3 times“ sagt, solltest du nach einer expliziteren Retry-Policy fragen.
Welches praktische Implementierungsmuster du anfordern solltest
Der Quell-Skill enthält einen tenacity-basierten Quick Start. In der Praxis heißt das, du kannst nach Mustern fragen wie:
- einem Decorator um eine Service-Client-Methode
- einem Wrapper-Helper für alle ausgehenden HTTP-Calls
- getrennten Retry-Policies für Reads vs. Writes
- Retries, gefiltert nach Exception-Typ oder Status-Code
Bei mutierenden Operationen solltest du das Modell begründen lassen, warum ein Retry sicher ist. Reliability-Muster, die Idempotenz ignorieren, können doppelte Side Effects erzeugen.
Häufige Fehler bei der python-resilience-Nutzung
Achte in generiertem Code auf diese Probleme:
- Retries bei Authentifizierungs- oder Validierungsfehlern
- keine Timeouts, nur Retries
- Retry-Schleifen ohne Gesamtbudget
- Backoff ohne Jitter
- zu viel Code gekapselt, sodass die eigentliche Ursache verborgen wird
- nicht-idempotente Writes werden standardmäßig retried
Das sind die praktischen Stolpersteine, die wichtiger sind als Code-Stil.
Ein nützlicher Workflow in deinem Repository
Für die besten Ergebnisse solltest du dem Skill Folgendes geben:
- die aktuelle Client-Funktion
- die Exception-Klassen aus deinen Logs
- Beispiel-Status-Codes
- dein Latenz- oder Retry-Budget
- ein oder zwei repräsentative Failure-Traces
Frage dann nach:
- einer Policy-Zusammenfassung
- Code-Änderungen
- Tests, die du ergänzen solltest
- Monitoring-Feldern, die geloggt werden sollten
Diese Reihenfolge führt meist zu besser nutzbaren Ergebnissen als die Frage nach Code allein.
FAQ zum python-resilience Skill
Ist python-resilience nur für Web-APIs gedacht?
Nein. Der python-resilience skill dreht sich generell um unzuverlässige Abhängigkeiten. HTTP-Calls sind nur das naheliegendste Beispiel, aber dieselbe Logik gilt auch für Queues, Datenbanken, Caches und Cloud-Services, bei denen transiente Fehler häufig sind.
Ist das eine Bibliothek oder ein Guidance-Skill?
Es ist ein Guidance-Skill, kein eigenständiges Python-Package. Er vermittelt Muster und zeigt Implementierungsstile, einschließlich Beispielen auf Basis von tenacity, aber du setzt diese Muster weiterhin in deiner eigenen Codebasis um.
Wann sollte ich python-resilience nicht verwenden?
Nutze python-resilience nicht als Standardschicht über jeder Funktion. Er passt schlecht zu:
- reiner CPU-gebundener lokaler Logik
- Fehlern, die klar permanent sind
- Workflows, bei denen Retries unsichere Side Effects duplizieren würden
- Systemen, deren Latenzbudgets zu eng für Retry-Fenster sind
In solchen Fällen ist Fail Fast oder ein Redesign der Integration die bessere Wahl.
Eignet sich python-resilience für Einsteiger?
Ja, sofern du bereits grundlegende Python-Kenntnisse und Exception Handling mitbringst. Die Kernideen des Skills sind zugänglich, aber der Nutzer muss dennoch Business-Kontext liefern, etwa Retry-Sicherheit, Timeout-Budgets und welche Fehler überhaupt erneut versucht werden dürfen.
Warum ist das besser, als ein LLM einfach nach Retries zu fragen?
Der Vorteil von python-resilience for Reliability ist nicht nur Code-Generierung. Der Skill hilft dem Modell dabei, über Fehlerkategorien, begrenzte Retries und Backoff-Verhalten nachzudenken. Generische Prompts übersehen diese Grenzen oft und erzeugen Retry-Logik, die unter Last unsicher oder zu laut ist.
Legt python-resilience die exakte Retry-Policy für mich fest?
Nicht automatisch. Der Skill liefert ein starkes Vokabular und gute Muster, aber die beste Policy hängt vom Verhalten deiner Abhängigkeit, deinen Latenzanforderungen und deinen Idempotenz-Regeln ab. Du solltest damit rechnen, Anzahl der Versuche, Wartebereiche und Retry-Filter an deine Umgebung anzupassen.
So verbesserst du den python-resilience Skill
Gib dem python-resilience Skill eine bessere Fehlerklassifikation
Der schnellste Weg, Ergebnisse mit python-resilience zu verbessern, ist die klare Angabe, welche Fehler transient und welche permanent sind. Zum Beispiel:
- transient:
ConnectTimeout,ReadTimeout,503, einige429 - permanent:
400,401,403, Schemafehler, falsche Zugangsdaten
Diese eine Unterscheidung entscheidet meist darüber, ob die generierte Policy sicher ist.
Gib Latenz- und Retry-Budgets vor
Wenn du kein Budget angibst, wählt das Modell möglicherweise beliebige Retry-Zahlen. Nenne Grenzen wie:
- maximal 3 Versuche
- gesamtes Retry-Fenster unter 8 Sekunden
- Timeout pro einzelner Anfrage 2 Sekunden
- Background-Job darf insgesamt 30 Sekunden brauchen
Solche Vorgaben führen zu realistischeren Implementierungen.
Sage, ob Operationen idempotent sind
Viele Resilience-Fehler entstehen, weil der Kontext zu Side Effects fehlt. Verbessere die python-resilience usage, indem du Operationen kennzeichnest als:
- sicher zu retrien
- nur mit Idempotency Key sicher
- nicht sicher automatisch zu retrien
Das beeinflusst sowohl das Design des Decorators als auch die Exception-Filter.
Bitte explizit um Regeln für Nicht-Retry-Fälle
Frage nicht nur: „Was sollte retried werden?“ Frage auch:
- was sollte sofort fehlschlagen?
- was sollte dem aufrufenden Code unmittelbar gemeldet werden?
- was sollte geloggt, aber nicht retried werden?
Dadurch wird die Ausgabe deutlich produktionsnäher.
Fordere Observability zusammen mit der Implementierung an
Ein guter python-resilience guide sollte nicht bei Decorators enden. Bitte das Modell, zusätzlich einzubauen:
- Anzahl der Versuche in den Logs
- Exception-Typ
- verstrichene Zeit
- finalen Fehlergrund
- Meldung bei ausgeschöpften Retries
Ohne das kann deine Resilience-Schicht verschleiern, warum Aufrufe fehlschlagen.
Nach dem ersten Entwurf gezielt nachschärfen
Verfeinere die erste Ausgabe mit konkretem Feedback wie:
- „Retrye keine POST-Requests.“
- „Begrenze die Gesamtzeit, nicht nur die Anzahl der Versuche.“
- „Behandle 429 anders als 500.“
- „Nutze Jitter, um synchronisierte Retries zu vermeiden.“
- „Trenne Timeout-Konfiguration von Retry-Konfiguration.“
Solche Iterationen verbessern die Implementierung spürbar.
Teste die vorgeschlagenen Fehlerpfade des Skills
Bitte das Modell, Tests zu erzeugen für:
- Retries bei transienten Exceptions
- Fast-Fail-Verhalten bei permanenten Exceptions
- ausgeschöpfte Retries
- Durchsetzung von Timeouts
- Grenzen der Backoff-Policy
Nicht getesteter Resilience-Code ist leicht falsch konfiguriert und schwer vertrauenswürdig.
Verbessere die python-resilience-Ausgabe mit echten Traces
Wenn du Logs oder Beispiel-Stack-Traces hast, füge sie hinzu. Reale Fehlerspuren helfen python-resilience, engere Exception-Filter und glaubwürdigere Timeout-/Backoff-Einstellungen zu empfehlen als abstrakte Prompts.
Halte die Abstraktionsebene bewusst klein
Ein häufiger Fehler ist, den Skill ein vollständiges Resilience-Framework entwerfen zu lassen, obwohl du nur einen zuverlässigen Client-Wrapper brauchst. Starte kleiner:
- eine Funktion
- eine Abhängigkeit
- eine Retry-Policy
Erweitere erst, wenn sich das Muster in der Praxis bewährt.
Nutze python-resilience als Review-Perspektive
Auch wenn du den Code bereits geschrieben hast, ist python-resilience als Review-Prompt nützlich. Bitte den Skill, bestehende Retry-Logik zu prüfen auf:
- unbegrenzte Retries
- fehlenden Jitter
- schlechte Platzierung von Timeouts
- Retries bei permanenten Fehlern
- versteckte Risiken durch Side Effects
Gerade in reiferen Codebasen ist dieser Review-orientierte Einsatz oft der wertvollste Anwendungsfall des Skills.
