Curate Sources
SkillFiles & storageCurate proxywhirl proxy sources, prune broken/stale/duplicate sources and discover new high-quality ones via web research. Syncs all downstream files: sources.py, tests, docs, and reference inventories. Use when asked to update, clean up, audit, curate, or refresh proxy sources.
Use Curate Sources in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Curate Sources and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Curate Sources skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by wyattowalsh/proxywhirl in .claude/skills/curate-sources/SKILL.md and read by Ahel’s review.
Maintain the proxy source list in proxywhirl/sources.py and keep all downstream files in sync: tests, docs, reference inventories, and exports.
Quick Start
Invoke the source-curator agent:
/agent source-curator
Or run the validation script directly:
uv run python scripts/curate_sources.py validate # Full validation report (JSON)
uv run python scripts/curate_sources.py check-candidate URL # Check a candidate source
Workflow
- Validate — Run
scripts/curate_sources.py validateto get health status of all sources - Prune — Remove or disable sources that are broken, stale, or duplicates
- Discover — Search GitHub and the web for new proxy list repos/APIs
- Integrate — Add new sources and remove pruned ones in
sources.py - Sync downstream — Update reference inventory, tests, and docs
- Verify — Run lint + all source-related tests to ensure nothing is broken
Files That Must Stay in Sync
See the full file inventory in .claude/agents/source-curator.md.
Key files: proxywhirl/sources.py (primary), references/known-sources.md (inventory), tests/unit/test_sources.py, tests/contract/test_proxy_sources.py, tests/unit/test_sources_audit.py, README.md (feature card count), and all code that imports sources (cli.py, exports.py, __init__.py).
References
- Source Schema — ProxySourceConfig model, naming conventions, collection rules
- Known Sources — Current source inventory for deduplication
Pruning Criteria
| Condition | Action |
|---|---|
| HTTP 404/410 for 7+ days | Remove entirely |
| GitHub repo archived | Remove entirely |
| GitHub repo not pushed in 90+ days | Disable (enabled=False) |
| GitHub repo <10 stars | Flag for review |
| Empty response / no proxy data | Disable if persistent |
| Duplicate of existing source | Remove the lower-quality one |
In RECOMMENDED_SOURCES | NEVER prune without user approval |
In API_SOURCES | NEVER prune (high-value) |
Adding New Sources
New sources must meet ALL criteria:
- Returns valid proxy data (IP:PORT format)
- Updated within the last 30 days
- For GitHub repos: >50 stars preferred, active maintenance
- Not a duplicate of an existing source (check
known-sources.md) - Plain text format preferred (simplest parsing)
Variable Naming Convention
| Source Type | Pattern | Example |
|---|---|---|
| GitHub repo | GITHUB_{OWNER}_{PROTOCOL} | GITHUB_MONOSANS_HTTP |
| API service | {SERVICE}_{PROTOCOL} | PROXY_SCRAPE_SOCKS5 |
| Web-hosted | {DOMAIN}_{PROTOCOL} | PROXYSPACE_HTTP |
Collection Membership
| Collection | Criteria |
|---|---|
ALL_HTTP_SOURCES | Any source providing HTTP/HTTPS proxies |
ALL_SOCKS4_SOURCES | Any source providing SOCKS4 proxies |
ALL_SOCKS5_SOURCES | Any source providing SOCKS5 proxies |
ALL_SOURCES | Auto-computed: HTTP + SOCKS4 + SOCKS5 |
RECOMMENDED_SOURCES | Only the most reliable, fast, pre-validated sources (user approval required) |
API_SOURCES | Only API-based sources (GeoNode, etc.) |
Code Style for New Definitions
# owner/repo-name - Description (stars, update frequency)
GITHUB_OWNER_PROTOCOL = ProxySourceConfig(
url="https://raw.githubusercontent.com/owner/repo/branch/file.txt",
format="plain_text",
protocol="socks5", # omit for HTTP (default)
trusted=True, # only if source pre-validates proxies
)
Consistency Checklist
See the full checklist in .claude/agents/source-curator.md.
Quick verification:
uv run python -c "from proxywhirl.sources import ALL_SOURCES; print(f'{len(ALL_SOURCES)} sources loaded')"
uv run pytest tests/unit/test_sources.py tests/unit/test_sources_audit.py tests/contract/test_proxy_sources.py -v
Signals
- GitHub stars
- 26
- Forks
- 6
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
curate-sources- Source
- github.com/wyattowalsh/proxywhirl
github.com/wyattowalsh/proxywhirl
Related picks
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonpptx
Skill · anthropics
More in Files & storagedocx
Skill · anthropics
More in Files & storageresearch
Skill · mattpocock
More in Files & storageto-tickets
Skill · mattpocock
More in Files & storage