Total Proxies
12
pool.count()
Healthy
7
status: healthy
Degraded
3
status: degraded
Blocked / Dead
2
status: blocked | dead
| ID (sha1[:12]) | Type | Tags | Region | Status | Success Rate | Latency | Probes | Last Probed | |
|---|---|---|---|---|---|---|---|---|---|
| a1b2c3d4e5f6 | http | datacenter | us-east | healthy | 142ms | 50 | 2026-06-29T09:40Z | ||
| 7e8f9a0b1c2d | socks5 | residential | us-west | healthy | 214ms | 32 | 2026-06-29T09:38Z | ||
| 3d4e5f6a7b8c | http | mobile | eu-west | degraded | 388ms | 15 | 2026-06-29T09:35Z | ||
| 9c0d1e2f3a4b | https | datacenter | ap-south | blocked | — | 8 | 2026-06-29T09:20Z | ||
| 5b6c7d8e9f0a | socks5 | residential | us-central | healthy | 98ms | 3 | 2026-06-29T09:44Z |
Probe History
ProbeResult[] — last 500 entries · FailureMode: success | proxy-blocked | ip-banned | rate-limited | captcha | target-down | unknown
| Probed At | Proxy ID | Target | Success | HTTP | Latency | FailureMode | Reasoning |
|---|---|---|---|---|---|---|---|
| 2026-06-29 09:44 | 5b6c7d8e9f0a | greenhouse.io | true | 200 | 98ms | success | — |
| 2026-06-29 09:40 | a1b2c3d4e5f6 | greenhouse.io | true | 200 | 142ms | success | — |
| 2026-06-29 09:38 | 7e8f9a0b1c2d | loxo.co | true | 200 | 214ms | success | — |
| 2026-06-29 09:35 | 3d4e5f6a7b8c | greenhouse.io | false | 429 | 388ms | rate-limited | 429 Too Many Requests — backoff required |
| 2026-06-29 09:20 | 9c0d1e2f3a4b | loxo.co | false | 403 | 510ms | proxy-blocked | IP range detected as datacenter, request denied |
| 2026-06-29 08:50 | a1b2c3d4e5f6 | remoteok.io | false | 407 | 201ms | ip-banned | Proxy auth failed, IP added to blocklist |
| 2026-06-29 08:30 | 7e8f9a0b1c2d | loxo.co/apply | false | 403 | 445ms | captcha | Cloudflare challenge page detected |
Session Bindings
SessionBinding: { profileId, proxyId, boundAt, targetDomain? } — ghost-relay bind <profileId> <proxyId> [domain]
Profile → Proxy (global)
profileIda3f7b2c8-d1e4
proxyIda1b2c3d4e5f6
boundAt2026-06-29T08:00Z
targetDomainundefined
Profile → Proxy (domain-scoped)
profileId9e2c4a01-b5f3
proxyId7e8f9a0b1c2d
boundAt2026-06-29T09:10Z
targetDomaingreenhouse.io
Profile → Proxy (domain-scoped)
profileId9e2c4a01-b5f3
proxyId5b6c7d8e9f0a
boundAt2026-06-29T09:22Z
targetDomainloxo.co
Key format: profileId for global bindings, profileId:targetDomain for domain-scoped. Domain-scoped takes precedence over global when both exist.
Pool Health Overview
successRate: 0.0–1.0 float (CLI renders as 10-block bar: █░░░░░░░░░) — updateHealth() rolling window
| Proxy ID | Tags | Status | Success Rate | CLI Bar | Probe Count | Avg Latency |
|---|---|---|---|---|---|---|
| 5b6c7d8e9f0a | residential | healthy | ██████████ | 3 | 98ms | |
| a1b2c3d4e5f6 | datacenter | healthy | █████████░ | 50 | 142ms | |
| 7e8f9a0b1c2d | residential | healthy | ████████░░ | 32 | 214ms | |
| 3d4e5f6a7b8c | mobile | degraded | ██████░░░░ | 15 | 388ms | |
| 9c0d1e2f3a4b | datacenter | blocked | ░░░░░░░░░░ | 8 | — |
Health Thresholdsfrom constants.ts
≥ 0.8 → healthy
≥ 0.5 → degraded
< 0.5 → blocked / dead
Pool Configuration
Store Paths~/.ghost-relay/
Pool store
~/.ghost-relay/pool.json
Session bindings
~/.ghost-relay/bindings.json
Probe history
~/.ghost-relay/history.json
Constantsshared/constants.ts
PROBE_WINDOW (rolling success rate)
20
MAX_HISTORY_ENTRIES
500
HEALTH_THRESHOLD_HEALTHY
0.8
HEALTH_THRESHOLD_DEGRADED
0.5
Proxy ID Format
IDs are derived from the proxy URL using sha1(url).slice(0,12) — deterministic, collision-resistant, 12-char hex.
crypto.createHash('sha1').update(url).digest('hex').slice(0, 12)
// "http://user:pass@host:8080" → "a1b2c3d4e5f6"