http-retry-session — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited http-retry-session (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill when a script makes outbound HTTP calls and a single transient failure (a 429, a 503, a dropped connection) should not crash the run - and a slow endpoint should never hang it forever. It wires a requests.Session with a urllib3 Retry policy (backoff + status-forcelist + honored Retry-After) and a TimeoutSession subclass that applies a default connect/read timeout to every request unless overridden.
requests.get/post bare, with no retry policy and no timeout.httpx/aiohttp with their own retry/timeout setup instead.User input:
My API client randomly dies on 429s and once hung for ten minutes. Make it resilient.Output:
# Copy assets/session.py into your project, then:
from session import make_session
# BYO base URL via env or config; nothing target-specific is hardcoded.
session = make_session(total_retries=4, backoff_factor=0.5, timeout=(3.05, 30))
resp = session.get("https://api.example.com/v1/items", params={"page": 1})
resp.raise_for_status() # retries already exhausted 429/5xx by here
data = resp.json()Every call now retries idempotent methods on 429/500/502/503/504 with exponential backoff (and respects a Retry-After header), and applies a (connect, read) timeout so no request hangs indefinitely.
HTTPAdapter with a Retry on both http:// and https://; reuse the session for connection pooling.status_forcelist; set respect_retry_after_header=True so the server's pacing wins.backoff_factor so waits grow exponentially (0.5 -> ~0.5s, 1s, 2s, 4s); cap total retries.(connect, read) timeout to every request - never call without one, that is what hangs.allowed_methods); do not silently retry a non-idempotent POST.Reference: assets/session.py.
Distilled from production use across the author's automation projects. v1.0.0. See also: [[proxy-rotator]], [[rate-limit-budget]], [[webhook-receiver]].
→ Build the full runnable bot with Trawlkit.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.