Schedule a workflow to run daily
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).
The shape of it, in one line
Section titled “The shape of it, in one 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 Quox
Section titled “Ask Quox”Ask in plain words, naming the schedule you want:
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
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.
Do it yourself
Section titled “Do it yourself”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.
1. Author it
Section titled “1. Author it”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.
{"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" } ]} 2. Apply it
Section titled “2. Apply it”quox workflow apply -f nightly-job.jsonⓆ QUOX │ workflow created │ nightly-job (quoxflow) id:wf-… ✔id wf-…name nightly-job 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.
3. Validate it
Section titled “3. Validate it”quox workflow validate wf-…valid yeserrors []warnings []unknownNodeTypes [] 4. Activate its schedule
Section titled “4. Activate its schedule”This is the moment it starts running on its timer, and not before.
quox trigger workflow-activate wf-…Ⓠ QUOX │ workflow activated │ wf-… · 1 trigger(s) ✔active yestriggersRegistered 1 5. Confirm it is live
Section titled “5. Confirm it is live”The registered schedule shows up in the scheduler’s own record, with the next time it will fire.
quox trigger schedulesWorkflow Node Cron Timezone Next Fire Activewf-… trigger 30 2 * * * UTC 2026-10-16T02:30:00.000Z yes What just happened
Section titled “What just happened”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.
Check it yourself
Section titled “Check it yourself”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>.
- See and run your workflows
- Approvals and receipts for the evidence each run leaves