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.
| Executor | Description |
|---|---|
transform.csv | Parse/generate CSV |
transform.xml | Parse/generate XML |
transform.base64 | Encode/decode Base64 |
transform.hash | SHA-256, MD5, etc. |
transform.compress | Gzip compress/decompress |
transform.regex | Regex match/replace |
transform.merge | Merge multiple objects |
transform.split | Split string/array |
transform.filter | Filter array by condition |
transform.sort | Sort array by field |
transform.datetime | Date/time operations |
transform.crypto | Encrypt/decrypt |
transform.compare | Compare 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)
| Executor | Description |
|---|---|
db.postgres | PostgreSQL queries |
db.mysql | MySQL queries |
db.sqlite | SQLite queries |
db.redis | Redis commands |
db.mongodb | MongoDB operations |
- name: query-users
type: db.postgres
properties:
connection_string: "${DATABASE_URL}"
query: "SELECT * FROM users WHERE active = true LIMIT 10"
Protocol (10)
| Executor | Description |
|---|---|
saas.slack | Post to Slack via webhook |
saas.discord | Post to Discord webhook |
saas.telegram | Send Telegram message |
protocol.smtp | Send email via SMTP |
protocol.graphql | Execute GraphQL query |
protocol.rss | Parse RSS/Atom feed |
protocol.webhook_call | Generic webhook call |
protocol.ssh | Run remote SSH commands |
protocol.ftp | FTP upload/download |
protocol.mqtt | Publish MQTT message |
- name: notify-team
type: saas.slack
properties:
webhook_url: "${SLACK_WEBHOOK_URL}"
message: "Deployment complete!"
SaaS Integrations (17)
| Executor | Description |
|---|---|
saas.github | GitHub API (issues, PRs, repos) |
saas.jira | Jira issue management |
saas.notion | Notion pages and databases |
saas.airtable | Airtable records |
saas.stripe | Stripe payments |
saas.sendgrid | SendGrid email |
saas.twilio | Twilio SMS |
saas.hubspot | HubSpot CRM |
saas.linear | Linear issue tracking |
saas.pagerduty | PagerDuty incidents |
saas.datadog | Datadog events |
saas.shopify | Shopify products/orders |
saas.zendesk | Zendesk tickets |
saas.salesforce | Salesforce records |
saas.asana | Asana tasks |
saas.trello | Trello cards |
saas.google_sheets | Google 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)
| Executor | Description |
|---|---|
flow.noop | No-op (placeholder) |
flow.error | Throw an error |
flow.assertion | Assert condition |
flow.map | Map over array |
flow.reduce | Reduce array to value |
flow.unique | Deduplicate array |
flow.flatten | Flatten nested arrays |
flow.group | Group array by field |
flow.lookup | Lookup value in map |
Utility (9)
| Executor | Description |
|---|---|
util.uuid | Generate UUID |
util.random | Random number/string |
util.env | Read environment variable |
util.json | Parse/stringify JSON |
util.url | Parse/build URLs |
util.htmlstrip | Strip HTML tags |
util.template | Render template string |
util.math | Math operations |
util.string | String manipulation |
AI (6)
See the AI Capabilities page for detailed examples.
| Executor | Description |
|---|---|
ai.openai.chat | OpenAI chat completion |
ai.anthropic.chat | Anthropic Claude |
ai.gemini.chat | Google Gemini |
ai.ollama.chat | Ollama (local models) |
ai.openai.embedding | OpenAI text embeddings |
ai.openai.image | OpenAI image generation |