The three timeout knobs
Two useful properties:
- Paused time is free - time spent
pauseddoes not count againstper_call_timeout_s. - The monitor is not a deadline -
monitor_timed_out: truenever affects the task; it exists so your client never blocks forever.
Size tasks like functions
The biggest performance lever is task granularity:- One errand per task. Small tasks finish inside the default timeout, stay far from the agent’s action limit, and preserve progress on failure.
iteration_limitis a design signal, not a retry candidate - the task exceeded the agent’s action budget and must be split.- Chain in a session. Several focused tasks reusing one
session_idoutperform one mega-task on wall clock and reliability, because failures only repeat one step. See Cross-app workflows.
Reduce queue contention
Each device runs one task at a time:- Check
phone_device_statusbefore dispatching - an offline or busy device is wasted queue wait. - Tasks started in the phone app hold the execution lane and keep MCP tasks
pending; raisequeue_wait_timeout_swhen that is legitimate, or use a dedicated device for automation. - Spread genuinely parallel workloads across multiple registered devices - one workflow per device.
Keep the monitor loop lean
- Use
phone_task_monitoras the wait primitive - one long-poll call - instead of hammeringphone_task_statusin a tight loop. - Fetch steps incrementally:
include_steps: truewithsince_stepreturns only new steps (screenshots, thinking) instead of the full history each time. Skip steps entirely when you only need the outcome.
Prompt for speed
- Point the agent at the exact app and screen - “open WhatsApp, tab Chats” - so no time is spent exploring.
- Bound the ask: “first three events”, “the three cheapest flights”.
- Pre-answer predictable questions in the prompt (“if a dialog asks about
notifications, dismiss it”) to avoid a round-trip through
needs_user_control.
Related
Task design
Granularity and precision
Session management
Devices, lanes, and parallelism