Skip to content
Source
Sign inSign up

devices.md

169 lines10.0 KB

1# Devices
2​
3The Device panel shows a live iOS Simulator or Android Emulator next to a
4thread, so you can watch an agent verify mobile work and tap the device
5yourself. Agents get the same device through `device_*` tools and the
6`agent-device` command line, which T3 Code sets up for them.
7​
8## Open a device
9​
10Open the right panel in a project thread and choose **Device**. On first use,
11the panel walks through three steps: starting the device hub, checking iOS and
12Android support, and choosing whether agents may control devices. Opening the
13panel alone does not download or start anything. If the hub is already
14installed, the setup screen says so and reuses it.
15​
16Choose a running device to watch it, or choose **Start** next to a stopped
17device to boot it. The panel shows when you or an agent starts a device.
18Each device opens in its own tab. Use **+ → Device** to open another, and
19double-click a tab name or choose **Rename** from its context menu to rename it.
20Only the visible tab streams video; switching tabs keeps both devices running.
21Choose **Float device over chat** in the toolbar to keep watching and tapping the
22device in a small window while the right panel shows something else; drag the
23window by its handle, resize it from any edge, and use **Open in right panel**
24to bring it back.
25Turn off **Use devices** in **Settings → Devices** to stop the
26helper processes; simulators and emulators keep running until you power them
27off.
28​
29Simulators run on the machine that hosts the environment server. iOS needs
30macOS with Xcode. Android needs the SDK Platform-Tools, Android Emulator,
31and Command-line Tools (latest), plus a virtual device created in Android
32Studio's Device Manager. T3 Code detects standard SDK locations; set
33`ANDROID_HOME` for a custom location. The panel explains missing dependencies.
34After installing SDK tools, restart the environment server and refresh devices.
35​
36Android emulator video also needs `ffmpeg` with the libx264 encoder on the device
37host's PATH, or an executable selected by `SERVE_EMU_FFMPEG` on that host. If
38opening an emulator reports an ffmpeg problem, install or fix the executable
39and retry opening it. After changing PATH or `SERVE_EMU_FFMPEG`, restart the
40environment server for local devices, or turn device support off and on for SSH
41devices, so the running tools inherit the new environment. Physical Android
42devices and iOS do not need ffmpeg.
43​
44The screen is interactive: click and drag to touch, type while the screen is
45focused, and use the toolbar for Home, Back, and Recents on Android, rotate on
46iOS, and power off. Close the tab to stop watching; the device keeps running
47unless you power it off. Closed tabs stay closed after a reload. To watch the
48device again, choose it from **+ → Device**.
49​
50Choose **3D view** to inspect supported devices while the live screen stays
51interactive. On iPhone Duo, use the fold and stance controls to change its
52physical pose, or pinch over the device to adjust the hinge. Turning the model
53to the other screen switches the live display and touch input to that screen.
54**Restore 3D view** returns the device to a screen-facing position.
55On supported Android foldables, use **Fold device** and **Unfold device** beside
56the screen to change its posture in either view.
57​
58## Tools
59​
60The toolbar's **Tools** button opens a drawer for the open device. It shows the
61foreground app, and lets you switch light and dark mode, change text size,
62flip accessibility settings, overlay the accessibility element frames on the
63screen, set a fake location, and grant or revoke app permissions. iOS also
64exposes Liquid Glass, color filters, VoiceOver, and sending a test push
65notification; Android adds orientation and toggling the network. The drawer
66only shows what the platform can do, and every control reflects the value read
67back from the device after a change.
68​
69## Agents and devices
70​
71When an agent opens a device, it floats over the chat in web and desktop clients
72connected to the thread, the same way an agent-driven browser does. Turn off
73**Auto-show floating preview** in **Settings → Browser** to open a
74right-panel tab instead. In the mobile app, open the agent's thread and tap the
75device button above the composer to watch the live screen and control it.
76On iOS layouts with an inspector, the device opens beside the thread. Maximize
77it to fill the screen; closing the full-screen view returns to the inspector.
78If the thread has several devices open, choose one in the viewer. Closing the
79viewer stops streaming and leaves the device available to the agent. Device
80activity also appears in the thread timeline.
81​
82Agents drive the device through the `agent-device` command line. T3
83Code installs and starts it only after **Agents can use devices** is on. iOS
84taps build a small test runner on first use, which takes a couple of minutes
85once per server. Restart an existing agent session after granting access so it
86receives the device CLI environment.
87​
88To keep agents away from simulators, turn off **Agents can use devices** in
89**Settings → Devices**. This hides the device tools from agents
90started from then on; your own Device panel is unaffected.
91​
92## Remote connections
93​
94The device stream goes through the environment server, so it works over the
95local network, Tailscale, and T3 Connect. Live video needs a secure page
96(HTTPS or localhost); on a plain-HTTP remote origin iOS falls back to a slower
97still-image stream and Android cannot show video, except on EAS Simulator.
98​
99## SSH device hosts
100​
101In Settings → Devices, choose the environments that should use
102the host and choose **Add source → Machine over SSH**. Enter an SSH alias or `user@host`, with
103an optional identity file and port. These resolve on the environment server,
104so use the SSH configuration and keys available there. Password prompts are
105not supported.
106​
107**Test connection**, in the host's menu, checks SSH, Node, npm, and platform tools without installing
108anything, with a result for each selected environment. Targets that resolve to
109the environment’s own machine are skipped, since its devices are already local.
110The first device listing installs pinned device tools on the host.
111SSH device hosts currently need macOS or Linux. To use devices on a Windows
112machine, run T3 Code on that machine and connect to its environment.
113Node 22.12 or newer and npm must be available to non-interactive SSH commands.
114T3 checks common Homebrew and Android SDK locations; custom installations need
115the appropriate PATH and ANDROID_HOME on the host. Android emulator video needs
116`ffmpeg` with libx264 on that host; physical Android devices use scrcpy and do
117not need ffmpeg.
118​
119The picker identifies devices by host when several hosts are configured.
120Connections recover after interruptions. Removing a host closes its device
121sessions and stops its T3 helpers when reachable; simulators keep running.
122​
123T3 provides discovery, streaming, and control. Arrange app builds,
124installation, and connectivity to development servers such as Metro separately.
125A simulator on another machine cannot reach Metro through your environment's
126localhost without forwarding or another reachable address.
127​
128## Simlock hosts (alpha)
129​
130[Simlock](https://incubator.callstack.com/simlock/) pools iOS simulators and
131Android emulators across machines. If you run a Simlock gateway, T3 can lease
132devices from it. Simlock is new and unreleased, so this integration is an
133alpha: it may change or stop working with a newer Simlock. T3 does not install
134or manage Simlock; set up the gateway and its workers yourself. It needs a
135gateway and workers built from Simlock's `main` at
136[6316e10](https://github.com/callstackincubator/simlock/commit/6316e10) or
137later, the first with a lease holder's screen and input.
138​
139Turn on **Settings → Labs → Simlock device hosts (alpha)** and **Use devices**
140in Settings → Devices, then choose **Add source → Simlock pool** with an **agent token**
141(`simlock --gateway token create --role agent`). Give each T3 server its own
142token: Simlock counts every lease made with one token against the same
143requester, and allows one at a time unless the gateway's
144`lease.maxPerRequester` is raised to the host's **Devices at once**. The token
145leases devices and reaches only its own leases, but commands on a leased device
146run on its worker, so treat it like shell access to your workers. T3 sends it
147with every request, so use an HTTPS gateway URL, or plain HTTP only over an
148encrypted network such as Tailscale. The gateway
149and workers need `capabilities.stream.enabled` and `capabilities.input.enabled`
150for the live screen and for input.
151​
152The picker lists the models your workers can make. Opening one takes a lease;
153closing it with **Return device to the pool**, or removing the host, returns it
154wiped. The panel keeps a watched device leased up to the host's lease limit.
155You can tap, swipe, type, and press Home, and Back and Recents on Android.
156Rotation, appearance, text size, device tools, and screenshots are not offered
157for Simlock devices; agents can still do them through `device_open`. On iOS 27
158simulators, typing on your keyboard does nothing; tap the on-screen keyboard
159instead. Workers must run the same agent-device
160version as T3 (see Device tool updates), and agent-device accepts app installs
161for a lease only from the folder it was opened from, which `device_open`
162names. A device cannot reach development servers on your machine through
163localhost; use an address its worker can reach.
164​
165## Device tool updates
166​
167The connected T3 server manages the device hub and agent tools on its own machine and configured SSH hosts. Required versions install automatically the next time those tools are used. In Settings → Devices, select a version and choose **Check versions** to read installed versions without installing tools or starting devices.
168​
169To receive newer tool versions on a remote environment, update that environment's T3 server. Updating only the browser or mobile app does not update the remote server. An offline host keeps its installed files, but an update needs network access before device support can start; T3 does not fall back to an older version. Reconnect the host and use Retry if installation fails. Existing device and agent-access settings are preserved.