different-ai/openwork · error · Error

Browser provider is not available yet: ${requestedProvider}

Error message

Browser provider is not available yet: ${requestedProvider}

What it means

openBrowserUrlForAutomation only accepts provider values 'auto' or 'builtin' (after trim/lowercase). Any other non-empty provider string throws this error because alternate browser providers are not implemented in this build.

Source

Thrown at apps/desktop/electron/browser-panel.mjs:153

    const deadline = Date.now() + BROWSER_TARGET_RESOLVE_TIMEOUT_MS;
    while (Date.now() < deadline) {
      const targets = await listCdpTargets().catch(() => []);
      const target = targets.find((candidate) => (
        candidate?.type === "page" &&
        typeof candidate.id === "string" &&
        typeof candidate.url === "string" &&
        candidate.url.includes(marker)
      ));
      if (target?.id) return target.id;
      await new Promise((resolve) => setTimeout(resolve, BROWSER_TARGET_RESOLVE_INTERVAL_MS));
    }
    throw new Error("Could not resolve built-in browser CDP target.");
  }

  async function openBrowserUrlForAutomation(rawUrl, provider = "auto") {
    const requestedProvider = String(provider || "auto").trim().toLowerCase();
    if (requestedProvider && requestedProvider !== "auto" && requestedProvider !== "builtin") {
      throw new Error(`Browser provider is not available yet: ${requestedProvider}`);
    }
    const url = normalizeBrowserUrl(rawUrl);
    const tab = createBrowserTab("about:blank", { select: true });
    await tab.view.webContents.loadURL(browserTargetMarkerUrl(tab.tabId));
    const targetId = await resolveBrowserCdpTargetId(tab.tabId);
    await tab.view.webContents.loadURL(url);
    return {
      provider: "builtin",
      browser_url: cdpBrowserUrl(),
      target_id: targetId,
      tab_id: tab.tabId,
      url,
    };
  }

  function getBrowserTab(tabId = activeBrowserTabId) {
    return tabId ? browserTabs.get(tabId) ?? null : null;
  }

View on GitHub (pinned to 2b7df46e8a)

Solutions

  1. Omit the provider argument (defaults to 'auto')
  2. Pass provider: 'builtin' explicitly
  3. Fix the provider string casing/spelling so it normalizes to 'auto' or 'builtin'
  4. Remove third-party provider selection — it is not supported yet in this build

Example fix

// before
await openBrowserUrlForAutomation(url, { provider: 'chrome' });
// after
await openBrowserUrlForAutomation(url, { provider: 'builtin' });
Defensive patterns

Strategy: validation

Validate before calling

const ALLOWED = new Set(['auto', 'builtin']);
if (provider && !ALLOWED.has(String(provider).trim().toLowerCase())) {
  throw new Error(`provider must be 'auto' or 'builtin', got ${provider}`);
}

Type guard

function isBrowserProvider(v) { return typeof v === 'string' && ['auto','builtin'].includes(v.trim().toLowerCase()); }

Try / catch

try {
  await openBrowserUrlForAutomation(url, { provider });
} catch (e) {
  if (e.message.startsWith('Browser provider is not available yet')) {
    // fall back to default provider (omit the option)
    await openBrowserUrlForAutomation(url);
  } else throw e;
}

Prevention

When it happens

Trigger: Calling the browser automation API with provider set to something like 'chrome', 'external', 'system', or a typo such as 'BuiltIn' spelled differently after normalization (e.g. 'built-in').

Common situations: Passing a provider name copied from docs for a future/planned provider; typos like 'built_in'; callers hardcoding a provider that an older/newer build expects but this one rejects.

Related errors


AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01). Data as JSON: /api/errors/cd72d998d078e887. Report an issue: GitHub.