Appearance
Schedules and actions
Scheduling eligibility
A workflow appears in GET /api/scheduled-workflows when its manifest contains schedule. Optional JSON field metadata drives both API validation and the operator form. Multipart workflows cannot be scheduled.
Schedules are one-time or fixed-interval records managed under /api/schedules. They persist in runs.sqlite. At startup, an overdue interval performs one catch-up execution; occurrences are skipped while that schedule already owns an active or suspended run.
Interactions
When interaction-input or tool approval defers an answer, the durable run becomes suspended. GET /api/interaction-requests?status=pending lists non-private requests; add withPrivate=true to include private requests or broadcasted=true to return only broadcasted requests. The filters can be combined. Inspect one with GET /api/interaction-requests/:id and resolve it with:
json
{ "response": { "approval-id": true } }Submit that body to POST /api/interaction-requests/:id/resolve. Resolution is claimed atomically; invalid or duplicate answers return an error rather than resuming twice.
The application event WebSocket sends broadcasted requests in its initial snapshot and durable required/resolved events. Schedule interactions are public and broadcasted by default.