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
- Omit the provider argument (defaults to 'auto')
- Pass provider: 'builtin' explicitly
- Fix the provider string casing/spelling so it normalizes to 'auto' or 'builtin'
- 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
- Omit provider unless you specifically need 'builtin'
- Normalize case/underscores before passing provider values
- Only use provider names documented for your app version
- Add client-side validation against the allowed set
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
- Agent context diagnostics timeout must be between 1 ms and 3
- Invalid cloud provider sync response.
- Invalid cloud provider sync status.
- Invalid cloud provider sync status response.
- t("providers.provider_id_required")
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/cd72d998d078e887.
Report an issue: GitHub.