Spis/Docs

CLI command

spis crawl-mobile

Crawl real installed iOS or Android apps through Appium on a pinned Stado host.

Invocation#

bash
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-examples or android-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's mobile_runtime.address in the Stado registry, bound by spis crawl start. No address is assumed; a host without one is reported as runtime_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 required or crawl-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 are unexpected argument: VALUE; worker-only namespace/coordinator checks also refuse invalid mode combinations.