What the model sees
screen: com.apple.Preferences / "Display & Text Size" fp=3872280ee1 button "Accessibility" id=BackButton @(38,84)e2 switch "Bold Text" =0 id=ENHANCE_TEXT_LEGIBILITY @(336,161)e3 button "Larger Text, Off" id=LARGER_TEXT @(190,216)Measured across thirteen golden flows on a real simulator: 50 to 474 tokens per step, averaged over each flow. One of them is a real 300-row list, Contacts seeded with 300 people, where other tools report timeouts: one observe comes back as 166 raw nodes and 438 tokens in 1.35s, because UIKit only realises the rows on screen.
The agent passes e2 back to an action. It never writes XPath and never
guesses coordinates. If a ref goes stale because the screen moved, the host
re-finds the same element by identity rather than failing.