CLI command
spis crawl-mobile
Crawl real installed iOS or Android apps through Appium on a pinned Stado host.
Invocation#
spis crawl-mobile <ios-app-examples|android-app-examples> --host <target> --record <slug> --runtime-manifest-base64 <data> [--driver-url <url>] [--max-states <n>] [--max-depth <n>] [--output <dir>]Crawl real installed iOS or Android apps through Appium on a pinned Stado host.
Inputs and options#
- The required catalog is exactly
ios-app-examplesorandroid-app-examples;--host <target>is required in coordinator mode. --record <slug>names the one record the job crawls and--runtime-manifest-base64 <data>its immutable runtime manifest; both are required.--driver-url <url>names the Appium server on the worker host, HTTPS or loopback HTTP with only scheme, host and port. Absent, the runtime manifest's bound address is used: the host'smobile_runtime.addressin the Stado registry, bound byspis crawl start. No address is assumed; a host without one is reported asruntime_placement_unavailable.--max-states <n>defaults to 200 and must be 1–10000;--max-depth <n>defaults to 8 and must be 0–32.
Output and state effects#
Coordinator mode submits the exact revision to Stado. Worker mode drives XCUITest for iOS or UiAutomator2 for Android, writes a timestamped crawl directory and batch.json under $HOME/.spis/crawls/<catalog>/, optionally publishes it, prints the batch JSON, and fails if any record failed. Before pressing anything, every named control on a screen is judged by a model through Brama: navigation (goes back, cancels, closes or dismisses) is pressed; consent, destructive and other are withheld and recorded with their safety class and withheld_reason; inert elements are not listed. The control is judged again on a fresh source just before it is pressed. A screen Brama cannot judge ends the record with Brama's cause and nothing is pressed.
Refusals#
These messages are emitted by the current Rust implementation:
catalog is requiredorcrawl-mobile accepts ios-app-examples or android-app-examples--host is required; mobile crawls execute as pinned Stado jobs--app-id requires --record so one identifier cannot launch several records--max-states must be 1..10000 and --max-depth must be 0..32- Unknown flags are
unknown argument: VALUE; extra positionals areunexpected argument: VALUE; worker-only namespace/coordinator checks also refuse invalid mode combinations.