While an Agent Builder session is running, the work it’s doing — pages it visits, plans it generates, data it extracts — surfaces as a stream of typed events. Long-poll them with one endpoint:Documentation Index
Fetch the complete documentation index at: https://docs.sequentum.com/llms.txt
Use this file to discover all available pages before exploring further.
Cursor pattern
PasslastEventIndex=-1 on the first call. Each response carries:
events[]— events emitted since your cursor.lastEventIndex— the index of the last event in this response.
lastEventIndex on the next call. Repeat until you see a terminal event.
Despite the underlying class being named
AgentBuilderSseEvent, the External API delivers events via HTTP long-poll, not Server-Sent Events. Each call returns a snapshot; you re-call to get more. Long-poll is simpler to consume from any client and Sequentum doesn’t charge per call.Event types
Every event carries a discriminatortype, plus base fields timestamp and eventIndex. Per-type payloads:
| Type | Payload | Notes |
|---|---|---|
session_started | sessionId, mode | First event in every session. |
user_prompt | prompt | Replays the original prompt; useful for UI reconstruction. |
thinking | message | Builder reasoning narration. |
user_message | message | Message to display to the user. |
plan_generated | plan | A structured plan was produced. |
step_started | stepNumber, totalSteps, description, actionType | A plan step is starting. |
step_completed | stepNumber, success, snapshot, commandAdded | A plan step finished. |
error | message, stepNumber, isRecoverable | Terminal if isRecoverable is false. |
navigation_completed | url, title, snapshot, configId, agentName | The browser landed on a new URL. |
screenshot | imageBase64 | A new screenshot is available. |
command_added | command | A command was added to the in-progress agent. |
ready_for_interaction | snapshot, message, configId, agentName, hasBrowserUrl | Builder is paused, awaiting human input. |
tool_execution | toolName, phase, args, result, success, durationMs | Internal tool ran (start/end). Useful for debugging. |
llm_response | iteration, content, hasToolCalls, toolCount, isComplete | Raw model output. Debugging. |
extended_thinking | iteration, thinkingContent, isComplete | Streamed model reasoning. Debugging. |
data_extracted | columns, rows, totalRows | Structured data was extracted from the page. |
todos_updated | todos | Builder’s task list changed. |
browser_session_ready | url | Frontend can connect to the browser WebSocket (UI use). |
completed | configId, agentName, commandCount | Terminal — Agent saved. |
Terminal events
Stop polling on:completed— the Agent was saved; pullconfigIdandagentNamefrom the payload.errorwithisRecoverable: false— the session is dead.
GET /{sessionId}/status and watching for status: "cancelled".
What you actually need to handle
Most production integrations only care about a handful of types. A reasonable minimum:session_started— record that the session is live.data_extracted— surface progress to your user.ready_for_interaction— prompt the user for follow-up input.completed— save the resultingconfigId.error— handle the failure mode.