nexu-io/open-design · error · Error
--schedule ${kind} requires :HH:MM[:TZ]
Error message
--schedule ${kind} requires :HH:MM[:TZ] What it means
Thrown by parseScheduleFlag for the `daily` or `weekdays` kind when the value does not have enough colon-separated parts to contain at least HH and MM. Format is `<kind>:HH:MM[:TZ]` (3 or 4 parts after split), so this fires when parts.length < 3.
Source
Thrown at apps/daemon/src/cli.ts:10507
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];
const time = `${hh.padStart(2, '0')}:${mm.padStart(2, '0')}`;
if (!/^[0-2]\d:[0-5]\d$/.test(time)) {
throw new Error(`--schedule ${kind} time must be HH:MM (24h)`);
}
const timezone = parts.slice(3).join(':') || 'UTC';
return { kind, time, timezone };
}
if (kind === 'weekly') {
if (parts.length < 4) {
throw new Error('--schedule weekly requires :DAY:HH:MM[:TZ] (DAY is 0-6 or sun/mon/...)');
}
const dayToken = String(parts[1]).toLowerCase();
let weekday;
if (/^[0-6]$/.test(dayToken)) {
weekday = Number(dayToken);View on GitHub (pinned to 5be4028344)
Solutions
- Provide both HH and MM: `--schedule daily:09:00` or `--schedule weekdays:17:30:America/Los_Angeles`.
- Confirm HH is 00-23 and MM is 00-59 (a separate error covers an out-of-range time).
- If you only want an hourly cadence, switch to `hourly:<minute>`.
- Re-run with --help to copy the exact grammar.
Example fix
# before od automation create --name d --prompt-file p.txt --schedule daily:09 # after od automation create --name d --prompt-file p.txt --schedule daily:09:00
Defensive patterns
Strategy: validation
Validate before calling
function parseDailyWeekdays(raw) {
const parts = String(raw).split(':');
if (parts.length < 3) {
throw new Error(`--schedule ${parts[0]} requires :HH:MM[:TZ]`);
}
const time = `${parts[1].padStart(2,'0')}:${parts[2].padStart(2,'0')}`;
if (!/^[0-2]\d:[0-5]\d$/.test(time)) {
throw new Error(`--schedule ${parts[0]} time must be HH:MM (24h)`);
}
return { kind: parts[0], time, timezone: parts.slice(3).join(':') || 'UTC' };
} Type guard
const isDailyWeekdays = (v: unknown): v is string => {
if (typeof v !== 'string') return false;
const parts = v.split(':');
if (parts.length < 3) return false;
const time = `${parts[1].padStart(2,'0')}:${parts[2].padStart(2,'0')}`;
return (parts[0] === 'daily' || parts[0] === 'weekdays') && /^[0-2]\d:[0-5]\d$/.test(time);
}; Prevention
- Provide both HH and MM: `daily:09:00` or `weekdays:17:30:America/Los_Angeles`.
- Use 24-hour notation, HH 00-23 and MM 00-59.
- Switch to `hourly:<minute>` if you only want an hourly cadence.
When it happens
Trigger: `--schedule daily:09`, `--schedule weekdays`, `--schedule daily:09:`, or `--schedule weekdays:09` — anything missing either the hour or the minute component (or both).
Common situations: User writes only the hour (`daily:09`) forgetting the minute; trailing colon with no minute (`daily:09:`); wrong kind picked by mistake (e.g. daily when hourly was intended); copy-paste from a doc that omitted the minute.
Related errors
- --schedule is required. Forms: hourly:<minute> | daily:HH:MM
- --schedule hourly requires :<minute>, 0-59
- --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/331ffe4011c745dc.
Report an issue: GitHub.