Skip to main content

Multiple Gateways (same host)

Most setups should use one gateway because a single gateway can handle multiple messaging connections and agents. If you need stronger isolation or redundancy, such as a rescue profile, run separate gateways with isolated profiles and ports.

Isolation checklist (required)

  • FASED_CONFIG_PATH — per-instance config file
  • FASED_STATE_DIR — per-instance sessions, creds, caches
  • agents.defaults.workspace — per-instance workspace root
  • gateway.port (or --port) — unique per instance
  • Derived browser ports must not overlap
If these are shared, you will hit config races and port conflicts. Profiles auto-scope FASED_STATE_DIR + FASED_CONFIG_PATH and suffix service names.
Per-profile services:

Rescue-bot guide

Run a second Gateway on the same host with its own:
  • profile/config
  • state dir
  • workspace
  • base port plus derived browser ports
This keeps the rescue bot isolated from the main bot so it can debug or apply config changes if the primary bot is down. Port spacing: leave at least 20 ports between base ports so the derived browser/CDP ports never collide.

How to install (rescue bot)

Port mapping (derived)

Base port = gateway.port (or FASED_GATEWAY_PORT / --port).
  • browser control service port = base + 2 (loopback only)
  • extension relay CDP port = browser control + 1
  • Browser profile CDP ports auto-allocate from browser.controlPort + 9 .. + 108.
  • canvas host is served on the Gateway HTTP server (same port as gateway.port)
If you override any of these in config or env, keep them unique per instance. For hosted setups, keep each gateway loopback-first unless a specific instance needs a tailnet bind or proxy exposure.

Browser/CDP notes (common footgun)

  • Do not pin browser.cdpUrl to the same values on multiple instances.
  • Each instance needs its own browser control port and CDP range. The range is derived from its gateway port.
  • If you need explicit CDP ports, set browser.profiles.<name>.cdpPort per instance.
  • Remote Chrome: use browser.profiles.<name>.cdpUrl (per profile, per instance).

Manual env example

Quick checks