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_namecaptures andoutput_datatransforms. - 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.requesttakesencrypted_auth_token— the still-encrypted blob frombuiltin.secret.get— rather than a secret name.graphql.subscribe,websocket.subscribeandmcp.call_toolauthenticate with a plainheadersdict, 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 throughtoken_secret_keyandclient_key_secret_keyas usual, but also accepts an inlineca_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:
| Activity | Delivers |
|---|---|
kafka.consume | Each Kafka message |
rabbit.receive | Each RabbitMQ message |
graphql.subscribe | Each subscription payload |
websocket.subscribe | Each inbound frame |
mcp.call_tool | Each progress notification |
claude_agent.query | Agent 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
| Provider | Activities | What it's for |
|---|---|---|
| Built-in Core | 3 | Clock, delay, and running a workflow inside an activity |
| State Store | 8 | Durable key/value storage that outlives a run |
| Secrets | 4 | The secret store behind every *_secret_key field |
| Events & Metrics | 2 | Debug events and metrics for observability |
| HTTP | 1 | Calling any HTTP service |
| Shell | 1 | Running a command on the worker |
| SQL | 2 | Parameterized queries and writes against PostgreSQL |
| 1 | Sending mail over SMTP | |
| Google Drive | 6 | Reading and writing Drive files |
| Kubernetes | 8 | Applying, inspecting and operating cluster resources |
| Kafka | 2 | Publishing to and consuming from Kafka |
| RabbitMQ | 2 | Publishing to and subscribing to RabbitMQ |
| GraphQL | 1 | GraphQL subscriptions |
| WebSocket | 1 | Generic WebSocket feeds |
| MCP | 1 | Calling a remote MCP server's tools |
| OpenAI | 1 | Chat completions against any OpenAI-compatible endpoint |
| Claude Agent | 1 | An autonomous agent loop with granted tools |
| LlamaIndex | 7 | Building and querying a vector index — RAG |
| Langfuse | 2 | Online and offline LLM evaluation |
| Playwright | 26 | Browser automation |
| Selenium | 23 | Browser automation via WebDriver |
| Authorization | 4 | Evaluating authorization policy from a workflow |
| Deployment & Admin | 75 | The control plane: namespaces, packages, deployments, users, RBAC |
All activity types
Built-in core
| Activity | Description |
|---|---|
builtin.now | Current timestamp on the worker |
builtin.delay | Pause for a duration |
builtin.execute_workflow | Run a whole workflow in memory inside one activity |
State store
| Activity | Description |
|---|---|
builtin.state.set_state | Write a value |
builtin.state.get_state | Read a value |
builtin.state.get_state_with_ts | Read a value with its last-update time |
builtin.state.del_state | Delete one entry |
builtin.state.list_states | List keys in a namespace, filtered and paged |
builtin.state.list_namespaces | List namespaces holding data |
builtin.state.update_topic | Retag an entry without rewriting it |
builtin.state.delete_by_topic | Delete every entry matching a topic pattern |
Secrets
| Activity | Description |
|---|---|
builtin.secret.upload | Store an encrypted secret |
builtin.secret.get | Fetch a secret, still encrypted and short-lived |
builtin.secret.list | List secret names |
builtin.secret.delete | Remove a secret |
Events and metrics
| Activity | Description |
|---|---|
builtin.event.emit_debug_event | Publish a debug event, streamed live to the client |
builtin.event.emit_metric_event | Publish a metric to Kafka |
HTTP, shell, SQL and email
| Activity | Description |
|---|---|
http.request | Make an HTTP request |
shell.run | Execute a command on the worker |
sql.query | Run a SELECT and return the rows |
sql.execute | Run a write or DDL statement |
email.send | Send an email over SMTP |
Google Drive
| Activity | Description |
|---|---|
gdrive.list | List files, by folder, name or Drive query |
gdrive.download | Download a file, inline or to disk |
gdrive.upload | Upload or replace a file |
gdrive.get_metadata | Read one file's metadata |
gdrive.create_folder | Create a folder, optionally reusing an existing one |
gdrive.delete | Trash or permanently delete a file |
Kubernetes
| Activity | Description |
|---|---|
k8s.apply | Server-side apply one or more manifests |
k8s.get | Fetch a single resource |
k8s.list | List resources by label or field selector |
k8s.delete | Delete a resource, or a set of them |
k8s.scale | Set a workload's replica count |
k8s.logs | Read a bounded tail of a pod's log |
k8s.wait | Poll until a condition holds, or the resource is gone |
k8s.exec | Run a command in a container |
Messaging and streaming
| Activity | Description |
|---|---|
kafka.publish | Publish messages to a Kafka topic |
kafka.consume | Consume a topic, relaying each message as an event |
rabbit.publish | Publish a message to a RabbitMQ topic |
rabbit.receive | Subscribe to a topic, relaying each message as an event |
graphql.subscribe | Hold a GraphQL subscription, relaying each payload |
websocket.subscribe | Hold a WebSocket connection, relaying each frame |
mcp.call_tool | Call a remote MCP tool, relaying its progress |
AI
| Activity | Description |
|---|---|
openai.chat.completions | One chat completion, with tools and structured output |
claude_agent.query | An autonomous multi-turn agent loop |
llama_index.index_web | Index a list of URLs |
llama_index.index_site | Index a site from one seed — sitemap, feed or crawl |
llama_index.index_github | Index a GitHub repository |
llama_index.index_gdrive | Index a Google Drive folder or file list |
llama_index.index_files | Index files on the worker's disk |
llama_index.index_docs | Deprecated — use llama_index.index_web |
llama_index.query | Semantic search, retrieving chunks or synthesizing an answer |
langfuse.run_experiment | Offline evaluation over a Langfuse dataset |
langfuse.create_score | Attach scores to the running workflow's trace |
Browser automation — Playwright
Browser automation — Selenium
| Activity | Description |
|---|---|
selenium.browser.create | Launch Chrome and get a session id |
selenium.browser.close | Close the session |
selenium.browser.get_info | Report on a live session |
selenium.nav.goto | Navigate to a URL |
selenium.nav.back | Go back in history |
selenium.nav.forward | Go forward in history |
selenium.nav.refresh | Reload the page |
selenium.element.click | Click an element |
selenium.element.type | Type text into an element |
selenium.element.clear | Empty an input |
selenium.element.find | Find one or many elements |
selenium.element.get_text | Read an element's text |
selenium.element.get_attribute | Read an HTML attribute |
selenium.element.get_property | Read a live DOM property |
selenium.element.is_visible | Whether an element is visible |
selenium.element.is_enabled | Whether an element is enabled |
selenium.page.get_html | Get the rendered page source |
selenium.page.get_title | Get the page title |
selenium.page.get_url | Get the current URL |
selenium.page.screenshot | Capture the page or one element |
selenium.page.execute_script | Run JavaScript in the page |
selenium.wait.element | Wait for an element condition |
selenium.wait.time | Wait a fixed time |
Authorization
| Activity | Description |
|---|---|
authz.list_resources | List resources that have policies |
authz.get_resource_policy | Fetch a resource's policy |
authz.check_privilege | Evaluate whether the caller may perform an action |
authz.impersonate_user | Obtain an identity for another user |
Deployment and administration
Seventy-five activities, documented by family on the Deployment & Admin page.
| Family | Activities | Covers |
|---|---|---|
| Namespaces | builtin.deploy.namespace.* (5) | Create, read and delete namespaces |
| Workflowspecs | builtin.deploy.wfspec.* (4) | Register and list workflowspecs |
| Packages and files | builtin.deploy.package.* (9) | Versioned packages and their YAML files |
| Stages, deployments and targeting | builtin.deploy.stage.*, deployment.*, target.*, deploy_package, undeploy_package (11) | Rolling a package out to a stage and an audience |
| Deployment queries | builtin.deploy.query.* (6) | Which version a user resolves to, and why |
| Users | builtin.deploy.user.* (5) | User accounts |
| Groups | builtin.deploy.group.* (7) | Groups and nested membership |
| Roles and privileges | builtin.deploy.auth.* (21) | Stored RBAC: resources, privileges, roles, members |
| API keys | builtin.deploy.apikey.* (6) | The calling user's API keys |
| Audit log | builtin.deploy.audit.get_logs (1) | Querying deployment history |