Overview
The Tasks tab displays:- All tasks you have executed
- Currently running tasks with live status updates
- Task history with execution details and results
Task List
Your task list shows every task in reverse chronological order, with the most recent tasks at the top. Each task entry displays:Task Status
Tasks progress through several states during execution:Busy Devices
Each device runs one task at a time. When you create a task for a device that another task is already using, the new task waits for the device to become free before it starts. Queued tasks wait for the preceding task to finish. After a task is promoted from the queue, acquiring the device has a separate 30-second contention limit. If another operation still holds the device after that limit, the task fails. The task status becomesfailed and its message field contains:
Live Updates
The Tasks tab updates in real-time. When a task is running:- Status changes appear instantly
- Execution progress is visible without refreshing
- New tasks appear at the top of the list automatically
You do not need to refresh the page to see task updates. The interface synchronizes automatically with the server.
Task Details
Click on any task to view its full details:Execution Trajectory
The trajectory shows every action the agent took during execution:- Screenshots at each step
- UI elements the agent interacted with
- Decisions and reasoning (when available)
- Timestamps for each action
Task Output
For tasks with structured output schemas, view the extracted data in a formatted display. This is useful for:- Data extraction tasks
- Verification workflows
- Automated testing results
Error Information
For failed tasks, the details view shows:- Error messages and stack traces
- The last successful step before failure
- Screenshots capturing the failure state
Execution checkpoint
When a task ends abnormally (timeout, worker loss, cancellation, or an agent failure), the task status response includes an optionalexecution object. It classifies why the task ended and preserves a compact checkpoint of what the agent had done so far, so you can decide whether to retry, resume from context, or surface a better error to your users.
The execution field is only present for abnormal terminal outcomes. Tasks that complete successfully leave it as null.
Example response from
GET /tasks/{task_id}/status:
Existing task list, task detail, SSE, and webhook payloads are unchanged. The
execution field is only added to the task status response.Filtering and Search
Find specific tasks using the available filters:Task Actions
From the task list, you can:View Task Stream
For running tasks, click to open the live device stream and watch the agent execute in real-time.Cancel Running Tasks
Stop a task that is currently in progress. The agent will halt execution and the task will be marked as cancelled.The REST API endpoint for cancellation is
POST /tasks/{id}/cancel. The TypeScript and Python SDKs name this method client.tasks.stop(taskId) it hits the same /cancel endpoint.Retry Failed Tasks
Re-run a failed task with the same configuration. This creates a new task with identical parameters.Idempotent task creation
POST /tasks accepts an optional Idempotency-Key request header so retries after a
network error or timeout do not create duplicate tasks. If the same owner sends another
request with the same key and identical body, the API returns the original task instead
of creating a new one.
Use it when:
- Your client retries
POST /tasksafter connection errors or timeouts. - A queue worker or job runner may deliver the same task creation more than once.
- You dispatch tasks from a workflow that guarantees at-least-once delivery.
How keys are compared
- Keys are scoped to the calling owner and can be any string between 1 and 128 characters. Use a value your client can regenerate on retry, such as a UUID tied to the upstream job.
- The API also fingerprints the request body. If the same key arrives with a different body, the request is rejected with
409 Conflictand the messageIdempotency-Key was already used with a different request. - Replays return the original task’s
id,status, andstreamUrl, so downstream code can keep polling or streaming without special-casing the retry.