You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: Agents ignore the default browser profile, cannot accept human-opened tabs, and cannot select another profile #16701
I searched existing issues and did not find a duplicate.
I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
Create a custom browser profile and set it as the global default.
Ask the agent to create a new browser tab:
{"reuseExistingTab":false}
Pass this to preview_open.
Observe that the tab uses the built-in Default profile rather than the configured custom profile.
Manually open a tab in the custom profile within the same thread.
Ask the agent to use that tab through its tabId.
Observe that control is refused.
Inspect the exposed browser tool parameters. There is no documented parameter for selecting a browser profile.
Expected behavior
The agent should be able to use the browser profile the user chooses:
New agent-created tabs should honor the configured global default.
The user should be able to hand a manually opened tab to the agent. Previously, I could manually open a custom-profile tab and let the agent control it.
The agent should have a supported way to open a selected profile.
Actual behavior
Three failures prevent the agent from using a chosen profile:
Custom profile as global default is ignored. New agent-created tabs still use the built-in Default profile.
Human-to-agent handoff no longer works. The agent can see manually opened custom-profile tabs, but cannot control them. There is no supported handoff workflow available. This breaks a workflow that previously worked.
The agent cannot select another profile. preview_open exposes no documented profile-selection parameter, leaving agent-created tabs limited to the built-in Default profile.
Impact
Major degradation or frequent failure.
The agent cannot use the requested browser profile through the global default, direct selection, or a manually opened tab.
Version or commit
T3 Code Nightly 0.0.46-nightly.20261006.2752.
Verified against both the installed desktop app and running server.
Previous working version: unknown.
Environment
macOS 26.6.2, build 25G83, arm64.
T3 Code Desktop.
Logs or stack traces
preview_open({"tabId":"CUSTOM_TAB"})
→ "This browser tab belongs to another agent session or a human. Open your own tab."
preview_snapshot({"tabId":"CUSTOM_TAB","includeImage":false})
→ PreviewAutomationControlInterruptedError
t3_preview_list shows:
Manually opened custom-profile tabs: profileId present, runtime:"server", no automationOwner field.
Agent-created tabs: runtime:"server", automationOwner present, no profileId field.
Workaround
No verified workaround for letting the agent use the requested profile.
Related work
#15328 introduced the new browser implementation. #9704 proposed explicit profile selection but was closed unmerged. #13254 and #13262 concern per-project default profiles.
Prepared with gpt-6.1-sol through the Codex harness in T3 Code.
Verified on main (365aa8798) against the three claims. Claim 1 is a clear actionable bug on Desktop; claims 2–3 match intentional ownership / product gaps (not regressions in existing API behavior).
1. Global default profile ignored by agent-created tabs — confirmed bug
Human opens go through openPreviewSession, which always stamps profileId: input.profileId ?? browserDefaultOpenProfileId(defaults) from Settings → Integrations → Browser (openPreviewSession.ts, browserDefaults.ts).
Agent preview_open does not use that path. It calls manager.open with only threadId, optional url, runtime: "server", reveal: false, and automationOwner — no profileId (ServerBrowser.ts). The snapshot therefore omits profileId (matches your t3_preview_list note).
On Desktop, the webview is born from that snapshot: profileId={snapshot.profileId} (ElectronBrowserHost.tsx). undefined / "default" both resolve to the built-in Default partition, not browserDefaultProfileId (resolvePartitionScope). So a custom global default is honored for human-opened tabs and ignored for agent-opened ones.
Headless footnote: if no desktop attaches, agent tabs also force an isolated ephemeral Playwright context whenever automationOwner is set (profileId ?? "default" is only the cache key; storage is still blank) (ServerBrowser.ts, ServerBrowserContexts.ts, L105-L109). Your Desktop repro is the partition-default mismatch above.
Likely fix direction: when creating an agent tab (or when the desktop mounts a server tab with missing profileId), apply the same resolved default as browserDefaultOpenProfileId so agent-created Desktop tabs land in the configured profile partition. Server cannot read client settings today, so this is either a client-side fallback on attach or plumbing the default into the open path.
2. Human → agent handoff refused — intentional ownership, not a code bug
requireTab / SessionControl.agent require tab.control.agentId === request.agentSessionId (ServerBrowser.ts, SessionControl.ts). Human-opened tabs have no automationOwner, so agentId is null → the exact "belongs to another agent session or a human" / PreviewAutomationControlInterruptedError you hit (previewAutomation.ts).
The tool text documents this: "Server tabs use isolated storage and cannot be operated by a different agent session." (preview/tools.ts). Restoring handoff (or a transfer API) is a product decision, overlapping #16532.
3. No profileId on preview_open — confirmed API gap (feature)
PreviewAutomationOpenInput only has url / open / show / reuseExistingTab (+ tab target fields) — no profile field (previewAutomation.ts). Human PreviewOpenInput already has optional profileId with “omit → client default” (preview.ts). Explicit agent selection was attempted in closed unmerged #9704 (closed for missing verification, not as wontfix). Per-project defaults remain open in #13254 / #13262 — related but not the same as “honor global default on agent open.”
Related (not duplicates)
#15328 — server browser / ownership model this sits on.
#9704 — closed unmerged profile selection for agents.
No open/merged PR found that wires browserDefaultProfileId into the agent preview_open path.
Next step
Treat claim 1 as the bug to fix (agent/Desktop opens should honor the configured global default profile the way human openPreviewSession already does). Keep claims 2–3 as separate product work (handoff / explicit profileId on preview_open), not blockers for landing the default-profile fix.
Thanks for the precise nightly build, t3_preview_list field differences, and the three-way breakdown — that made the split straightforward.
Same here on 0.0.46-nightly.20261008.2813 (macOS, desktop app + local server).
This completely breaks my personal agent workflow. I log into my accounts in the T3 browser, then the agent browses those logged-in sessions for me. Since the server browser landed, it can't anymore:
I log into developers.facebook.com in a tab I opened (runtime: "server", profileId: "default", control unclaimed).
The agent calls preview_navigate / preview_open with that tabId and gets "This browser tab belongs to another agent session or a human. Open your own tab."
The agent opens its own tab instead: no profileId, HeadlessChrome UA, no cookies, so it lands on the Meta login page.
Looks like a regression from #15328. Before it, agent tabs opened with browserDefaultOpenProfileId(defaults) (PreviewAutomationHosts.tsx), so they shared the user's partition. Now:
SessionControl.agentId is readonly and set once from automationOwner (SessionControl.ts#L16), so a human tab (agentId === null) can never be driven by an agent, even when unclaimed (ServerBrowser.ts#L1443).
Activity
juliusmarminge commentedon Oct 7, 2026
Note
Grok responding on behalf of Julius.
Verified on
main(365aa8798) against the three claims. Claim 1 is a clear actionable bug on Desktop; claims 2–3 match intentional ownership / product gaps (not regressions in existing API behavior).1. Global default profile ignored by agent-created tabs — confirmed bug
Human opens go through
openPreviewSession, which always stampsprofileId: input.profileId ?? browserDefaultOpenProfileId(defaults)from Settings → Integrations → Browser (openPreviewSession.ts, browserDefaults.ts).Agent
preview_opendoes not use that path. It callsmanager.openwith onlythreadId, optionalurl,runtime: "server",reveal: false, andautomationOwner— noprofileId(ServerBrowser.ts). The snapshot therefore omitsprofileId(matches yourt3_preview_listnote).On Desktop, the webview is born from that snapshot:
profileId={snapshot.profileId}(ElectronBrowserHost.tsx).undefined/"default"both resolve to the built-in Default partition, notbrowserDefaultProfileId(resolvePartitionScope). So a custom global default is honored for human-opened tabs and ignored for agent-opened ones.Headless footnote: if no desktop attaches, agent tabs also force an isolated ephemeral Playwright context whenever
automationOwneris set (profileId ?? "default"is only the cache key; storage is still blank) (ServerBrowser.ts, ServerBrowserContexts.ts, L105-L109). Your Desktop repro is the partition-default mismatch above.Likely fix direction: when creating an agent tab (or when the desktop mounts a server tab with missing
profileId), apply the same resolved default asbrowserDefaultOpenProfileIdso agent-created Desktop tabs land in the configured profile partition. Server cannot read client settings today, so this is either a client-side fallback on attach or plumbing the default into the open path.2. Human → agent handoff refused — intentional ownership, not a code bug
requireTab/SessionControl.agentrequiretab.control.agentId === request.agentSessionId(ServerBrowser.ts, SessionControl.ts). Human-opened tabs have noautomationOwner, soagentIdisnull→ the exact"belongs to another agent session or a human"/PreviewAutomationControlInterruptedErroryou hit (previewAutomation.ts).The tool text documents this: "Server tabs use isolated storage and cannot be operated by a different agent session." (preview/tools.ts). Restoring handoff (or a transfer API) is a product decision, overlapping #16532.
3. No
profileIdonpreview_open— confirmed API gap (feature)PreviewAutomationOpenInputonly hasurl/open/show/reuseExistingTab(+ tab target fields) — no profile field (previewAutomation.ts). HumanPreviewOpenInputalready has optionalprofileIdwith “omit → client default” (preview.ts). Explicit agent selection was attempted in closed unmerged #9704 (closed for missing verification, not as wontfix). Per-project defaults remain open in #13254 / #13262 — related but not the same as “honor global default on agent open.”Related (not duplicates)
browserDefaultProfileIdinto the agentpreview_openpath.Next step
Treat claim 1 as the bug to fix (agent/Desktop opens should honor the configured global default profile the way human
openPreviewSessionalready does). Keep claims 2–3 as separate product work (handoff / explicitprofileIdonpreview_open), not blockers for landing the default-profile fix.Thanks for the precise nightly build,
t3_preview_listfield differences, and the three-way breakdown — that made the split straightforward.baptisteArno commentedon Oct 8, 2026
Same here on
0.0.46-nightly.20261008.2813(macOS, desktop app + local server).This completely breaks my personal agent workflow. I log into my accounts in the T3 browser, then the agent browses those logged-in sessions for me. Since the server browser landed, it can't anymore:
runtime: "server",profileId: "default", controlunclaimed).preview_navigate/preview_openwith thattabIdand gets "This browser tab belongs to another agent session or a human. Open your own tab."profileId,HeadlessChromeUA, no cookies, so it lands on the Meta login page.Looks like a regression from #15328. Before it, agent tabs opened with
browserDefaultOpenProfileId(defaults)(PreviewAutomationHosts.tsx), so they shared the user's partition. Now:SessionControl.agentIdis readonly and set once fromautomationOwner(SessionControl.ts#L16), so a human tab (agentId === null) can never be driven by an agent, even when unclaimed (ServerBrowser.ts#L1443).openpath never passes aprofileId(ServerBrowser.ts#L1510-L1516) and any tab with anautomationOwnergets a fresh isolated context (ServerBrowser.ts#L709-L713).Isolation by default makes sense, but I need an opt-in. Either of these would fix it for me:
agentIdwhen it's null. The agent gets the exact tab and cookies.Happy to help test a fix.