C
ChrisThoma/devicehubctl
Fold the iPhone Duo simulator, rotate any iOS simulator, and read or tap its screen from the command line…
在 GitHub 查看 ↗链接已于 2026-11-12 核查 · HTTP 200 · 打开的是厂商自己的官网
安装与配置
客户端配置(取自该仓库的安装命令)
{
"mcpServers": {
"christhoma-devicehubctl": {
"command": "npx",
"args": ["skills"]
}
}
}解析自我们于 2026-10-27 抓取的该仓库 README;我们未执行过。
command/args 来自仓库写明的安装命令;不确定时请以该项目 README 为准。
VS Code(.vscode/mcp.json —— 键名是 servers)
{
"servers": {
"christhoma-devicehubctl": {
"command": "npx",
"args": ["skills"]
}
}
}VS Code 顶层键是 <code>servers</code>,其余与上面那份相同。
Claude Code(命令行)
claude mcp add --transport stdio christhoma-devicehubctl -- npx skills
Claude Code 不收 JSON 文件,用这条命令直接加。
配置项的键名以你的客户端为准:客户端与 CLI
- ★ 数取值
- 3 ★ · ChrisThoma/devicehubctl · 取自 GitHub 搜索 API · (2026-11-13 20:00:50 核对)
- 来源明细
- 从该仓库的 GitHub 页面直接读取 · 条目类型:开源项目
- 收录与活跃
- 收录于 2026-10-27 · 最近见到 2026-11-14 · 共见到 20 次 · 被 3 个来源列出
- 评分构成
- 综合分 303 · 3 ★ · 3 个来源 · repo
- 安装
npx skills
常见问题(答案都来自我们的记录)
怎么安装?
该仓库给出的安装命令是
npx skills。我们的记录里它是仓库自己提供的;不保证在你的客户端上直接可用。它适合谁 / 用来做什么?
我们把它归在这些标签下: Agent 技能。标签来自条目自身,不是我们强加的分类。
谁维护它、还在更新吗?
仓库
ChrisThoma/devicehubctl;我们收录于 2026-10-27;最近见到 2026-11-14。这里没有"官方认证"或"质量评级"——我们只记录来源与时间。# 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
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
收录徽章(可选)
想把收录标记放进 README 就复制这行,可选,不影响收录。
[](https://anclum.com/zh/s/christhoma-devicehubctl/)
- 来源
- github · https://github.com/ChrisThoma/devicehubctl
- 按领域浏览
- Agent 技能
- Traction
- 3 ★
- 收录来源
- 3 个独立来源
- 收录于
- 今天
同类推荐
所属领域与标签
每个标签都能点进去看同类的全部条目。数字是当前库里的真实条数。