kuri-mobile (umbrella)
kuri-mobile is the Zig-native subproject at kuri-mobile/ that
adds mobile device control to the kuri browser-automation stack.
Inspired by mobile-device-mcp,
reimplemented in Zig with no Bun, Node, Gradle, or Xcode in the
build path.
⚠️ iOS Simulator input seizes the host cursor. kuri ios tap/swipe/type
(plus doubletap/longpress) post real CGEvents into the macOS WindowServer, so
they move your physical mouse and grab keyboard focus. Don't run them while
you're working or from a background job. kuri android input runs on-device
via adb and does not touch the host cursor. Tracked: #180, #183.
Use the platform-specific skills for actual work:
kuri-ios — iOS Simulator (boot, openurl, launch, terminate,
screenshot, list-apps) + real-iPhone listing (usbmuxd) +
real-iPhone launch/terminate (devicectl).
kuri-android — Android devices and emulators (tap, swipe,
type, press, screenshot, uitree, launch, terminate, list-apps)
via a native Zig adb wire-protocol client.
Build once, use everywhere
cd kuri-mobile
zig build
zig build test
cp zig-out/bin/kuri-mobile ../zig-out/bin/ # so `kuri ios` / `kuri android` work
The main kuri binary forwards kuri android <cmd> and
kuri ios <cmd> to kuri-mobile (it execvps it from the same
directory or $PATH). So either invocation works:
kuri android list-devices
kuri-mobile android list-devices
Driverless scope (important)
We deliberately do not install an on-device driver app.
Consequences you must be honest about:
- No
run_code JavaScript sandbox.
- No tap / swipe / type / uitree on real iOS devices (that would
require a vendored XCUITest bundle; intentionally out of scope).
- Android gets nearly the full upstream tool surface because its
shell already exposes
input, screencap, uiautomator dump,
monkey, am, pm.
Full parity matrix vs mobile-device-mcp: see
kuri-mobile/README.md.
When to reach for which skill
| User asks about… |
Invoke |
| "iPhone", "iOS", "sim", "Safari on simulator", "iPad" |
kuri-ios |
| "Android", "adb", "emulator", "Pixel", "Galaxy", "APK" |
kuri-android |
| "mobile" without specifying |
either — ask first, or default to this umbrella note |
| Browser automation (Chrome, CDP) |
not a mobile skill — use kuri-server, kuri-agent, or kuri-browse |
1---2name: kuri-mobile3description: Umbrella skill for mobile device control in the kuri ecosystem. Points to kuri-ios (iOS Simulator + real-device listing) and kuri-android (native Zig adb client). Use this when the user asks about "mobile automation" generally, or hasn't specified a platform. For platform-specific work prefer the `kuri-ios` or `kuri-android` skill directly.4---56# kuri-mobile (umbrella)78`kuri-mobile` is the Zig-native subproject at `kuri-mobile/` that9adds mobile device control to the kuri browser-automation stack.10Inspired by [`mobile-device-mcp`](https://github.com/srmorete/mobile-device-mcp),11reimplemented in Zig with no Bun, Node, Gradle, or Xcode in the12build path.1314> ⚠️ **iOS Simulator input seizes the host cursor.** `kuri ios tap/swipe/type`15> (plus doubletap/longpress) post real CGEvents into the macOS WindowServer, so16> they move your physical mouse and grab keyboard focus. Don't run them while17> you're working or from a background job. `kuri android` input runs on-device18> via adb and does **not** touch the host cursor. Tracked: #180, #183.1920**Use the platform-specific skills** for actual work:2122- **`kuri-ios`** — iOS Simulator (boot, openurl, launch, terminate,23 screenshot, list-apps) + real-iPhone listing (usbmuxd) +24 real-iPhone launch/terminate (devicectl).25- **`kuri-android`** — Android devices and emulators (tap, swipe,26 type, press, screenshot, uitree, launch, terminate, list-apps)27 via a native Zig adb wire-protocol client.2829## Build once, use everywhere3031```sh32cd kuri-mobile33zig build34zig build test35cp zig-out/bin/kuri-mobile ../zig-out/bin/ # so `kuri ios` / `kuri android` work36```3738The main `kuri` binary forwards `kuri android <cmd>` and39`kuri ios <cmd>` to `kuri-mobile` (it `execvp`s it from the same40directory or `$PATH`). So either invocation works:4142```sh43kuri android list-devices44kuri-mobile android list-devices45```4647## Driverless scope (important)4849We deliberately do **not** install an on-device driver app.50Consequences you must be honest about:5152- No `run_code` JavaScript sandbox.53- No tap / swipe / type / uitree on real iOS devices (that would54 require a vendored XCUITest bundle; intentionally out of scope).55- Android gets nearly the full upstream tool surface because its56 shell already exposes `input`, `screencap`, `uiautomator dump`,57 `monkey`, `am`, `pm`.5859Full parity matrix vs `mobile-device-mcp`: see60`kuri-mobile/README.md`.6162## When to reach for which skill6364| User asks about… | Invoke |65|---|---|66| "iPhone", "iOS", "sim", "Safari on simulator", "iPad" | `kuri-ios` |67| "Android", "adb", "emulator", "Pixel", "Galaxy", "APK" | `kuri-android` |68| "mobile" without specifying | either — ask first, or default to this umbrella note |69| Browser automation (Chrome, CDP) | **not** a mobile skill — use `kuri-server`, `kuri-agent`, or `kuri-browse` |