Set up workflows
Workflows define how tickets move through your process: the states, the transitions between them, automated actions, and WIP limits.
-
1 Understand the structure
Workflows are defined in YAML. A workflow has a name, a list of states, and transitions between those states.
# A complete workflow definition name: default states: - open - selected - in_progress - review - done - closed categories: open: todo selected: todo in_progress: in_progress review: in_progress done: done closed: done transitions: - from: open to: selected - from: selected to: in_progress actions: - type: require_fields fields: [assignee] - type: notify to: lead@example.com message: "Work started" wip_limit: 3 - from: in_progress to: review actions: - type: send_webhook webhook: ci - from: review to: done actions: - type: set_field field: resolved_at value: "{{now}}" - type: close_children -
2 Define your states
States are listed in order, and that order sets the columns on the board. New tickets start in the first state. Keep it simple: most teams need 4–6 states.
A
selectedstate gives your team a clear queue: pick what should happen next by moving tickets there, and people or agents take work from that column instead of the whole backlog. -
3 Group states into categories
Give each state a category:
todo,in_progress, ordone. Categories colour status badges, drive sprint completion and open or done counts, and start the cycle-time clock when work begins. A state without a category counts astodo. -
4 Define transitions
Each transition specifies a
fromstate and atostate. Only defined transitions are allowed — this enforces your process. -
5 Add actions to transitions
Actions run automatically when a transition fires. You can chain multiple actions on a single transition.
# Available action types require_fields # Block transition until fields are set notify # Email a notification to an address set_field # Set a field on the ticket create_ticket # Create a child ticket update_ticket # Same as set_field send_webhook # POST to a registered webhook close_children # Close all child tickets natural_language # Run an LLM prompt (uses your provider) -
6 Set WIP limits
Add
wip_limitto any transition to control how many tickets can be in the target state at once. This helps prevent bottlenecks and keeps flow healthy. -
7 Query via MCP
List and inspect workflows programmatically through MCP tools.
// List all workflows in a workspace list_workflows: { "workspace_id": "..." } // Get a workflow: states in order, allowed transitions, categories get_workflow: { "workspace_id": "...", "name": "default" }
Tips
- Start simple — you can always add states and actions later.
- The
natural_languageaction uses your configured LLM provider to run AI-powered automations. - WIP limits are enforced at transition time. Existing tickets in a state are not affected retroactively.
- Template variables like
{{ticket.key}}and{{now}}are expanded inset_fieldvalues.
Next steps
- Configure webhooks — connect workflow actions to external services
- Connect your LLM — enable the natural_language action type
- Build your dashboard — track cycle time and velocity from your workflows