tenacity backoff tuner

    1

    Audit Python tenacity retry logic to fix thundering herds, unbounded waits, and latency budget overruns.

    $10

    Secure checkout via Stripe

    30-day refund guarantee

    Converts to your local currency at checkout

    0 installsSecurity scanned

    Works with the AI tools you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIGitHub CopilotGitHub CopilotGemini CLIGemini CLI+20 more

    tenacity backoff tuner

    Example session with this skill installed

    Audit the tenacity retry settings in ./services/payment_processor and suggest fixes for any unbounded backoffs or missing jitter.

    • Read your context and instructions
    • Compiled the tenacity backoff tuner
    • Generated the document

    Analyzed 14 files in ./services/payment_processor. Found 2 high-severity findings related to unbounded exponential backoff and synchronized retry intervals.

    Tenacity Backoff Audit Report

    Finding IDSeverityLocationIssue
    BKO-2-a8f2Highclient.py:42wait_exponential missing max value (unbounded)
    BKO-4-c9d1Mediumdb_sync.py:112wait_fixed(2) used by concurrent workers (thundering herd)

    Recommended Fixes

    Finding BKO-2-a8f2: Unbounded Wait

    Problem: The current configuration allows the wait time to grow indefinitely, which will eventually hang the worker process.
    Fix: Cap the exponential wait and add a total delay stop condition.

    
    # Before
    @retry(wait=wait_exponential(multiplier=1))
    
    # After (Worst case: ~31s total across 6 attempts)
    @retry(
        stop=stop_after_attempt(6) | stop_after_delay(60),
        wait=wait_exponential_jitter(initial=1, max=10),
        reraise=True
    )
    
    Finding BKO-4-c9d1: Missing Jitter

    Problem: Fixed 2-second intervals cause all instances to hit the database simultaneously after a failure.
    Fix: Introduce jittered backoff.

    
    # Before
    @retry(wait=wait_fixed(2))
    
    # After (Prevents synchronization)
    @retry(
        stop=stop_after_attempt(5),
        wait=wait_random_exponential(multiplier=1, max=10),
        reraise=True
    )
    

    Next steps

    1. Review the generated patches in ./output/patches/.
    2. Apply BKO-2-a8f2.py to client.py to prevent worker hangs.
    3. Verify the new 31s worst-case latency fits within the payment_processor upstream timeout.

    tenacity-backoff-tuner.pdf

    PDF · document

    Generated

    Example file from a real run - the skill writes it into your workspace.

    Connects securely to your tools. The creator never sees your data.

    What you get

    Prevent thundering herds by adding jitter to synchronized API retries.Bound exponential backoff to prevent individual requests from hanging indefinitely.Validate that total retry duration stays within the caller's timeout budget.Identify unit errors where milliseconds are used instead of seconds.

    About this skill

    The problem

    Improperly configured retries lead to thundering herd outages, unbounded memory growth, and silent timeouts. Most developers use default backoff settings that lack jitter or fail to account for the total latency budget of the caller.

    What it does

    • Scans Python source code to detect risky tenacity configurations like fixed waits, missing jitter, or infinite retry loops.
    • Computes worst-case timing math for exponential backoff chains to ensure they fit within your request SLAs.
    • Identifies unit mistakes, such as using milliseconds in a library that expects seconds.
    • Generates paste-ready Python patches with optimized wait and stop parameters for every finding.

    Frameworks & tools

    Python, Tenacity.

    Why this beats prompting it yourself

    Manually calculating the cumulative sum of exponential waits with jitter is error-prone and tedious. This tool automates the math, enforces fleet-wide safety patterns, and provides a structured audit trail of every retry point in your codebase.

    Use cases

    • Hardening microservices against cascading failures by adding jitter to API clients.
    • Auditing legacy worker scripts to prevent infinite, resource-draining retries.
    • Tuning background job backoff to meet specific business-logic latency targets.

    Known limitations

    Does not support non-UTF-8 files or Python 2. Analysis is read-only and does not handle dynamic retry configurations defined at runtime outside of static analysis reach.

    How to install

    Works the same in every agent - Claude, Cursor, Codex, Copilot and 20+ more.

    ~30 seconds
    1. 1

      Download the ZIP

      Free skills download straight away. Paid skills unlock right after purchase.

    2. 2

      Unzip into your skills folder

      Every agent reads skills from one folder on your machine. Drop the unzipped folder in there.

    3. 3

      Ask your agent to use it

      Restart the agent if it was already running. It picks the skill up automatically - no config needed.

    Skills folder by agent

    Click the path to copy it. Create the folder if it does not exist yet.

    Reviews

    No reviews yet

    Be one of the first to try it. Every listed skill passes our trust checks below.

    Security scanned

    Passed our 8-point scan before listing

    Fresh listing

    Recently published to Agensi

    30-day refund

    Not a fit? Get your money back

    Trust & safety

    Security scanned

    Verified clean 14 days ago

    • Passed all security checks, Safe to install

    Listed14 days ago

    What's inside

    Frequently Asked Questions