phone_scroll_find
Find an exact on-screen label, swiping a limited number of times if absent, and stop when it is ambiguous, covered, or not drawn. Returns the target or candidate labels for tapping.
Instructions
Find one exact label, swiping at most max_swipes times (default 1, max 5) when it is not on screen. Stops AT ONCE — no further swipe — when the label is ambiguous (several on-screen matches: candidates with index and frame), covered by another control, or not drawn. Found: target (index, kind, frame) plus a snapshot for phone_tap_element. Not found: on-screen labels containing the text as candidates. No screenshot is taken; absence after the budget is not proof — look at the screen before swiping further. Optional snapshot (from a read of the target app; never filled in for you): a known foreground app mismatch refuses before any swipe (app_changed). Setup may already have affected the device. Stops when ownership or privacy authorization changes and withholds observations. swipes_confirmed counts Native ACKs, not displacement; swipes_uncertain means no ACK and must not be replayed automatically. Requires phone_status drivable=true.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Narrow to one element kind (e.g. `Button`) when a text shares the label. | |
| label | Yes | Exact label to find. | |
| region | No | Swipe inside this normalized `[x, y, w, h]` area (default: whole screen). | |
| instance | No | Installed local instance name, such as i13 or default. Omit to use the configured daemon. No fallback on failure. | |
| snapshot | No | A snapshot from an earlier read of the target app: when given, a different foreground app refuses before any swipe. Not filled in for you. | |
| direction | No | `down` (default) or `up`: which way to look when the label is absent. | |
| max_swipes | No | Swipes allowed when the label is not on screen, 0–5 (default 1). |