# `T3.Devices`
[🔗](https://github.com/dl-alexandre/t3-elixir/blob/main/lib/t3/devices.ex#L1)

Devices MCP operations. Pass T3's original string-keyed argument maps.

Tool availability depends on the authenticated server, permission mode and
invocation context. In-app agent tools may not be available to outside clients.
See `T3.Catalog.tools(:devices)` for descriptions and context requirements.

# `close`

```elixir
@spec close(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Remove a device from this thread's Device panel. `shutdown=true` also turns it off.

Requires a compatible T3 agent/thread context and runtime; not generally exposed to outside OAuth clients.

# `list`

```elixir
@spec list(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

List iOS Simulators and Android Emulators on every device host, what each host can run, and what is open in this thread's Device panel. Call before `device_open` when you do not know a device id.

Requires a compatible T3 agent/thread context and runtime; not generally exposed to outside OAuth clients.

# `open`

```elixir
@spec open(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Open a simulator or emulator for this thread. Pass `deviceId` and `hostId` from `device_list`. Boots it if needed and shows it in the user's Device panel. Returns the `agent-device` CLI call pinned to that device. Drive the device with that CLI.

Requires a compatible T3 agent/thread context and runtime; not generally exposed to outside OAuth clients.

# `screenshot`

```elixir
@spec screenshot(T3.Client.t(), map()) :: {:ok, map()} | {:error, T3.Error.t()}
```

Get a PNG of an open device's screen. For taps and text, use the `agent-device` CLI.

Requires a compatible T3 agent/thread context and runtime; not generally exposed to outside OAuth clients.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
