Appearance
Recovery Recipes
FreshSource: 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/abc123If 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/focusOr 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/devicesServer 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)