Skip to main content

Activity Catalog

An activity is a unit of work a workflow performs outside itself: an HTTP call, a database query, a shell command, an LLM completion. Activities are grouped into providers, and an activity's type is <provider>.<name>http.request, builtin.state.set_state, llama_index.query.

This page indexes every activity the platform ships. Each provider has its own reference page with the input and output contract of each of its activities, and worked examples.

For what an activity is and how to write one into a workflow, see Activity System and the activity statement.

How to read this reference

Every activity is invoked the same way, so the statement-level fields — type, input_data, config_data, output_name, output_data, retry_policy, execute_locally, async_mode, enable_cache — are documented once in Activity System rather than repeated on each page. The provider pages cover only what is specific to an activity:

  • Description — what it does and when to reach for it.
  • Input — the fields of input_data, with types, defaults and which are required.
  • Output — the shape of the result, which output_name captures and output_data transforms.
  • Examples — real YAML, drawn from moco-examples/ wherever an example exists.

Conventions across providers

Secrets are named, not inlined

A field ending _secret_key holds the name of a secret, never the secret itself: apikey_secret_key, connection_string_secret_key, password_secret_key, auth.credentials_secret_key. The activity resolves and decrypts it internally, so plaintext never enters workflow context. A bare NAME resolves a user-scoped secret; global/NAME resolves a global one. See Secret Activities.

Four exceptions are worth knowing:

  • http.request takes encrypted_auth_token — the still-encrypted blob from builtin.secret.get — rather than a secret name.
  • graphql.subscribe, websocket.subscribe and mcp.call_tool authenticate with a plain headers dict, which passes through workflow context in plaintext.
  • langfuse.* takes raw credentials inline; prefer configuring them as environment variables on the worker.
  • k8s.* names its token and client key through token_secret_key and client_key_secret_key as usual, but also accepts an inline ca_cert — a CA certificate is public material, so routing it through the secret store buys nothing.

Retry and timeout defaults

The platform default is 60 seconds and 3 attempts. Activities whose work is not idempotent — writes, sends, spend — ship max_attempts: 1 instead, and the exceptions are called out on each page. Override either per call with retry_policy.

Only the Temporal runtime honours retry, timeout and heartbeat settings; the in-memory runtime ignores them.

Long-running activities and the relay pattern

Six activities run for as long as their source keeps producing, and deliver what they receive as workflow events rather than as a return value:

ActivityDelivers
kafka.consumeEach Kafka message
rabbit.receiveEach RabbitMQ message
graphql.subscribeEach subscription payload
websocket.subscribeEach inbound frame
mcp.call_toolEach progress notification
claude_agent.queryAgent progress

They all share the same three fields — relay_topic, relay_event_type and target_workflow_id — and the workflow consumes what they publish with wait_for.

Two things follow. First, start them asynchronously: set async_mode: true or put them in a parallel branch, or they block the workflow for their whole timeout, which is usually a day. Only rabbit.receive defaults to async mode. Second, on the Temporal runtime each relayed payload is a workflow signal and a history entry, and the engine retains at most 1000 unmatched events per topic — so these suit low-rate control streams, not high-throughput data feeds.

k8s.wait also runs long and heartbeats, but is not part of this pattern: it polls until its condition holds and then returns normally, rather than relaying events. Its result is the point, so it blocks by design.

Where activities run

Every activity runs on the base worker (task queue default) except claude_agent.query, which runs on the agent worker (task queue agent). Routing is automatic; nothing in the workflowspec changes. An activity served by a different worker type cannot run locally, so execute_locally has no effect on it.

Conversely, the browser activities (Playwright, Selenium) and the short built-ins builtin.now and builtin.delay default to execute_locally: true. For the browser activities this is load-bearing — it pins a browser session to one worker — and must not be overridden.


Providers

