Auto-Heal
Auto-Heal
Section titled “Auto-Heal”Auto-Heal is HydraSkill’s automatic failover system. When an IP gets blocked, banned, or rate-limited, HydraSkill switches to a new IP transparently — your agent never handles proxy errors.
How Detection Works
Section titled “How Detection Works”HydraSkill monitors responses for block signals:
| Signal | Detection |
|---|---|
| HTTP 403 Forbidden | Direct block |
| HTTP 429 Too Many Requests | Rate limit |
| CAPTCHA pages | Content analysis |
| Connection reset | Network-level block |
| Empty response | Stealth block |
| Redirect to block page | URL pattern matching |
Recovery Flow
Section titled “Recovery Flow”Agent Request → Proxy → Target Site ↓ (blocked!) HydraSkill detects ↓ New IP assigned ↓ Request retried ↓Agent receives ← Success responseYour agent code stays simple:
# No try/except needed for proxy errorsresponse = requests.get(url, proxies=proxy.to_dict())# HydraSkill already retried if the first IP was blockedConfiguration
Section titled “Configuration”proxy = client.get_proxy( target="amazon.com", auto_heal=True, # enabled by default max_retries=3, # retry up to 3 times retry_delay_ms=500, # wait between retries rotate_on_block=True, # get new IP on block)Retry Budget
Section titled “Retry Budget”Each request has a retry budget (default: 3 attempts). If all retries fail, HydraSkill raises a ProxyExhaustedError so your agent can handle the edge case:
from hydraskill.exceptions import ProxyExhaustedError
try: response = requests.get(url, proxies=proxy.to_dict())except ProxyExhaustedError: # All retry attempts failed — target may be fully blocking log.warning(f"Could not reach {url} after 3 proxy rotations")Metrics
Section titled “Metrics”Track Auto-Heal activity in your dashboard:
- Heal Rate — % of requests that needed IP rotation
- Avg Recovery Time — milliseconds to switch IP
- Block Sources — which targets trigger the most blocks
Disabling Auto-Heal
Section titled “Disabling Auto-Heal”For debugging or when you need raw responses (including blocks):
proxy = client.get_proxy( target="example.com", auto_heal=False # get raw responses, including 403s)