Skip to content

Troubleshooting

Fresh

Source: bible/setup.md (Troubleshooting), bible/runbook.md (Gotchas)

Common problems and fixes.

Server won't start

  • Port in use: another process on 4700. Kill it or change GHOST_ENGINE_PORT in .env
  • Module not found: run npm install again
  • Node version: must be 18+ (20+ recommended). Check with node -v

Accounts not importing

  • Registry not found: check the path to registry.json. Default: browser-sender/data/account-identity/registry.json
  • Zero cookies: cookie directory might be empty. Accounts will work but need fresh login

Browser won't launch

  • Chrome not found: install Google Chrome (not Chromium). The engine looks in standard install paths
  • Profile locked: another Chrome instance is using the profile. Close it first

Ghost mode not working

  • No vision provider: set VISION_PROVIDER and the matching API key in .env
  • Window not focused: ghost mode requires window focus. Only one ghost session at a time on desktop

CTR not finding the domain

  • Rank below maxPages: default maxPages is 3. If your rank is > 30, CTR will not find the domain
  • Wrong city: check the city name matches a known geo-profile
  • Domain mismatch: case-sensitive in some cases. Try with and without www.

Too many campaign failures

  • Reduce concurrency: try "concurrency": 2 or 1
  • Check proxy health: curl http://localhost:4700/proxies/health
  • Cookie staleness: refresh cookies for the failing accounts

Rank not moving after 2 weeks

  • Volume too low: increase clicksPerDay
  • Single keyword: add 3-5 keyword variants
  • No supporting content: layer in cascades and brand-bombs

Account attrition too high

  • Reduce maxRunsPerAccount: try 20 instead of 30
  • Run warmup batches: curl -X POST http://localhost:4700/warmup/batch ...
  • Check proxy-pool size: refill if low

Gotchas

  1. Don't patch navigator.webdriver via JS. Use --disable-blink-features=AutomationControlled Chrome flag. JS patching triggers CreepJS lie detection
  2. Don't use big engine (:3500) for persona work. It doesn't accept inline fingerprint/location
  3. Don't pass windowSize or fingerprint from registry.json. Stale data (1440x900 macOS defaults). Let engine's locked defaults apply
  4. Ghost mode is one desktop session at a time. SendInput requires window focus. Mobile (ADB) has no such limit
  5. Vision calls cost ~$0.003 each. Only use for navigation, not data reads