task-types
workflowdev

Task Types

The workflow engine ships with 83 built-in executors. Browse them all via GET /api/v1/plugins.

Core

The essential building blocks.

HTTP Request

- name: fetch-data
  type: http.request
  properties:
    url: https://api.example.com/users
    method: GET
    headers:
      Authorization: "Bearer ${API_TOKEN}"
    timeout: 30

Outputs: status_code, body, headers

Shell Script

Runs in a Docker container (local) or K8s Job (production).

- name: process
  type: script.shell
  properties:
    image: alpine:3.19
    script: |
      echo "Processing data..."
      echo '::{"outputs":{"result":"done","count":42}}::'

Emit outputs via the marker format: ::{"outputs":{...}}:: on stdout.

Python Script

- name: analyze
  type: script.python
  properties:
    image: python:3.11-alpine
    script: |
      import json
      data = {"score": 95, "grade": "A"}
      print(f'::{json.dumps({"outputs": data})}::')

Set Values

- name: config
  type: transform.set
  properties:
    values:
      api_url: https://api.example.com
      max_retries: 3

Log

- name: debug
  type: util.log
  properties:
    message: 'Status: {{ outputs["fetch"]["status_code"] }}'

Conditional (If / Switch)

- name: check-status
  type: flow.if
  depends_on: [fetch]
  properties:
    condition: '{{ outputs["fetch"]["status_code"] == 200 }}'
    then: success-path
    else: error-path
- name: route
  type: flow.switch
  properties:
    value: '{{ outputs["classify"]["category"] }}'
    cases:
      urgent: handle-urgent
      normal: handle-normal
    default: handle-other

ForEach

- name: process-items
  type: flow.forEach
  properties:
    items: '{{ outputs["fetch"]["body"]["users"] }}'
    task:
      type: http.request
      properties:
        url: 'https://api.example.com/process/{{ item.id }}'
        method: POST

Transforms (13)

Data manipulation without external services.

ExecutorDescription
transform.csvParse/generate CSV
transform.xmlParse/generate XML
transform.base64Encode/decode Base64
transform.hashSHA-256, MD5, etc.
transform.compressGzip compress/decompress
transform.regexRegex match/replace
transform.mergeMerge multiple objects
transform.splitSplit string/array
transform.filterFilter array by condition
transform.sortSort array by field
transform.datetimeDate/time operations
transform.cryptoEncrypt/decrypt
transform.compareCompare two values
- name: encode
  type: transform.base64
  properties:
    operation: encode
    data: '{{ outputs["fetch"]["body"] }}'

- name: hash-it
  type: transform.hash
  depends_on: [encode]
  properties:
    algorithm: sha256
    data: '{{ outputs["encode"]["result"] }}'

Databases (5)

ExecutorDescription
db.postgresPostgreSQL queries
db.mysqlMySQL queries
db.sqliteSQLite queries
db.redisRedis commands
db.mongodbMongoDB operations
- name: query-users
  type: db.postgres
  properties:
    connection_string: "${DATABASE_URL}"
    query: "SELECT * FROM users WHERE active = true LIMIT 10"

Protocol (10)

ExecutorDescription
saas.slackPost to Slack via webhook
saas.discordPost to Discord webhook
saas.telegramSend Telegram message
protocol.smtpSend email via SMTP
protocol.graphqlExecute GraphQL query
protocol.rssParse RSS/Atom feed
protocol.webhook_callGeneric webhook call
protocol.sshRun remote SSH commands
protocol.ftpFTP upload/download
protocol.mqttPublish MQTT message
- name: notify-team
  type: saas.slack
  properties:
    webhook_url: "${SLACK_WEBHOOK_URL}"
    message: "Deployment complete!"

SaaS Integrations (17)

ExecutorDescription
saas.githubGitHub API (issues, PRs, repos)
saas.jiraJira issue management
saas.notionNotion pages and databases
saas.airtableAirtable records
saas.stripeStripe payments
saas.sendgridSendGrid email
saas.twilioTwilio SMS
saas.hubspotHubSpot CRM
saas.linearLinear issue tracking
saas.pagerdutyPagerDuty incidents
saas.datadogDatadog events
saas.shopifyShopify products/orders
saas.zendeskZendesk tickets
saas.salesforceSalesforce records
saas.asanaAsana tasks
saas.trelloTrello cards
saas.google_sheetsGoogle Sheets read/write
- name: create-issue
  type: saas.github
  properties:
    token: "${GITHUB_TOKEN}"
    owner: excalibase
    repo: workflow
    endpoint: /repos/{owner}/{repo}/issues
    method: POST
    body:
      title: "Automated issue from workflow"
      body: '{{ outputs["analyze"]["summary"] }}'

Flow Control (9)

ExecutorDescription
flow.noopNo-op (placeholder)
flow.errorThrow an error
flow.assertionAssert condition
flow.mapMap over array
flow.reduceReduce array to value
flow.uniqueDeduplicate array
flow.flattenFlatten nested arrays
flow.groupGroup array by field
flow.lookupLookup value in map

Utility (9)

ExecutorDescription
util.uuidGenerate UUID
util.randomRandom number/string
util.envRead environment variable
util.jsonParse/stringify JSON
util.urlParse/build URLs
util.htmlstripStrip HTML tags
util.templateRender template string
util.mathMath operations
util.stringString manipulation

AI (6)

See the AI Capabilities page for detailed examples.

ExecutorDescription
ai.openai.chatOpenAI chat completion
ai.anthropic.chatAnthropic Claude
ai.gemini.chatGoogle Gemini
ai.ollama.chatOllama (local models)
ai.openai.embeddingOpenAI text embeddings
ai.openai.imageOpenAI image generation