Readable Schedule Types

Seven schedule types.
Visual next-run preview.
Schedules your team can read.

InTouch ships seven readable schedule types — Day, Week, Weekday, Weekend, Month/Specific Days, Month/Relative Days, Custom — with an intraday step control, an explicit daily cutoff, and a simulator that shows you the next N fire times before you flip the switch. Add timezones, blackout dates, expiration rules, and RBAC, and you have a scheduler that reads the same in six months as it did the day you wrote it.

From Schedule Riddles to Schedules That Read Like English

Schedules are where most automation systems start — and where most teams hit their first surprise. Here's what changes when scheduling stops being a syntax exercise.

From "What Does This Fire?" to Read Once, Trust It

Before: someone writes 0 9 1,15 * 1-5 at 11pm. Six months later, three people argue about whether it fires the 1st AND 15th, the 1st OR 15th of weekdays, or the 1st of the month plus weekdays.

After: pick a schedule type by its actual intent — "Month / Specific Days" with the days you want and the days-of-week filter. The setting reads the same in six months as the day you wrote it.

From Spreadsheet of Schedules to Managed Layer

Before: schedules scattered across servers, kicked off by anonymous scripts, with permissions defined by file ownership. Auditors ask "who can change the close schedule" and you answer "anyone with sudo."

After: schedule objects with owners, groups, RBAC. The Department/Enterprise editions get per-object rights, blackout dates, and explicit expiration. Whoever changed it, when, why — in the audit log.

From "Did This Fire?" to See It Before You Save

Before: deploy a schedule, wait until the next supposed fire, find out it didn't, debug for three hours.

After: the next-run simulator projects the next N fire times before you save. Tweak days, intraday step, cutoff, expiration — the projected list updates immediately. The schedule that ships is the schedule you saw.

Built Around How Business Actually Runs

Each type maps to a real scheduling intent a human can recognize without translation.

Day

Run every N days from a start date. The workhorse for nightly jobs, daily exports, every-other-day batches.

Week

Pick the days of the week by name: Monday, Wednesday, Friday. No 0-vs-1 indexing questions, no "does this shop use Sunday=0 or Sunday=7."

Weekday

Monday through Friday. "Run on weekdays" as a single setting — no cheat sheet required.

Weekend

Saturday and Sunday. For maintenance windows, heavy-batch windows, anything that only runs when humans aren't watching.

Month / Specific Days

Pick days of the month by number: 1st, 15th, 28th. Months that don't have the requested day are handled explicitly — no silent skips.

Month / Relative Days

"The last Friday of the month." "The second Tuesday." Business calendars are full of these — here they're a first-class option.

Custom

Hand-pick a list of specific dates. For holiday-driven schedules, one-off runs, or anything that doesn't fit a pattern.

Run Every N Minutes — Until You're Done for the Day

Every schedule type can repeat within each active day. Step interval in minutes or hours, with a cutoff time that marks "stop for today." When the cutoff hits, the schedule rolls to the next active day and resumes.

Example: Every 30 Minutes, Mon/Wed/Fri 08:00–17:00

Week type, days = Mon/Wed/Fri, start-time 08:00, step = 30 minutes, cutoff = 17:00. Fires 08:00, 08:30, 09:00 … 16:30, 17:00. Then nothing. Next active day (Wednesday) resumes at 08:00.

Example: Hourly During Business, Weekdays Only

Weekday type, start-time 09:00, step = 1 hour, cutoff = 18:00. Fires hourly 09:00–18:00 Mon–Fri. Doesn't fire evenings, doesn't fire weekends. A shell script doing this is twelve lines of fragile logic; here it's three form fields.

Expiration Rules

Choose never-expires, expires-on-date, or expires-after-N-runs. Useful for time-limited campaigns, cleanup jobs scheduled at install, and migration scripts that should deactivate themselves.

On-Time-Only Mode

Skip fires that arrive late because the engine was down or busy — no automatic catch-up on missed runs. Use it for schedules where a stale run is worse than no run.

See the Fires Before You Light the Match

The /schedule/test endpoint projects the next N fire times given a schedule's definition and an end date. Use it interactively — tune the days, the step, the cutoff, the expiration — until the projected dates are what you meant. Then save.

# Preview the next fires of a Week schedule: GET /schedule/test?scheduleId=42&endDate=2026-05-15 # => [ "2026-04-21T08:00:00Z", "2026-04-21T08:30:00Z", "2026-04-21T09:00:00Z", ... "2026-05-15T16:30:00Z" ]

Catch a misconfigured schedule before it ships, not at 2 a.m. when the wrong job fires.

Full Job — or a Single Tool, Skill, or YAML

A schedule in InTouch doesn't only run jobs. It can execute a single tool directly (with inline parameters), invoke a skill by name, or run a YAML job-as-code file. The object you're scheduling doesn't need to be wrapped in a job just to get a trigger.

Run a Job

A multi-step DAG with dependencies, outputs piped between steps, and full audit. The traditional path.

Run a Skill

Point at an installed MD or YAML skill by name. The schedule fires the skill with a fixed input. The AI assistant is not in the execution path — the skill's tools run deterministically.

Run a Tool Directly

One of the 42+ tools — SQL, HTTP, Anthropic, AWS — with parameters set at schedule-create time. No job wrapper, no ceremony.

Schedule Ergonomics, Honestly Benchmarked

Capability InTouch AI Windows Task Scheduler Apache Airflow
Human-readable schedule types7 types by namePartialSchedule expressions
Visual next-run previewPartial
Intraday step + cutoffPartial
Relative days ("last Friday")
Expiration rulesPartialVia DAG logic
On-time-only mode
RBAC on schedule objects✓ (Dept/Enterprise)OS permsPartial
Alerts per schedule✓ across 8 channelsEmail, limitedDAG-level
Schedule a single tool or skillDAG required

Migrate from Legacy Schedulers

The Python CLI intouch_import.py reads legacy schedule files — Linux scheduling files or Windows Task Scheduler XML exports — translates each entry into a native InTouch schedule, and (optionally) creates a runnable job that invokes the original command. Bulk migration is a one-shot script, not a months-long project.

From a Linux scheduling file

./intouch_import.py /etc/schedule-file \ --url http://localhost:2200

Every line with a timing + command becomes a schedule + a runtimeenv job. Lines with timing only become schedules you can attach to an existing job.

From Windows Task Scheduler

./intouch_import.py ./task_exports/ \ --name-prefix "migrated_"

Export tasks via schtasks /query /xml, point the CLI at the directory, get a native InTouch schedule per task.

Schedules Your Team Can Read

Download the free Personal edition and build your first schedule without touching a single asterisk.

Get Personal Edition Talk to Sales