Skip to content

Live debugger

Use the live debugger to pause a run, find out why a call failed and retry it with a fix.

Attach while a run is queued or running. Watch is read-only; with permission you can take control. At a failed call the browser stays open. Nothing needs adding to your script.

The pause banner shows why the run stopped, the step and source line, and who paused it. For a missing element it offers healer candidates to try.

Debugger paused at checkout.lua line 42, with banner, screenshot, source and call timeline.
  • The timeline lists every traced library call. Filter by library, result or text.
  • Select a call to see its arguments, result, duration and error in Call.
  • Console holds console and network events.
ControlWhat it doesKey
PauseStop at the next safe point. A blocking call may need to finish first.F6
ContinueResume. A failed call fails its step as usual.F8
CallRun to the next library call.F7
OverGo to the next line in the same frame.F10
LineGo to the next Lua line, including inside functions.F11
RetryRepeat the failed or pending call, optionally with changes.
RestartReload the script and rerun the current step from its start.
SkipSkip the pending call, return nil and continue.
AbortCancel the run.

If line stepping is unavailable, use Call. Retry and Restart can repeat real side effects, such as sending an order. Press / to search the timeline.

  • Click the source gutter to set or remove a line breakpoint.
  • In Breakpoints, add a call pattern such as Rest.*, Sql.query or Locator.click, optionally with a Lua condition. You can also break on navigation or a browser console error.
  • At a pause, Locals shows the variables of the paused frame. Evaluate a Lua expression there to inspect a value. Evaluation can have side effects and is not available in watch mode.

Open Retry… and enter a new selector or new arguments (Lua expressions, evaluated in the paused frame). Tick Apply everywhere to use the new selector for every later call in this run that used the old one.

Retry form with a selector field and Apply everywhere checked.

Each change is recorded in Patches, with its source file and line or locators.yaml entry. Copy the combined diff or apply it from the CLI. A live fix does not change your files. Commit the patch to keep the fix.

The live viewport streams the page. Pause stream stops the pictures, not the run.

Live browser viewport with Pause stream and Pick element controls.
  1. Choose Pick element and click the viewport. This identifies the element; it does not click the application.
  2. Read the suggested durable selectors.
  3. In Lab, test a selector and check its matches and stability.
  4. Choose Use this selector (retry everywhere).

Activity shows who joined and which commands people and AI tools sent.

Detaching leaves the run running. If the last controller disconnects during a pause, the run waits for a reconnect: 10 minutes for local dev runs, 5 for remote dev runs, 1 for jobs and suite scripts. Then it continues, and a failed call fails normally. A watch client does not keep a pause alive.