onProgress Callback
The most direct way to monitor a run is theonProgress callback passed to runWorkflow:
SmithersEvent object.
NDJSON Log Files
By default, Smithers writes every event as a newline-delimited JSON line to:Live tailing
Watch events in real time during execution:Filtering with jq
Custom log directory
SSE Endpoint (Server)
When using the Smithers server, you can stream events via Server-Sent Events:Event Types Reference
Smithers emits 25+ event types. Here is the full list grouped by category:Run lifecycle
| Event | Description |
|---|---|
RunStarted | A new run has been created |
RunStatusChanged | The run status transitioned (e.g., running to waiting-approval) |
RunFinished | The run completed successfully |
RunFailed | The run failed |
RunCancelled | The run was cancelled (abort signal or manual) |
Node lifecycle
| Event | Description |
|---|---|
NodePending | A node has been extracted from the tree and is waiting to be scheduled |
NodeStarted | A node’s execution has begun (includes nodeId, iteration, attempt) |
NodeFinished | A node completed successfully |
NodeFailed | A node failed (includes error details) |
NodeCancelled | A node was cancelled (unmounted between renders or run aborted) |
NodeSkipped | A node was skipped (skipIf or Branch not taken) |
NodeRetrying | A node failed and will be retried (includes attempt number) |
NodeOutput | A node produced output (includes the output payload) |
Approval events
| Event | Description |
|---|---|
NodeWaitingApproval | A node with needsApproval is waiting for a decision |
ApprovalRequested | An approval request has been created in the database |
ApprovalGranted | A node was approved |
ApprovalDenied | A node was denied |
Tool events
| Event | Description |
|---|---|
ToolCallStarted | An agent tool invocation has started (includes tool name and arguments) |
ToolCallFinished | An agent tool invocation completed (includes result and duration) |
Frame events
| Event | Description |
|---|---|
FrameCommitted | A new render frame was persisted to the database |
Revert events
| Event | Description |
|---|---|
RevertStarted | A revert operation has begun |
RevertFinished | A revert operation completed |
Database Event Storage
All events are persisted to the_smithers_events table with sequential ordering:
_smithers_events table has these columns:
| Column | Type | Description |
|---|---|---|
run_id | text | The run ID |
seq | integer | Auto-incrementing sequence number (unique per run) |
type | text | The event type name |
payload_json | text | Full event payload as JSON |
Building a Progress Dashboard
Combine theonProgress callback with your own state tracking to build a real-time dashboard:
Next Steps
- Debugging — Dig deeper into failures using CLI and SQLite queries.
- Events Reference — Full event type definitions.
- Server Integration — Set up the HTTP server and SSE endpoint.