ProviderActivitiesWhat it's for
Built-in Core3Clock, delay, and running a workflow inside an activity
State Store8Durable key/value storage that outlives a run
Secrets4The secret store behind every *_secret_key field
Events & Metrics2Debug events and metrics for observability
HTTP1Calling any HTTP service
Shell1Running a command on the worker
SQL2Parameterized queries and writes against PostgreSQL
Email1Sending mail over SMTP
Google Drive6Reading and writing Drive files
Kubernetes8Applying, inspecting and operating cluster resources
Kafka2Publishing to and consuming from Kafka
RabbitMQ2Publishing to and subscribing to RabbitMQ
GraphQL1GraphQL subscriptions
WebSocket1Generic WebSocket feeds
MCP1Calling a remote MCP server's tools
OpenAI1Chat completions against any OpenAI-compatible endpoint
Claude Agent1An autonomous agent loop with granted tools
LlamaIndex7Building and querying a vector index — RAG
Langfuse2Online and offline LLM evaluation
Playwright26Browser automation
Selenium23Browser automation via WebDriver
Authorization4Evaluating authorization policy from a workflow
Deployment & Admin75The control plane: namespaces, packages, deployments, users, RBAC

All activity types

Built-in core

ActivityDescription
builtin.nowCurrent timestamp on the worker
builtin.delayPause for a duration
builtin.execute_workflowRun a whole workflow in memory inside one activity

State store

ActivityDescription
builtin.state.set_stateWrite a value
builtin.state.get_stateRead a value
builtin.state.get_state_with_tsRead a value with its last-update time
builtin.state.del_stateDelete one entry
builtin.state.list_statesList keys in a namespace, filtered and paged
builtin.state.list_namespacesList namespaces holding data
builtin.state.update_topicRetag an entry without rewriting it
builtin.state.delete_by_topicDelete every entry matching a topic pattern

Secrets

ActivityDescription
builtin.secret.uploadStore an encrypted secret
builtin.secret.getFetch a secret, still encrypted and short-lived
builtin.secret.listList secret names
builtin.secret.deleteRemove a secret

Events and metrics

ActivityDescription
builtin.event.emit_debug_eventPublish a debug event, streamed live to the client
builtin.event.emit_metric_eventPublish a metric to Kafka

HTTP, shell, SQL and email

ActivityDescription
http.requestMake an HTTP request
shell.runExecute a command on the worker
sql.queryRun a SELECT and return the rows
sql.executeRun a write or DDL statement
email.sendSend an email over SMTP

Google Drive

ActivityDescription
gdrive.listList files, by folder, name or Drive query
gdrive.downloadDownload a file, inline or to disk
gdrive.uploadUpload or replace a file
gdrive.get_metadataRead one file's metadata
gdrive.create_folderCreate a folder, optionally reusing an existing one
gdrive.deleteTrash or permanently delete a file

Kubernetes

ActivityDescription
k8s.applyServer-side apply one or more manifests
k8s.getFetch a single resource
k8s.listList resources by label or field selector
k8s.deleteDelete a resource, or a set of them
k8s.scaleSet a workload's replica count
k8s.logsRead a bounded tail of a pod's log
k8s.waitPoll until a condition holds, or the resource is gone
k8s.execRun a command in a container

Messaging and streaming

ActivityDescription
kafka.publishPublish messages to a Kafka topic
kafka.consumeConsume a topic, relaying each message as an event
rabbit.publishPublish a message to a RabbitMQ topic
rabbit.receiveSubscribe to a topic, relaying each message as an event
graphql.subscribeHold a GraphQL subscription, relaying each payload
websocket.subscribeHold a WebSocket connection, relaying each frame
mcp.call_toolCall a remote MCP tool, relaying its progress

AI

