Missions, workflows and automations
| Use it for | Owned by | |
|---|---|---|
| Mission | A standing goal that needs judgment ("no Contoso deal goes quiet for ten days") | One agent |
| Workflow | Fixed steps with a person's approval where it matters | The workspace |
| Automation | When something runs: a schedule or an event | The workspace |
Time and events live only in automations. Schedules on missions and workflows still load but log a deprecation warning on apply.
Mission
# missions/pipeline-watch.yaml
slug: pipeline-watch
name: Pipeline watch
goal: No open Contoso or Acme deal goes ten days without a next step.
agent: northwind-lead
successCriteria:
- Every open deal has a dated next step.
autonomyPolicy: { level: 2 } # 1–5
A mission run plans, works, files asks and produces artifacts under review. Start one from chat, /dashboard/missions, or the MCP tool mission_start.
Workflow
# workflows/send-followup/workflow.yaml (this exact path)
slug: send-followup
name: Send follow-up
trigger: { type: manual } # manual | event | schedule (deprecated)
steps:
- { name: refresh, type: sync, sources: [hubspot] }
- { name: confirm-recipient, type: ask, prompt: Who should receive this?, outputAs: recipient }
- { name: review, type: approve, prompt: Approve the follow-up email. }
- { name: send, type: action, action: gmail.send, input: {} }
Step types: approve, ask, action, sync. Approve and ask steps put an item on Review and the run waits, durably, until someone decides. Start a run with POST /api/v1/workflows/{slug} or workflow_run_start.
Automation
# automations/weekday-check.yaml
slug: weekday-check
label: Weekday pipeline check
agent: northwind-lead
when:
schedule: '0 13 * * 1-5' # 5-field cron, UTC
do:
checkMission: pipeline-watch
prompt: List deals with no next step and file one ask per owner.
# automations/new-request.yaml
slug: new-request
when:
event: [object.created, object.updated]
filter: { objectType: deal } # matches fields of the event payload
maxFiresPer10m: 6 # default 6
do:
workflow: send-followup
when takes exactly one of schedule or event (a name or a list). do takes exactly one of workflow, checkMission or job, plus input. prompt and requireTool only go with checkMission. Post your own events with POST /api/v1/events. Pause and resume an automation from /dashboard/automations or POST /api/v1/automations/{slug}/pause.
How they run
Schedules, workflows, missions and background jobs run on a durable executor (DBOS) inside the app, in a durable schema of the app's own Postgres. There is no separate workflow server. Exactly one app process must set VOCION_SCHEDULE_OWNER=1; it fires schedules once per tick (missed ticks are not replayed) and runs housekeeping. DURABLE_EXECUTOR=off turns the executor off for a process.