Automations
Beyond conversations, the platform can run automations (workflows) — multi-step processes like "fetch listings, score them, email the matches" that run on a schedule or on demand. Automation definitions are platform-authored today (there is no self-serve definition-authoring endpoint); this chapter exists so the shapes you see in run output make sense, and so operator tooling is documented.
Run history for your apps' automations is visible in the dashboard
(permission view_workflow_runs).
A definition's schedule is an ordered list of named steps, each with
a task type. Established task types include
httpRequest, sendEmail, sendSMS,
workflow_bedrock (LLM step), data-shaping tasks
(mapData, filterData,
aggregateData, …) and control tasks
(conditionalBranch, parallel,
iterateArray, wait,
invokeWorkflow).
compute runs a curated
deterministic operation from a platform-owned registry — pure
functions with no ambient authority, used where a pipeline needs exact,
auditable logic rather than an LLM step (parsing, geometric evaluation,
dedupe, delivery routing). Step shape:
args values support {{workflowInput.*}} and
{{$.step.taskResult.*}} references, resolved against the
run's state. Unknown op names fail the step loudly with the
known-op list. Compute steps bill at the standard integration step rate
(default 5 credits per step; automation step rates are
operator-adjustable, so treat the numbers quoted here as defaults rather
than fixed prices).
{ "name": "geo", "task": "compute",
"input": { "op": "geoEvaluate", "args": { "listings": "{{$.parse.taskResult.listings}}" } } }One registry op, taughtStep, runs an
operator-taught calculation stored on an app — small
pure functions (for example a custom result-scoring rule) taught in
plain language through the platform's teaching assistant, which drafts
the code.
The trust model is deliberate:
- A taught step always lands as a draft and a draft never executes — pipelines treat it as absent.
- Approval is an explicit act: in the dashboard (Settings → Skills → Taught calculations, where the exact code is displayed for review) or via the teaching assistant's confirm-gated approve step. Re-teaching an approved step demotes it back to draft.
- Code is validated against a strict deny-list (no imports, no process/network/filesystem access, no async, no prototype access) both when drafted and again at execution — a step that fails validation will not run regardless of how it entered the configuration.
- Execution is fully isolated: a locked-down context exposing only
MathandJSON, with a copied input, a hard 1-second timeout and a bounded output size. - In a pipeline,
taughtStepfails open: if the referenced step is missing, unapproved or errors, the step's input passes through untouched and the run continues. A broken taught calculation degrades a pipeline; it never breaks one.
Taught steps live in the app's configuration (visible under
voiceChatTools.computeSteps in
GET /apps/{appId} responses) with name,
description, code, status
(draft/approved) and approval timestamps.