Technical docs
Workflows
Overview
Support reference for organization-owned workflows at `/workflows`.
Routes
- Library route: `/workflows`
- Shared editor route: `/skills/[workflow_id]?from=workflows`
- Shared runs route: `/skills/[workflow_id]/runs?from=workflows`
- Sidebar/menu label: `Workflows`
Library page
- Page title: `Workflows`
- Description: `Create, manage, and monitor automated workflows`
- Primary action: `Add`
- Empty state:
- title: `No workflows`
- description: `Create your first workflow to get started.`
Table behavior
- The page reuses the shared skills table hook with `no_employee=true`, so it only lists workflows where `employee_id` is `null`.
- Search is server-side and is sent as `search` to `GET /api/organizations/{orgId}/workflows`. In backend code that currently filters by workflow `name`.
- Pagination is server-side.
- Date chips labeled `Added` and `Updated` are client-side only. They filter the rows already loaded on the current page; they are not sent to the backend.
- Available columns:
- `ID`
- `Name`
- `Description`
- `Added`
- `Updated`
- `ID` is hidden by default. `Added` is also hidden by default on desktop; mobile hides more columns.
- Row click opens the shared editor.
- Row actions:
- `Logs` -> `/skills/{workflow_id}/runs?from=workflows`
- `Delete`
- Bulk action:
- `Delete`
- Export is enabled.
Create flow
- Dialog title: `New Workflow`
- Fields:
- workflow name
- optional description
- Create always sends `type: structured`.
- The current dialog does not let users assign an AI teammate or choose an agent workflow type.
- After create succeeds, the UI redirects straight into the shared editor for that workflow.
Shared editor behavior
- `/workflows` opens the same `/skills/[workflow_id]` editor used elsewhere, with `from=workflows` for back-navigation.
- The page opens in read-only mode first.
- Header actions are currently:
- `Back to Workflows`
- `View Runs`
- `Edit`
- In edit mode:
- draft changes auto-save to `PUT /api/organizations/{orgId}/workflows/{workflow_id}/draft` after a 1 second debounce
- `Reset Draft` clears the saved draft by updating the workflow with `draft: null`
- `Publish` validates the graph and publishes `flow`, `starting_step_id`, `payload_format`, `state_definition`, `mode`, `debounce_seconds`, and `debounce_key`
- closing edit mode flushes any pending draft save and resets the canvas back to the published flow
Builder scope
- Org workflows created from `/workflows` are structured workflows.
- The current structured builder palette exposes:
- `Run Skill`
- `Assign AI`
- `Condition`
- `Tool`
- `Run Code`
- `User Input`
- `LLM`
- `Send Message`
- `Finish`
- grouping/support nodes such as `Starting Step` and `Group`
- Backend workflow types still include `mapping` and `wait_callback`, but those node types are not in the current frontend palette and are not runnable in the processor.
API behavior
- Library list:
- `GET /api/organizations/{orgId}/workflows?no_employee=true&page=<n>&limit=<n>&search=<text>`
- Create:
- `POST /api/organizations/{orgId}/workflows`
- Delete and restore:
- `DELETE /api/organizations/{orgId}/workflows/{workflow_id}/`
- `POST /api/organizations/{orgId}/workflows/bulk-delete/`
- `POST /api/organizations/{orgId}/workflows/bulk-restore/`
- Shared editor:
- `GET /api/organizations/{orgId}/workflows/{workflow_id}/`
- `PUT /api/organizations/{orgId}/workflows/{workflow_id}/`
- `PUT /api/organizations/{orgId}/workflows/{workflow_id}/draft`
- `POST /api/organizations/{orgId}/workflows/{workflow_id}/publish`
- Runs surfaces:
- `GET /api/organizations/{orgId}/workflows/{workflow_id}/runs/`
- `POST /api/organizations/{orgId}/workflows/{workflow_id}/runs/`
- `GET /api/organizations/{orgId}/workflows/{workflow_id}/runs/{run_id}/`
Permissions
- Workflow actions are organization-scoped and authorized by backend checks.