ActivityDescription
openai.chat.completionsOne chat completion, with tools and structured output
claude_agent.queryAn autonomous multi-turn agent loop
llama_index.index_webIndex a list of URLs
llama_index.index_siteIndex a site from one seed — sitemap, feed or crawl
llama_index.index_githubIndex a GitHub repository
llama_index.index_gdriveIndex a Google Drive folder or file list
llama_index.index_filesIndex files on the worker's disk
llama_index.index_docsDeprecated — use llama_index.index_web
llama_index.querySemantic search, retrieving chunks or synthesizing an answer
langfuse.run_experimentOffline evaluation over a Langfuse dataset
langfuse.create_scoreAttach scores to the running workflow's trace

Browser automation — Playwright

ActivityDescription
playwright.browser.createLaunch a browser and get a session id
playwright.browser.closeClose the session
playwright.browser.get_infoReport on a live session
playwright.page.gotoNavigate to a URL
playwright.page.backGo back in history
playwright.page.forwardGo forward in history
playwright.page.reloadReload the page
playwright.element.clickClick an element
playwright.element.fillSet an input's value
playwright.element.typeType text with keyboard events
playwright.element.clearEmpty an input
playwright.element.selectChoose a dropdown option
playwright.element.get_textRead an element's text
playwright.element.get_attributeRead an element attribute
playwright.element.is_visibleWhether an element is visible
playwright.element.is_enabledWhether an element is enabled
playwright.element.query_selectorWhether one element matches
playwright.element.query_selector_allCount matching elements
playwright.page.contentGet the rendered HTML
playwright.page.titleGet the page title
playwright.page.urlGet the current URL
playwright.page.screenshotCapture a screenshot
playwright.page.evaluateRun JavaScript in the page
playwright.page.wait_for_selectorWait for an element to reach a state
playwright.page.wait_for_urlWait for the URL to match
playwright.page.wait_for_timeoutWait a fixed time

Browser automation — Selenium

ActivityDescription
selenium.browser.createLaunch Chrome and get a session id
selenium.browser.closeClose the session
selenium.browser.get_infoReport on a live session
selenium.nav.gotoNavigate to a URL
selenium.nav.backGo back in history
selenium.nav.forwardGo forward in history
selenium.nav.refreshReload the page
selenium.element.clickClick an element
selenium.element.typeType text into an element
selenium.element.clearEmpty an input
selenium.element.findFind one or many elements
selenium.element.get_textRead an element's text
selenium.element.get_attributeRead an HTML attribute
selenium.element.get_propertyRead a live DOM property
selenium.element.is_visibleWhether an element is visible
selenium.element.is_enabledWhether an element is enabled
selenium.page.get_htmlGet the rendered page source
selenium.page.get_titleGet the page title
selenium.page.get_urlGet the current URL
selenium.page.screenshotCapture the page or one element
selenium.page.execute_scriptRun JavaScript in the page
selenium.wait.elementWait for an element condition
selenium.wait.timeWait a fixed time

Authorization

ActivityDescription
authz.list_resourcesList resources that have policies
authz.get_resource_policyFetch a resource's policy
authz.check_privilegeEvaluate whether the caller may perform an action
authz.impersonate_userObtain an identity for another user

Deployment and administration

Seventy-five activities, documented by family on the Deployment & Admin page.

FamilyActivitiesCovers
Namespacesbuiltin.deploy.namespace.* (5)Create, read and delete namespaces
Workflowspecsbuiltin.deploy.wfspec.* (4)Register and list workflowspecs
Packages and filesbuiltin.deploy.package.* (9)Versioned packages and their YAML files
Stages, deployments and targetingbuiltin.deploy.stage.*, deployment.*, target.*, deploy_package, undeploy_package (11)Rolling a package out to a stage and an audience
Deployment queriesbuiltin.deploy.query.* (6)Which version a user resolves to, and why
Usersbuiltin.deploy.user.* (5)User accounts
Groupsbuiltin.deploy.group.* (7)Groups and nested membership
Roles and privilegesbuiltin.deploy.auth.* (21)Stored RBAC: resources, privileges, roles, members
API keysbuiltin.deploy.apikey.* (6)The calling user's API keys
Audit logbuiltin.deploy.audit.get_logs (1)Querying deployment history