Skip to content

[Bug]: Agents ignore the default browser profile, cannot accept human-opened tabs, and cannot select another profile #16701

Description

@bryant8317

Before submitting

  • 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

  1. Create a custom browser profile and set it as the global default.

  2. Ask the agent to create a new browser tab:

    {"reuseExistingTab":false}

    Pass this to preview_open.

  3. Observe that the tab uses the built-in Default profile rather than the configured custom profile.

  4. Manually open a tab in the custom profile within the same thread.

  5. Ask the agent to use that tab through its tabId.

  6. Observe that control is refused.

  7. 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:

  1. Custom profile as global default is ignored. New agent-created tabs still use the built-in Default profile.
  2. 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.
  3. 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.

Activity

  1. juliusmarminge commented on Oct 7, 2026

    @juliusmarminge
    Member

    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 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.
    • #13254 / #13262 — per-project defaults.
    • #16532 — broader “use signed-in tabs” CUA ask.
    • 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.

  2. added
    bugSomething is broken or behaving incorrectly.
    via-triageFiled through npx t3 triage
    on Oct 7, 2026
  3. baptisteArno commented on Oct 8, 2026

    @baptisteArno
    Contributor

    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:

    Isolation by default makes sense, but I need an opt-in. Either of these would fix it for me:

    1. A "Lend to agent" action on a human tab, which assigns agentId when it's null. The agent gets the exact tab and cookies.
    2. A setting so agent tabs open in the default profile (or a chosen one), like before feat(preview): run the browser on the environment server #15328.

    Happy to help test a fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions