Skip to content
Back to skills

Proxy Optimizer

ASecurity

Optimize your Webshare proxy pool for a specific target website. Tests all proxies against the target, identifies blocked IPs by country/ASN/subnet using data from the webshare CLI, and replaces them via the Webshare MCP. Use when proxies are failing on a site, when setting up a new scraping target, or when you want to tune your proxy pool. Invoke with a target URL as argument.

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 3, 2026
ai-agentspythongobashtestinggitapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 3, 2026

npx -y skills add webshare-proxy/skills --skill proxy-optimizer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Proxy Optimizer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Proxy Optimizer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/webshare-proxy-proxy-optimizer/badge)](https://www.skillsdirectory.com/skills/webshare-proxy-proxy-optimizer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: proxy-optimizer
version: "2.0"
description: >
  Optimize your Webshare proxy pool for a specific target website. Tests all
  proxies against the target, identifies blocked IPs by country/ASN/subnet
  using data from the webshare CLI, and replaces them via the Webshare MCP.
  Use when proxies are failing on a site, when setting up a new scraping
  target, or when you want to tune your proxy pool. Invoke with a target URL
  as argument.
license: MIT
allowed-tools: Read, Write, Bash(webshare *), Bash(python *), Bash(python3 *)
argument-hint: "[target-url]"
metadata:
  category: proxy-management
  long-description: >
    A target-site tuner for your Webshare proxy pool. It probes every proxy
    in a plan against the site you care about, maps the failures to
    countries, ASNs and /24 subnets to expose patterns ("this ASN is 100%
    blocked here"), and then walks you through replacing exactly the blocked
    IPs — dry-run first, explicit confirmation, and a re-test to prove the
    fix. Plan and proxy data come from the webshare CLI; the targeted
    replacement itself runs through the Webshare MCP, since per-IP
    replacement is not in the CLI yet.
  tags: [proxies, blocking, replacement, asn, scraping-targets]
  install: npx skills add webshare-proxy/skills --skill proxy-optimizer
  example-prompts:
    - "My proxies keep failing on example.com — figure out which ones and fix it"
    - "Optimize my proxy pool for https://www.example.com"
    - "Which of my proxies are blocked on this site, grouped by ASN?"
  related: [proxy-manager, scraper]
---

# Target Site Proxy Optimizer

Optimize a Webshare proxy pool for a specific target website by testing,
analyzing, and replacing blocked proxies.

## Invocation

```
/proxy-optimizer https://www.example.com
```

The argument is the target URL to optimize proxies for.

## What this skill does / needs / will not do

**Does:** probes every proxy against the target, ranks failures by
country/ASN/subnet, and drives a confirmed, dry-run-first replacement of the
blocked IPs.

**Needs:**

1. The `webshare` CLI (`brew install webshare-proxy/tap/webshare`) with
   `WEBSHARE_API_KEY` exported — the script pulls plans and proxies through
   it. Verify with `webshare whoami`.
2. Python 3.10+.
3. For the replacement step only: the Webshare MCP server connected
   (`claude mcp add --transport http webshare https://mcp.webshare.io/ -H
   "Authorization: Token $WEBSHARE_API_KEY"`) and an active paid plan with
   replacement credits. Targeted per-IP replacement is not in the CLI yet,
   so the MCP's `create_proxy_replacement` is used for exactly this step.

**Will not do:**

- Replace proxies without a dry run and your explicit confirmation.
- Whole-pool refreshes — that is `webshare proxies refresh` territory
  (see the `proxy-manager` skill) and consumes an on-demand refresh.
- Test residential rotating pools per-IP (they have no fixed per-proxy
  address).

## Workflow

### Step 1: Check proxy count and ask about sampling

Find the plan and its size:

```bash
webshare plans list --json
```

If the plan has more than 50 proxies, ask the user:

**"Your plan has N proxies. Test all of them or a sample?"**

Options:
- All N proxies (takes longer)
- Sample of 20 (quick check)
- Sample of 50

If 50 or fewer, skip this question and test all.

### Step 2: Run the optimizer script

Run the script from this skill's directory:

```bash
python3 scripts/optimize_proxies.py --target <TARGET_URL> --workers 10 --timeout 15
```

If the user chose a sample, add `--sample N`. To pin a plan, add
`--plan-id <id>`. The script pulls the plan and proxy list via the
`webshare` CLI, outputs progress to stderr and structured JSON to stdout.
Parse the JSON output.

### Step 3: Report findings

Present the results to the user:

```
Proxy Optimization Report for <TARGET_URL>

Success rate: X% (N/M proxies working)

Problem areas:
- Countries: <list countries with failure rates>
- ASNs: <list ASNs with failure rates>
- Subnets: <list /24 subnets with failure rates>

Failed proxies: <count>
Replacement credits available: <count>
```

If success rate is 100%, report that all proxies are working and no action is
needed. Stop here.

### Step 4: Ask if the user wants details

Ask the user: **"Want to see which proxies are failing before we replace
them?"**

If yes, show a table of every failing proxy with its IP, country, ASN, error,
and latency from the `raw_results` in the JSON output. For example:

```
| IP              | Country | ASN                  | Error           | Latency |
|-----------------|---------|----------------------|-----------------|---------|
| 82.27.245.138   | ZA      | Xneelo               | 502 Bad Gateway | 396ms   |
| 82.27.246.135   | ZA      | Xneelo               | 502 Bad Gateway | 413ms   |
| 104.143.224.192 | GB      | Getechbrothers, Mb   | HTTP 429        | 808ms   |
```

Then ask: **"Replace these proxies? (dry run first)"**

If the user says no or wants to skip some, respect that. Only proceed with
the IPs they confirm.

### Step 5: Dry-run replacement

If there are failures AND the user has replacement credits, execute a dry-run
replacement using the Webshare MCP.

Use the `create_proxy_replacement` MCP tool with the parameters from the
script's `recommendations.mcp_actions` output:

- `plan_id`: from the script output
- `to_replace`: `{"type": "ip_address", "ip_addresses": [<failed IPs>]}`
- `replace_with`: `[{"type": "any"}]`
- `dry_run`: `true`

Present the dry-run results:

```
Dry-run preview:
- Proxies to remove: <count>
- Proxies to add: <count>

Proceed with replacement? (This will use <N> replacement credits)
```

### Step 6: Execute replacement (requires user confirmation)

**CRITICAL: Always ask the user for explicit confirmation before executing.**

If the user confirms, call `create_proxy_replacement` again with
`dry_run: false`.

Then poll `get_proxy_replacement` with the returned `id` until `state` is
`completed` or `failed`.

### Step 7: Verify

Re-run the optimizer script against the same target to confirm the
replacement improved the success rate.

Report the before/after comparison:

```
Before: X% success rate (N failures)
After:  Y% success rate (M failures)
```

## Important Rules

1. **Never skip the dry run.** Always preview before executing.
2. **Never replace without user confirmation.** Replacements consume credits
   and are irreversible.
3. **If replacement credits are 0**, report the findings but explain that
   replacements require credits (available on paid plans).
4. **If all proxies pass**, say so and stop. Don't suggest unnecessary
   replacements.
5. **Limit replacements to available credits.** If 20 proxies failed but only
   10 credits are available, prioritize replacing proxies in the
   worst-performing ASNs/subnets first.

## Troubleshooting

- **`webshare` CLI not found**: `brew install webshare-proxy/tap/webshare`
  or download from https://github.com/webshare-proxy/webshare-cli/releases
- **`WEBSHARE_API_KEY` not set**: `export WEBSHARE_API_KEY="..."` — generate
  one at https://dashboard.webshare.io/userapi/keys
- **No active plan found**: User needs an active Webshare subscription
- **0 replacement credits**: Available on paid plans only; user may need to
  upgrade
- **All proxies timeout**: Target site may be completely blocking datacenter
  IPs; suggest trying residential proxies instead
- **Replacement step fails**: Check the Webshare MCP is connected
  (`claude mcp list`); the CLI alone cannot execute targeted replacements

Files in this skill

  • SKILL.md7.4 KB
  • references/USECASES.md2.7 KB
  • scripts/optimize_proxies.py13.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…