Skip to content

Recovery Recipes

Fresh

Source: bible/runbook.md (Recovery recipes section)

Step-by-step recovery procedures for known incidents.

CreepJS showing 33% headless

Symptoms: CreepJS reports headless: 33%, webDriverIsOn: true, lieProps shows Navigator.webdriver.

Diagnosis: JS Object.defineProperty(navigator, 'webdriver') patch triggers CreepJS lie detection (condition 3 of webDriverIsOn).

Recovery steps:

bash
# Verify --disable-blink-features=AutomationControlled is in launch args (server.mjs)
grep "disable-blink-features" C:\Users\jennb\browser-sender\lib\dna-engine\mini-engine-v2\server.mjs

# Verify NO JS webdriver patch exists
grep "navigator.*webdriver" C:\Users\jennb\browser-sender\lib\dna-engine\mini-engine-v2\server.mjs
# Should NOT match any Object.defineProperty for webdriver

# Verify stealth plugin's webdriver evasion is deleted
grep "navigator.webdriver" C:\Users\jennb\browser-sender\lib\dna-engine\mini-engine-v2\server.mjs
# Should show: stealth.enabledEvasions.delete('navigator.webdriver')

Real fix: Already landed 2026-05-18. Chrome flag handles webdriver at C++ level. No JS needed.

Every HTTPS site fails with ERR_SSL_PROTOCOL_ERROR

Symptoms: about:blank works. Every https:// URL fails.

Diagnosis: Go TLS proxy on 8888 is default-on and mangling handshakes.

Recovery:

bash
grep "TLS_PROXY" antidetect-engine/dist/browser/manager.js | head -1
# Should show: TLS_PROXY === 'true' (opt-in, NOT default-on)

Persona browser opens at wrong size

Symptoms: Browser not 1366x768. Google forces "Verify it's you."

Recovery:

bash
grep "PHYSICAL_SCREEN" C:\Users\jennb\browser-sender\lib\dna-engine\mini-engine-v2\core\fingerprint-lite.mjs
# Should show: { width: 1366, height: 768 }

Account stuck in Cooling state

Symptoms: Account stuck at COOLING, never returns to IDLE.

Recovery:

bash
# Force unlock
curl -X POST http://localhost:4700/accounts/abc123/unlock \
  -H "x-api-key: ghost-engine-key"

# Check failure history
curl http://localhost:4700/error-recovery/account/abc123

If 5+ recent failures, quarantine the account and run self-healing:

bash
curl -X POST http://localhost:4700/self-healing/fix \
  -H "Content-Type: application/json" \
  -d '{ "accountId": "abc123" }'

Married proxy keeps getting rejected

Symptoms: Account login fails with "signin/rejected" or "unusual activity" every retry.

Recovery: The cookie-refresh plugin's proxy pool fallback should handle this automatically. To force a manual re-marriage:

bash
# Pull a fresh proxy from pool
curl -X POST http://localhost:4700/proxies/rotate \
  -H "x-api-key: ghost-engine-key"

# Assign new proxy to account
curl -X POST http://localhost:4700/proxies/assign \
  -H "Content-Type: application/json" \
  -d '{ "accountId": "abc123", "proxyId": "proxy-new-id" }'

Ghost mode session has wrong window focus

Symptoms: OS-level clicks land in the wrong window.

Recovery:

bash
# Re-focus the target window via OS-input
curl -X POST http://localhost:4700/browser/abc123/focus

Or close other windows. Only one desktop ghost session at a time.

ADB device not detected

Symptoms: /mobile/devices returns empty.

Recovery:

bash
# Check ADB itself
adb devices

# If empty, restart adb
adb kill-server
adb start-server
adb devices

# For TCP/IP devices
adb connect 192.168.1.100:5555

# Re-query Ghost Engine
curl http://localhost:4700/mobile/devices

Server eats CPU at idle

Symptoms: node server.mjs consumes high CPU when no work is running.

Diagnosis: Probably a runaway scheduler or stuck job in job-queue.

Recovery:

bash
# Check queue depth
curl http://localhost:4700/jobs/stats

# Pause autopilot
curl -X DELETE http://localhost:4700/schedules/autopilot \
  -H "x-api-key: ghost-engine-key"

# Cancel stuck jobs
curl http://localhost:4700/jobs | jq '.data[] | select(.state=="running") | .id'
# Then delete each with: curl -X DELETE http://localhost:4700/jobs/{id}

Open investigations

  • Golden 17 ghost mode scores: need to run Golden 17 against V2 in ghost mode
  • VPS deployment procedure: port os-input.mjs to xdotool for Linux
  • Reddit ghost signup end-to-end: test both desktop and mobile paths

Closed during recent sessions

  • CreepJS 33% headless detection: JS webdriver patch triggers lie detection. Chrome flag handles it natively (2026-05-18)
  • ContentIndex/ContactsManager missing: stub them to reduce "like headless" from 25% to 6% (2026-05-18)