nexu-io/open-design · error · Error
--schedule is required. Forms: hourly:<minute> | daily:HH:MM
Error message
--schedule is required. Forms: hourly:<minute> | daily:HH:MM[:TZ] | weekdays:HH:MM[:TZ] | weekly:DAY:HH:MM[:TZ]
What it means
Thrown by parseScheduleFlag when the --schedule value is missing (null/undefined), empty, or not a string. parseScheduleFlag backs `od automation create` and `od automation update` for the --schedule flag, which is required for scheduled automations. The message lists every accepted form.
Source
Thrown at apps/daemon/src/cli.ts:10492
console.log(`verifyEnabled ${formatMemoryConfigSwitch(data.verifyEnabled)}`);
return;
}
// ---------------------------------------------------------------------------
// Subcommand: od automation …
//
// Headless surface for the Automations tab. This is the dual-track contract:
// every capability the Automations UI exposes is reachable here so an
// external agent (hermes-agent, openclaw, custom Slackbot, etc.) can run
// the full lifecycle — list, create, fire, harvest, retire — without
// rendering a page. Storage is /api/routines on the local daemon; the
// "routine" name is the implementation detail, "automation" is the user-
// facing surface.
// ---------------------------------------------------------------------------
function parseScheduleFlag(raw) {
if (!raw || typeof raw !== 'string') {
throw new Error(
'--schedule is required. Forms: hourly:<minute> | daily:HH:MM[:TZ] | weekdays:HH:MM[:TZ] | weekly:DAY:HH:MM[:TZ]',
);
}
const parts = raw.split(':');
const kind = parts[0];
if (kind === 'hourly') {
const minute = Number(parts[1]);
if (!Number.isInteger(minute) || minute < 0 || minute > 59) {
throw new Error('--schedule hourly requires :<minute>, 0-59');
}
return { kind: 'hourly', minute };
}
if (kind === 'daily' || kind === 'weekdays') {
if (parts.length < 3) {
throw new Error(`--schedule ${kind} requires :HH:MM[:TZ]`);
}
const hh = parts[1];
const mm = parts[2];View on GitHub (pinned to 5be4028344)
Solutions
- Provide --schedule with one of the documented forms: hourly:<minute>, daily:HH:MM[:TZ], weekdays:HH:MM[:TZ], weekly:DAY:HH:MM[:TZ].
- If you want a non-scheduled (trigger-only) automation, omit --schedule entirely rather than passing an empty value.
- Validate the schedule string in your wrapper script before invoking od.
- Use `od automation create --help` to see the schedule grammar examples.
Example fix
# before od automation create --name daily --prompt-file p.txt --schedule # after od automation create --name daily --prompt-file p.txt --schedule daily:09:00:America/New_York
Defensive patterns
Strategy: validation
Validate before calling
const SCHEDULE_RE = /^(hourly:\d{1,2}|daily:\d{1,2}:\d{2}(:[^:]+)?|weekdays:\d{1,2}:\d{2}(:[^:]+)?|weekly:[0-6a-z]{3}:\d{1,2}:\d{2}(:[^:]+)?)$/;
if (!SCHEDULE_RE.test(String(rawSchedule))) {
throw new Error('--schedule is required. Forms: hourly:<minute> | daily:HH:MM[:TZ] | weekdays:HH:MM[:TZ] | weekly:DAY:HH:MM[:TZ]');
} Type guard
const isScheduleString = (v: unknown): v is string => typeof v === 'string' && /^(hourly:|daily:|weekdays:|weekly:)/.test(v);
Prevention
- Pass --schedule with one of the four documented forms.
- For trigger-only automations, omit --schedule entirely.
- Validate the schedule string in wrapper scripts before invoking od.
When it happens
Trigger: Creating or updating an automation with `--schedule` omitted, set to empty (`--schedule=`), or with no value at all when --schedule is a string flag. Also when the caller passes `--schedule` expecting a default.
Common situations: Building a scheduled automation but forgetting --schedule; copy-pasting a command that previously used a trigger-only automation; a wrapper script that conditionally passes --schedule and the condition evaluated false.
Related errors
- --schedule hourly requires :<minute>, 0-59
- --schedule ${kind} requires :HH:MM[:TZ]
- --schedule ${kind} time must be HH:MM (24h)
- --schedule weekly requires :DAY:HH:MM[:TZ] (DAY is 0-6 or su
- --schedule weekly day must be 0-6 or sun..sat (got "${parts[
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/ed3b81574300e93f.
Report an issue: GitHub.