Skip to content

CLI and daemon

The CLI manages the same schedule store the desktop and server read, and it can run the scheduler loop itself. You can run it on a laptop, a utility host, or inside a container.

Terminal window
flow schedule list # show every schedule
flow schedule add my-flow --frequency daily # daily at "now" (UTC)
flow schedule add my-flow --frequency cron --cron "0 9 * * 1-5"
flow schedule add my-flow --frequency every_n_minutes --every-minutes 15
flow schedule rm my-flow # remove a schedule
flow schedule daemon # run the scheduler loop here
FlagValuesDefault
--frequencyhourly / daily / weekly / monthly / yearly / cron / every_n_minutes / oncerequired
--startRFC3339 anchor instantnow
--timezoneIANA timezone nameUTC
--cron5/6-field cron expressionwith --frequency cron
--every-minutesinterval in minuteswith --frequency every_n_minutes
--catchupskip / run-once / run-allrun-once

Schedules attach to saved-template slugs, so save the flow as a template first (flow template save, or from the desktop).

flow schedule daemon runs the same scheduler loop the desktop and server run in-process:

  • Polls on the settings interval for due schedules.
  • Fires each due flow with the destructive-confirm gate off (headless).
  • Records every run to the shared history with the scheduled trigger.
  • Respects catch-up policies for windows missed while the daemon was down.

Because the store is shared, a schedule created on the desktop can be served by a daemon on the same data directory. Runs fired by the daemon appear in the desktop’s History and Schedules views.

  • Utility host. Install the CLI, point FLOW_STUDIO_DIR at the shared data directory, and run flow schedule daemon under your service manager. Schedules keep firing with no desktop session.
  • Flow Server instance. You do not need a daemon here. The instance runs the scheduler loop itself, so browser-managed schedules fire server-side.
  • Local model note. A scheduled flow with local ai nodes auto-starts the managed model server on the daemon’s host. You can disable this with --no-auto-llm semantics on runs. Size the host accordingly, or keep scheduled flows deterministic.