diff --git a/src/browser/config.ts b/src/browser/config.ts index c1e6cdc162f..3c066b4a699 100644 --- a/src/browser/config.ts +++ b/src/browser/config.ts @@ -232,11 +232,18 @@ export function resolveBrowserConfig( controlPort, ); const cdpProtocol = cdpInfo.parsed.protocol === "https:" ? "https" : "http"; + + // In headless/noSandbox environments (servers), prefer "openclaw" profile over "chrome" + // because Chrome extension relay requires a GUI browser which isn't available headless. + // Issue: https://github.com/openclaw/openclaw/issues/14895 + const preferOpenClawProfile = headless || noSandbox; const defaultProfile = defaultProfileFromConfig ?? - (profiles[DEFAULT_BROWSER_DEFAULT_PROFILE_NAME] - ? DEFAULT_BROWSER_DEFAULT_PROFILE_NAME - : DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME); + (preferOpenClawProfile && profiles[DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME] + ? DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME + : profiles[DEFAULT_BROWSER_DEFAULT_PROFILE_NAME] + ? DEFAULT_BROWSER_DEFAULT_PROFILE_NAME + : DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME); const extraArgs = Array.isArray(cfg?.extraArgs) ? cfg.extraArgs.filter((a): a is string => typeof a === "string" && a.trim().length > 0)