Independent by design · no pay-to-rank placements  · How we evaluate tools →
Anclum Submit
C

ChrisThoma/devicehubctl

Fold the iPhone Duo simulator, rotate any iOS simulator, and read or tap its screen from the command line…

Before you install: no copy-paste command · license MIT · link reachable

First step: git clone https://github.com/ChrisThoma/devicehubctl.git

View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Install & config
Client config (built from the install command this repo gives)
{
  "mcpServers": {
    "christhoma-devicehubctl": {
      "command": "npx",
      "args": ["skills"]
    }
  }
}

Parsed from the README we fetched on 2026-10-27; we have not executed it.

command/args come from the install command the repository states. When it is ambiguous, the project README wins.
VS Code (.vscode/mcp.json - the key is servers)
{
  "servers": {
    "christhoma-devicehubctl": {
      "command": "npx",
      "args": ["skills"]
    }
  }
}
Same server, but VS Code keeps it under <code>servers</code>.
Claude Code (command line)
claude mcp add --transport stdio christhoma-devicehubctl -- npx skills
Claude Code does not read a config file; add the server with this command.
Key names differ by client: Clients & CLI
Star count
3 ★ · ChrisThoma/devicehubctl · read from the GitHub search API · (checked 2026-11-13 20:00:50)
Source
read directly from its GitHub page · type: open-source project
Harvest history
first seen 2026-10-27 · last seen 2026-11-14 · seen 20× · listed by 3 sources
Score
score 303 · 3 ★ · 3 sources · repo
Install
npx skills
FAQ (answers come from our records)
How do I install it?
The repository provides this install command: npx skills. It comes from the repository itself; we cannot guarantee it runs as-is in your client.
Who is it for?
We filed it under these tags: Agent 技能. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository ChrisThoma/devicehubctl;first catalogued 2026-10-27;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.

# devicehubctl

以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →

Fold, unfold and rotate iOS simulators from the command line, and read, tap,
long-press or drag what's on their screen, through Xcode 27's DeviceHub.
sh
devicehubctl pose open # iPhone Duo: closed, partial or open
devicehubctl rotate # 90° right
devicehubctl tree # what's on the device's screen
devicehubctl tap "Continue" # tap it
devicehubctl split Settings # Split View on the Duo
More about it:
individuation.dev/projects/devicehubctl.
## Why
In Xcode 27, DeviceHub replaced Simulator.app, and the only way to change an
iPhone Duo simulator's pose is the buttons under the device in its window. simctl
has no command for poses or rotation, DeviceHub has no AppleScript dictionary, and
System Events can't see its UI. That leaves scripts, CI and coding agents with no
way to test the inner display without a person clicking.
The macOS accessibility API, called directly, does see DeviceHub's window.
devicehubctl finds the window showing a simulator and presses the same buttons a
person would.
The same window holds the simulated device's own accessibility tree, so
devicehubctl can also list and tap what's on screen. That matters on the iPhone
Duo, where idb, and the simulator MCP servers built on it, can't read the screen.
## Requirements
macOS with Xcode 27.1 or later (DeviceHub). Tested with Xcode 27.1 and the
iOS 27.1 iPhone Duo simulator.
DeviceHub running (open -a DeviceHub) and the simulator booted.
Accessibility access for the app you run it from (Terminal, iTerm, your
editor) in System Settings > Privacy & Security > Accessibility.
An unlocked screen. While the Mac is locked, DeviceHub hides its windows from
the accessibility API, and devicehubctl says so.
## Install
sh
git clone https://github.com/ChrisThoma/devicehubctl.git
cd devicehubctl
swift build -c release
cp .build/release/devicehubctl /usr/local/bin/
## Commands
| Command | What it does |
| devicehubctl pose closed\|partial\|open | Fold or unfold an iPhone Duo |
| devicehubctl rotate [times] | Rotate right, 90° each time |
| devicehubctl controls | List the buttons under the device |
| devicehubctl press " " | Press one of them, e.g. Home |
| devicehubctl tree | List what's on the screen: role, label, value, identifier |
| devicehubctl tap " " | Tap something tree listed |
| devicehubctl longpress " " [seconds] | Touch and hold it, 1.2 seconds unless you say otherwise |
| devicehubctl split " " [ ] | Open a Home Screen app in Split View, and launch another app beside it |
| devicehubctl touch [seconds] | Touch a point, 0.1 seconds unless you say otherwise |
| devicehubctl drag [seconds] | Drag from one point to another, 0.5 seconds unless you say otherwise |
comes from xcrun simctl list devices. You can pass booted when exactly
one simulator is booted. With more than one, it refuses rather than guess.
If no DeviceHub window shows the simulator, devicehubctl first reuses a window
left on a simulator that isn't booted, and otherwise opens a new window, rather
than switching one you or another tool are looking at.
### Several simulators at once
Each simulator gets its own DeviceHub window, matched by the UDID selected in the
window's sidebar, so two simulators with the same name never get mixed up. Runs
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[![Listed on Anclum](https://anclum.com/badge/listed.svg)](https://anclum.com/en/s/christhoma-devicehubctl/)
Source
github · https://github.com/ChrisThoma/devicehubctl
Browse by field
Agent skills
Traction
3 ★
Listed by
3 independent sources
added
today

Filed under

Every tag opens the full list for that filter. Counts are the live catalogue figures.

Browse all fields →

← Back to index