Skip to content

Schedule a workflow to run daily

Machine verified A machine ran this on our install and checked the result against the CLI. A test report is linked. CLI 0.3.1, checked 2026-10-15.

Can I put a workflow on a daily schedule?

Give a workflow a daily schedule and switch it on from the terminal. Nothing runs on a timer until you activate it, and the schedule is witnessed.

What you get: a workflow put on a daily schedule and switched on, so it runs on its own. This covers the scheduling and activation; the work the workflow does is a step you define (here it just logs a line).

A workflow is created, validated, then its schedule is activated. Nothing fires on a timer until you activate it, and once you do, each run it makes is a receipt you can read back. That whole arc is one combo, and the conversation below drove all of it.

Ask in plain words, naming the schedule you want:

quox · talking to Quox

Set up a recurring job for me. Create a workflow called nightly-backup-2ac801 that runs on a daily schedule at 02:30 UTC, with a single step that logs a line each run. Then check it validates cleanly, then tell me when a daily schedule would next run it, then activate it so it is live, and finally confirm back to me that it is active. Do not run it yourself, just set it up.

▤ AOCL │ L1 identity complete · allowed · 1ms

▤ AOCL │ L3 policy gate complete · proceed · 2ms

◐ CREATE │ create_workflow name=nightly-backup-2ac801 ✔ CREATE │ create_workflow name=nightly-backup-2ac801 │ Created workflow "nightly-backup-2ac801" (wf-1792257917696-4gf0yo) · 1.9s

◐ VALIDATE │ workflow ✔ VALIDATE │ workflow │ valid: true, 0 errors, 0 warnings · 1.9s

◐ ACTIVATE │ workflow ✔ ACTIVATE │ workflow │ Activated workflow wf-1792257917696-4gf0yo · 1.7s

◐ LIST │ schedules ✔ LIST │ schedules │ registered: true, 1 count, 1 schedules · 1.5s

◐ GET │ workflow ✔ GET │ workflow │ matched: false, 2 top keys · 2.8s

◐ GET │ workflow ✔ GET │ workflow │ true · 1.1s

⛓ AEE │ envelope opened · stream_success

 nightly-backup-2ac801  (ID  wf-1792257917696-4gf0yo ) is set up and active. I haven't
run it.

• Created: It has a schedule trigger on  30 2 * * *  in UTC, followed by one step that
  logs a line each run.
• Validation: It came back valid, with no errors or warnings.
• Next run: The scheduler has the schedule registered and active. It will first fire on
  Sunday 18 October 2026 at 02:30 UTC, about nine hours from now.
• Active: Activation registered one trigger, and I read the workflow back to confirm its
  active flag is true.

31.0s · 6 tools · 0 approvals

A real turn on our own install (CLI 0.3.0, 17 Oct 2026), replayed at speed. Names changed. Type the same words into quox.
✔ Machine verified against the CLI on 17 Oct 2026 · test report mvco2y

In one turn, Quox created the workflow with a daily schedule trigger, validated it, worked out when a daily schedule would next fire, activated it, and confirmed that one schedule trigger was registered and the workflow was live. The badge on that turn is not our word for it: the same five-step journey was run by the proof engine on a fresh install from main, and it only earns the badge when the engine confirms the material end-state, that a schedule is actually registered, not just that Quox said the word “active”.

Notice the last line of the answer. The workflow’s only step is a log line, so Quox says plainly that it “doesn’t back anything up yet” and offers to swap in real work. That is the honest shape of the capability: the scheduling and activation are real and proven, and the step is yours to fill in. This is a recurring job, not a backup, until you give it something to do.

The conversation above is the easy path. Here is the same combo by hand, so you can see every step. These commands and their output are from a real run on our own install.

Describe the workflow in a file: a daily schedule trigger and one step. Swap the log step for your real work when you are ready.

nightly-job.json
{"name": "nightly-job","description": "Daily 02:30 UTC job","nodes": [  { "id": "trigger", "type": "trigger:schedule", "name": "Daily 02:30 UTC", "config": { "expression": "30 2 * * *", "timezone": "UTC" } },  { "id": "log-1", "type": "util:log", "name": "Log run", "config": { "message": "nightly-job ran" } }],"edges": [ { "source": "trigger", "target": "log-1" } ]}
create the workflow from the file
quox workflow apply -f nightly-job.jsonⓆ QUOX │ workflow created │ nightly-job (quoxflow) id:wf-… ✔id       wf-…name     nightly-job
Real output, id abbreviated.

apply creates the workflow when the file has no id. It lives in the quoxflow engine store, so it goes live with trigger workflow-activate, not workflow publish.

check it is well-formed
quox workflow validate wf-…valid              yeserrors             []warnings           []unknownNodeTypes   []
A scheduled workflow validates with no warnings.

This is the moment it starts running on its timer, and not before.

register the schedule trigger
quox trigger workflow-activate wf-…Ⓠ QUOX │ workflow activated │ wf-… · 1 trigger(s) ✔active               yestriggersRegistered   1
Real output.

The registered schedule shows up in the scheduler’s own record, with the next time it will fire.

see the live schedule
quox trigger schedulesWorkflow   Node      Cron          Timezone   Next Fire                   Activewf-…       trigger   30 2 * * *    UTC        2026-10-16T02:30:00.000Z    yes
Real output, one row.

Quox built and scheduled a real recurring job by calling its governed workflow tools, not by guessing. The schedule only became live at the step you ran, never before, and the triggersRegistered count and the trigger schedules row are the proof it is really registered, not just claimed. The job will fire on its own at the next scheduled time.

quox trigger schedules and quox workflow get <id> are read-only and raise no approval. Confirm the cron and the next fire time match what you set. If the schedule is not listed, it is not live, no matter what anything said.

Stop it running without deleting it: quox trigger workflow-deactivate <id> unregisters the schedule and the workflow stays. Remove it entirely with quox workflow delete <id>.