Skip to content

feat(panel): support T3 Code with a browser panel placement - #89

Merged
hannojg merged 5 commits into
callstackincubator:mainfrom
thiagobrez:feat/t3-code
Nov 6, 2026
Merged

hannojg merged 5 commits into
callstackincubator:mainfrom
thiagobrez:feat/t3-code

Conversation

@thiagobrez

@thiagobrez thiagobrez commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Why

T3 Code runs Claude Code and Codex and renders MCP Apps in the chat. Claude threads already open Mobile Dev's browser page in T3 Code's Browser, though Logs and Performance needed the foreground fix below. Codex threads did not work. T3 Code asks the user to confirm every app tool call that is not read-only, so the inline panel prompts on each device-list poll and on each tap. The panel raised 57 prompts in about a minute before any input. T3 Code's Codex advertises the same MCP Apps support as Codex desktop, so the server cannot tell the two hosts apart.

What changed

  • MOBILE_DEV_PANEL=browser gives the Codex and shared servers the browser panel that Claude's server uses. Codex's .mcp.json forwards the variable, and T3 Code users set it on their Codex provider. Defaults stay the same. An unknown value logs a warning.
  • The browser link's instructions and the skills tell agents to open the page with the host's own preview tool, to keep the tab open, and to drive devices with Mobile Dev's own device_* tools.
  • Two fixes that the T3 Code pass found. Claude's server ran Baguette from beside the server instead of from the downloaded panel runtime, so Logs could not follow the foreground app and Performance found no app. Cards also offered Open in Mobile Dev where mobile_open_performance_recording is not registered.

Scope

  • The README, CONTRIBUTING, website, architecture, and telemetry docs now cover T3 Code, including turning off T3 Code's own device integration, whose device_* tools share names with Mobile Dev's. The website's install picker lists T3 Code.
  • This PR leaves out T3 Code's own confirm policy, a T3 profile in the host regression tests, and a telemetry attribute for the placement.

Tradeoffs

  • Marking the panel's tools read-only would silence T3 Code's prompts, but taps and stream sessions change the device, so the annotations stay honest.
  • Detecting T3 Code by name breaks the repository's capability rule, and its capabilities match Codex desktop.

Blast Radius

With the variable unset, each server registers the same tools as main. Claude's cards lose an Open in Mobile Dev action that never worked there, and Claude's server now finds the foreground app through its downloaded Baguette.

Verification

  • T3 Code desktop dev build at pingdotgg/t3code 337c5858c3, iOS 27 simulator. Claude Haiku 5.5 and Codex GPT-6-Astra threads opened the panel with preview_open, docked it, and drove the test app. Claude recorded CPU and memory into an inline card. A feature pass covered input, the device picker, app tools, device settings, logs, storage, App Flow, TraceSift detection, panel context, and an Android H.264 stream.
  • Codex desktop 26.1016.61520 with this branch installed and no MOBILE_DEV_PANEL: the panel opens in the sidebar as before, taps reach the app, Performance and Logs follow the foreground app, and a recording card's Open in Mobile Dev opens the recording in the workspace.
  • npm test (1238 pass, 1 opt-in skip), npm run test:package (now also checks the browser placement), npm run test:claude, and npm run check:mcp-budget (108 tools, unchanged).
  • Open from the T3 Code pass: a test push failed because the test app does not request notifications, Android taps registered as long presses on a heavily loaded Mac, an Android boot error rendered as a 1 px notice, and Fix in chat is disabled in browser panels because the page has no chat message bridge. Two providers cannot drive one simulator at the same time, because each agent-device session keeps its lease, and an agent cannot record while the panel's own Performance monitor runs. TraceSift was only checked up to its missing tracesift init. The pass ran with T3 Code's own Device panel turned off.

Media

Codex thread in T3 Code, before and after MOBILE_DEV_PANEL=browser:

Before: inline panel, T3 Code asks to confirm each call After: browser panel beside the chat
Before: T3 Code asks to confirm mobile_list_simulators After: Codex thread with Mobile Dev docked beside the chat

Codex desktop with this branch, default placement:

Panel in the sidebar Open in Mobile Dev from a recording card
Codex desktop with Mobile Dev in the sidebar Codex desktop with the recording opened in the workspace

Website install picker with T3 Code:

Install Mobile Dev dialog listing ChatGPT / Codex, Claude, Cursor, and T3 Code

Claude thread in T3 Code with the docked panel and a CPU and memory recording card:

Claude thread with Mobile Dev docked and a recording card in the chat

The test driver drove T3 Code over CDP, and each connection briefly forced light mode, so the videos leave those frames out.

Before: Codex inline panel, where the prompt returns after every Confirm:

before-codex-inline-prompts.mp4

After: Codex opens the browser panel with preview_open, then it is docked (2× speed):

after-codex-browser-panel.mp4

Claude thread: open, dock, tap in the app, and Logs:

claude-open-tap-logs.mp4

Claude thread: CPU and memory recording into an inline card (2× speed):

claude-panel-and-recording.mp4

🤖 Generated with Claude Code

thiagobrez and others added 4 commits November 5, 2026 12:08
Cards marked themselves data-workspace whenever the server had a panel,
but only an inline panel registers mobile_open_performance_recording. A
browser panel, as Claude's server uses, gave cards an Open in Mobile Dev
action that asked the agent to call a tool that does not exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…'s Baguette

foregroundSimulatorPid ran Baguette from beside the server, but Claude's
package downloads Baguette into the panel runtime instead. Its check
failed, and the error blamed the selected Xcode, so Logs could not follow
the foreground app and Performance found no app in Claude Code and Claude
Desktop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
T3 Code renders MCP Apps in the chat but asks the user to confirm every
app tool call that is not read-only, so the inline panel prompts on each
frame poll and tap. Its Codex advertises the same MCP Apps support as
Codex desktop, so the server cannot tell the hosts apart.

MOBILE_DEV_PANEL=browser gives the Codex and shared servers the same panel
as Claude's server. The opening tools carry no ui.resourceUri and return a
loopback browser page instead. Codex's manifest forwards the variable.
Defaults are unchanged, an unknown value logs a warning, and the package
smoke checks both placements.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agents in T3 Code left the panel's link in the chat or tried a
computer-use tool. Tell them to open the page with the host's own browser
or preview tool, to keep the tab open, to treat a floating preview as
shown, and to drive Mobile Dev's devices with its own device_* tools. The
Claude skill names T3 Code's preview_open and its separate Device panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 5, 2026

Copy link
Copy Markdown

@thiagobrez is attempting to deploy a commit to the Margelo Team on Vercel.

A member of the Team first needs to authorize it.

T3 Code runs the Claude Code and Codex plugins. Claude threads work as
they are. Codex threads need MOBILE_DEV_PANEL=browser on T3 Code's Codex
instance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
mobile-dev Ready Ready Preview Nov 5, 2026 4:07pm UTC

Request Review

@hannojg
hannojg self-requested a review November 5, 2026 16:07
@hannojg
hannojg merged commit a65e05e into callstackincubator:main Nov 6, 2026
10 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants