Skip to Content
Components

Error recovery

A failed step with retry, skip or hand over to a person.

A run that hit an error, with the steps around it and a choice of how the agent should carry on. Each step carries a state — done, fail, run, wait, skip or hand — that picks its glyph, and an optional note under it that crossfades when it changes. The options are the ways the agent can continue; pick one and press Continue, and the choices fold away.

Preview
Sync the pipeline to SheetsStopped at step 2
Pull 1,240 deals from the CRMDone in 8s
Write to the Pipeline 2026 sheetError 403: the agent lost edit access to this sheet
Post the summary in #sales
How should the agent continue?

Usage

<!-- include core.css + error-recovery.css -->
<div class="erx panel">
  <div class="erx-h"><span class="erx-t">Sync the pipeline to Sheets</span><span class="erx-s muted">Stopped at step 2</span></div>
  <div class="erx-list"><!-- one .erx-row per step --></div>
  <div class="erx-box"><div><div class="erx-in">
    <div class="erx-q">How should the agent continue?</div>
    <div class="erx-opts" role="radiogroup">
      <button class="erx-o on" data-o="retry" role="radio" aria-checked="true"><i></i><span>Ask for edit access, then retry</span></button>
      <!-- more .erx-o options -->
    </div>
    <button class="pill primary sm erx-go">Continue</button>
  </div></div></div>
</div>

Properties

NameTypeDescription
titlestringWhat the agent was doing, like "Sync the pipeline to Sheets".
statusstringWhere the run stands, like "Stopped at step 2". Crossfades when it changes.
stepsRecoveryStep[]The steps around the failure. Each has a label, a state and an optional note.
step.statedone | fail | run | wait | skip | handPicks the glyph: a check, a red alert, a spinner, a quiet dot, a struck-through skip or a hand-off.
step.notestringThe quiet line under the step, like "Done in 8s" or the error. Crossfades when it changes.
questionstringThe question above the choices. Defaults to "How should the agent continue?".
optionsRecoveryOption[]The ways the agent can carry on, each a { value, label }.
value / defaultValuestringThe chosen option, controlled or uncontrolled. Defaults to the first option.
onValueChange(value) => voidCalled when a different choice is picked.
onContinue(value) => voidCalled with the chosen option when Continue is pressed.
continueLabelstringThe label on the confirm button. Defaults to "Continue".
open / defaultOpenbooleanWhether the choices show. Leave it out and they fold away once Continue is pressed.
onOpenChange(open) => voidCalled when the choices fold open or closed.
barebooleanSits flat in a chat thread (the default). Set false to give it a card of its own.

Theming

Works in light and dark (data-theme="dark") and in the Soft style (data-style="soft"). The step glyphs take their colour from the theme tokens — a green check, a red alert, a plum hand-off — and the rail between steps, the selected choice and the Continue pill all draw from the same tokens, so the whole block reads against either background; in Soft the choices and the pill are rounder.

On this page