Parent
Follow-up from #581.
What to build
Model Maestro's most useful execution behavior as a generic Agent Device reliability/performance policy: after a touch command that is expected to mutate UI, detect whether the surface actually changed, retry likely no-op taps within a small budget, and then settle lazily only when the next command needs fresh UI state.
This should not be implemented as more Maestro-only compatibility branching. The goal is to turn the behavior we validated through Maestro suites into a reusable Agent Device runtime primitive used by replay/test flows and available to normal command paths where it improves reliability without adding fixed sleeps.
Why
The React Navigation and Bluesky validation showed that Agent Device is already fast when it avoids unnecessary snapshots and fixed waits. The remaining Maestro behavior worth incorporating is not YAML syntax; it is the runner model:
- taps can be issued before the UI is fully ready, so a successful low-level tap can still be a semantic no-op
- some flows rely on "tap until the app moved" rather than "tap returned successfully"
- settling should be demand-driven, because unconditional post-command waits erase Agent Device's performance advantage
- diagnostics should explain when retries or slow snapshots are the reason a flow got slower
We already have partial pieces:
- Maestro
tapOn retries while target resolution/click fails
assertVisible caches a snapshot for a following tapOn
- post-gesture stabilization waits for stable snapshots after scroll/swipe
- Android snapshot freshness retries suspicious post-action snapshots
Those pieces should be reconciled into one explicit interaction outcome policy.
Acceptance criteria
Non-goals
- Do not copy Maestro's coordinate quirks or app-specific workarounds into generic Agent Device behavior.
- Do not add fixed sleeps after every command.
- Do not expand Maestro YAML syntax surface in this issue unless it falls out naturally from the shared policy.
Blocked by
None - can start immediately.
Parent
Follow-up from #581.
What to build
Model Maestro's most useful execution behavior as a generic Agent Device reliability/performance policy: after a touch command that is expected to mutate UI, detect whether the surface actually changed, retry likely no-op taps within a small budget, and then settle lazily only when the next command needs fresh UI state.
This should not be implemented as more Maestro-only compatibility branching. The goal is to turn the behavior we validated through Maestro suites into a reusable Agent Device runtime primitive used by replay/test flows and available to normal command paths where it improves reliability without adding fixed sleeps.
Why
The React Navigation and Bluesky validation showed that Agent Device is already fast when it avoids unnecessary snapshots and fixed waits. The remaining Maestro behavior worth incorporating is not YAML syntax; it is the runner model:
We already have partial pieces:
tapOnretries while target resolution/click failsassertVisiblecaches a snapshot for a followingtapOnThose pieces should be reconciled into one explicit interaction outcome policy.
Acceptance criteria
pressslower by default.interaction_no_change_retry,interaction_settled, andinteraction_settle_timeout, including attempts and duration.Non-goals
Blocked by
None - can start immediately.