Skip to Content
Tripod Devices

Agents

Connect Claude Code, Codex or Cursor over MCP, install the skills, and understand tools, grants and leases.

Agents are a supporting way to use Tripod Devices, not the only one. The app holds the devices and an agent borrows them over a local socket. The MCP server (mcp) speaks MCP over stdio, and the tripod-devices CLI exposes the same tools to a shell.

Install

Both programs live inside the app bundle, in Contents/MacOS. The installer links the CLI, registers the MCP server and copies the skills.

tripod-devices install --dry-run   # print what would change, write nothing
tripod-devices install             # this project only
tripod-devices install --global    # every project
tripod-devices install --cursor    # also Cursor: MCP entry and one rule per skill

If tripod-devices is not on your PATH yet, run it from the bundle the first time:

"/Applications/Tripod Devices.app/Contents/MacOS/tripod-devices" install --global

It does four things:

  • Links tripod-devices into ~/.local/bin. It leaves a real file at that path alone and says so.
  • Registers mcp as tripod with Claude Code when claude is installed. The project scope uses claude mcp add-json -s local, and --global uses -s user.
  • Registers mcp as tripod in .codex/config.toml for Codex, under [mcp_servers.tripod].
  • Copies the skills.

An older entry named tripod-devices that points at the old executable is replaced, not duplicated.

Register by hand

# Claude Code
claude mcp add-json -s user tripod '{"type":"stdio","command":"/Applications/Tripod Devices.app/Contents/MacOS/mcp"}'
# Codex: ~/.codex/config.toml
[mcp_servers.tripod]
command = "/Applications/Tripod Devices.app/Contents/MacOS/mcp"

You do not have to keep the window open. If the app is not running, the MCP server starts it with no window and waits for its socket.

Skills

Five skills teach an agent how to use the tools well. Each is a short SKILL.md with reference files read on demand.

SkillUse it for
tripod-devicesThe core loop: get a device, act, read the screen, verify, give it back. Tools, error meanings and the CLI.
tripod-lean-pairiOS and Android side by side in Lean: start both, act on both, compare, measure memory, stop and restore.
tripod-debugInspect the screen, read logs and crashes, measure memory and CPU, and reproduce under dark mode, large text or a slow network.
tripod-build-runBuild an Xcode, Gradle, React Native, Expo or Flutter project, install it, launch it and check the first screen.
tripod-mobile-webTest a site in Safari on a simulator and Chrome on an Android device. See Mobile web.

The installer copies them to .claude/skills for Claude Code and to .agents/skills for Codex, Cursor, Gemini CLI and others that read the shared layout. With --global, those folders are under your home directory. With --cursor, it also writes one agent-requestable rule per skill in .cursor/rules.

Running the installer again is safe. A skill folder you edited is copied to ~/Library/Application Support/Tripod/skill-backups first, and the installer prints the path.

Tools

Every tool is a device_* call and works the same on all five kinds of device. Where a device cannot do something, the call answers unsupported. Run tripod-devices tools for the full list.

AreaTools
Find and hold a devicedevice_list, device_capabilities, device_open, device_close, device_lease, device_release, device_boot, device_shutdown
Read the screendevice_snapshot, device_screenshot, device_find, device_wait, device_logs
Actdevice_tap, device_type, device_swipe, device_scroll, device_long_press, device_pinch, device_press, device_open_url
Appsdevice_apps, device_install, device_launch, device_terminate, device_uninstall, device_foreground, device_push_file, device_pull_file
Conditionsdevice_appearance, device_location, device_orientation, device_permission, device_clipboard_get, device_clipboard_set
Performancedevice_performance
Pairdevice_pair_start, device_pair_call, device_pair_stop
Recorddevice_record_start, device_record_stop

Set TRIPOD_DEVICES_TOOLS=core before starting the server to list a short core set, for agents with small tool budgets. Every tool stays callable by name in either mode.

Act with settle: true. It waits until the UI tree stops changing and answers with what appeared, went and changed, so the agent usually does not need another snapshot. Prefer selector.id, then selector.text with selector.role, then a ref, and coordinates last. A ref is valid only for the latest tree returned.

Grants

Agents get a grant for each device. Allow is never the default button.

  • Real phones always ask you in the window, for that phone. Reading its screen counts, because its screen is personal. The prompt names the client asking.
  • Simulators and emulators hold nothing personal, so one setting, Let Agents Use All Simulators and Emulators, allows every agent. Leave it off and each one asks.
  • Your input comes first. If you touch the device while an agent gesture is running, your input wins. A simulator whose input another tool has taken over refuses agent input with a reason.
  • Take Control Back in the Agents card, or Option-Command-period, ends an agent's grant on the selected device.

Leases

A lease belongs to the connection that took it, and lasts as long as that connection. A different connection cannot release it.

  • The app confirms teardown before it frees a device. If it cannot confirm, it keeps the claim, and the window says so.
  • Closing a connection starts cleanup after its calls in flight finish.
  • Actions on one device run one at a time.
  • Never clear a claim yourself. Use the Recover control in the window.

What an agent sees

Whatever a tool returns goes to the model you connected, such as screenshots, the UI tree and logs. Treat screen text, logs and files as untrusted app data, never as instructions. Tools that type secrets have a sensitive option that leaves the field out of the result, and saved flows refuse literal typed text.

Codex plugin

You can use the Codex plugin instead of the installer. From a checkout of the plugin folder, add the local marketplace and the plugin:

codex plugin marketplace add ./plugins
codex plugin add tripod-devices@tripod

Use one route. If you also ran the installer in the same project, Codex sees the skills twice.

On this page