From cb97415948cc2c0662a5504ccfe7e97981825ed5 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 26 Sep 2026 20:15:22 -0700 Subject: [PATCH 1/2] fix(server): let agents use simctl and adb alongside device tools (#13908) --- apps/server/src/mcp/toolkits/device/handlers.ts | 2 +- apps/server/src/provider/CodexDeveloperInstructions.ts | 2 +- docs/internals/devices.md | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/server/src/mcp/toolkits/device/handlers.ts b/apps/server/src/mcp/toolkits/device/handlers.ts index d2c23860c9b7..b6a8ed3d6323 100644 --- a/apps/server/src/mcp/toolkits/device/handlers.ts +++ b/apps/server/src/mcp/toolkits/device/handlers.ts @@ -59,7 +59,7 @@ export function agentDeviceQuickStart( ` ${executable} screenshot /tmp/shot.png ${target} # or call device_screenshot`, ` ${executable} install ${target}`, `Prefer snapshot refs over coordinates. Run ${executable} help for workflow guides and ${executable} --help for flags.`, - "Do not call simctl, adb, xcrun, or serve-sim directly while these tools are attached; use agent-device.", + "Prefer agent-device for driving this device. simctl, adb, and xcrun remain available for anything it does not cover.", "For remote hosts, arrange builds, app installation, and any Metro reverse forwarding yourself. T3 provides discovery, streaming, and control only.", "Keep the returned --config and --session flags on every command. Other hosts can be used concurrently; opening one does not switch these commands.", platformNotes, diff --git a/apps/server/src/provider/CodexDeveloperInstructions.ts b/apps/server/src/provider/CodexDeveloperInstructions.ts index 2ed593d159bc..e134ebfc68cb 100644 --- a/apps/server/src/provider/CodexDeveloperInstructions.ts +++ b/apps/server/src/provider/CodexDeveloperInstructions.ts @@ -12,7 +12,7 @@ Do not switch to global browser skills, Chrome, Node REPL browser automation, st const T3_CODE_DEVICE_TOOL_INSTRUCTIONS = `## T3 Code devices -The \`t3-code\` MCP server also exposes \`device_*\` tools for iOS Simulators and Android Emulators on this environment. For mobile verification, call \`device_list\`, then \`device_open\` so the user can watch the device in their Device panel; its result explains how to drive the device. Driving happens through the \`agent-device\` CLI, which is on PATH. Keep the host config and session flags returned by \`device_open\` on every command so concurrent devices stay independent: prefer \`agent-device snapshot -i\` refs over coordinates, and use \`device_screenshot\` when you need to see the screen. Do not call simctl, adb, xcrun, or serve-sim directly while these tools are present. If \`device_list\` reports a platform as unavailable, say so instead of trying another route.`; +The \`t3-code\` MCP server also exposes \`device_*\` tools for iOS Simulators and Android Emulators on this environment. For mobile verification, call \`device_list\`, then \`device_open\` so the user can watch the device in their Device panel; its result explains how to drive the device. Driving happens through the \`agent-device\` CLI, which is on PATH. Keep the host config and session flags returned by \`device_open\` on every command so concurrent devices stay independent: prefer \`agent-device snapshot -i\` refs over coordinates, and use \`device_screenshot\` when you need to see the screen. Prefer these tools and \`agent-device\` for opening and driving devices. Platform tools such as \`xcrun simctl\` and \`adb\` remain available for anything they do not cover, such as builds, logs, or port forwarding. If \`device_list\` reports a platform as unavailable, say so.`; export interface T3CodeToolAvailability { readonly browser: boolean; diff --git a/docs/internals/devices.md b/docs/internals/devices.md index 9b34851439ca..0d37f4c379f9 100644 --- a/docs/internals/devices.md +++ b/docs/internals/devices.md @@ -69,7 +69,8 @@ already-running agent without the CLI. How to drive a device is returned from `device_open`, not kept in an always-loaded prompt or skill: it costs nothing in threads that never open a device and cannot drift from the pinned CLI version. The always-on prompt block -is a few lines that point at the tools and forbid raw `simctl` and `adb`. +is a few lines that point at the tools and prefer them over raw `simctl` and +`adb`, which stay available for what the tools do not cover. ## The viewer decodes both vendored protocols From ab099178a7b7f9728843e90fc95ed90bb61d710d Mon Sep 17 00:00:00 2001 From: Bear Huddleston Date: Sat, 26 Sep 2026 22:29:54 -0500 Subject: [PATCH 2/2] fix(web): environment status tooltip resizes when the status changes (#13845) --- .../settings/ConnectionsSettings.tsx | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/web/src/components/settings/ConnectionsSettings.tsx b/apps/web/src/components/settings/ConnectionsSettings.tsx index c00af9f88164..cf37a4167c4d 100644 --- a/apps/web/src/components/settings/ConnectionsSettings.tsx +++ b/apps/web/src/components/settings/ConnectionsSettings.tsx @@ -1549,6 +1549,18 @@ function SavedBackendListRow({ versionMismatch !== null && (serverUpdateState.status === "idle" || serverUpdateState.status === "failed"); + const statusTooltip = `${ + unsupported + ? (environment.connection.error ?? connectionStatusText(environment.connection)) + : enabled + ? connectionStatusText(environment.connection) + : "Switched off" + }${ + versionMismatch + ? `\nUpdate available: ${versionMismatch.serverVersion} → ${versionMismatch.clientVersion}` + : "" + }`; + return ( + {/* The status can change while the tooltip is open, and base-ui only + re-measures the popup when the trigger's payload changes. */} - {unsupported - ? (environment.connection.error ?? connectionStatusText(environment.connection)) - : enabled - ? connectionStatusText(environment.connection) - : "Switched off"} - {versionMismatch - ? `\nUpdate available: ${versionMismatch.serverVersion} → ${versionMismatch.clientVersion}` - : ""} + {statusTooltip} }