← Blog

September 14, 2026 · 19 min read

Schedule AI Agents: Every Monday at 09:00, a Fresh Run

To schedule AI agents, give a mission a cron: every Monday at 09:00 UTC it spawns a fresh, independent run. How due runs, pausing and run-now really work.

0 likes

The most useful research an AI team does is not the one-off. It is the Monday brief, the weekly sweep, the report that is only worth anything because it is done again next week. To schedule AI agents for that kind of work, the schedule has to be part of the mission — not a reminder for you to type the same request again.

A chat window has no idea it is Monday. So "every week" usually becomes a calendar reminder and a saved prompt pasted on the mornings someone remembers. This post is about giving the work itself a clock — and what has to be true for that clock to be trusted.

The short answer

In Xorviex, a schedule is a cron expression attached to a mission. 0 9 * * 1 means every Monday at 09:00 UTC. That mission becomes a template: every time the schedule comes due, it spawns a fresh, independent mission with the same title, goal, category and scope, which plans its own agents and gets audited like any other. You can ask for it in Command Chat or build it on the Recurring page, pause and resume it, and fire it once off-schedule without moving the schedule itself.

Mon 09:00 · 01

The valuable work is the work you would do again.

Look at what teams actually hand to AI agents once the novelty wears off, and a pattern shows up. The first run of anything is a demo. The fifth run is where the value is, because by then the output is something people plan around:

  • A weekly mentions brief. What the news and social media said about you in the last seven days, grouped into themes, posted where the team reads it.
  • A Monday pipeline summary. The same questions asked of the same systems every week, so this week can be compared with last week.
  • A daily digest. The handful of sources someone on the team skims every morning, read for them before they sit down.
  • An hourly check. Something small that should be looked at often and is never worth a person's attention unless it changed.

None of those is hard to ask for once. The hard part is the again: a request that depends on someone remembering quietly stops the first week they are busy — and nothing tells you.

Mon 09:00 · 02

A schedule is a sentence, then five fields.

Nobody wants to write cron. People say "every Monday at nine", "every weekday morning", "on the first of the month". That sentence is the right interface, and it is what you can type into Command Chat: its create_mission tool accepts a schedule, so "run this every Monday at 9" works as a request.

Underneath, the sentence has to become something a machine will evaluate the same way every time. That is a standard five-field cron expression, and it is worth being able to read one, because it is the part that actually decides when your agents run:

Figure 1 · reading 0 9 * * 1

0minuteon the hour
9hour09 UTC
*day of monthany
*monthany
1weekdayMonday

Every Monday at 09:00 UTCshown beside it: 12:00 your time, for a reader in UTC+3

On the Recurring page you rarely touch the fields directly. The schedule builder offers the shapes people ask for — every day, every weekday (Mon–Fri), every week, every month, every hour — with a time, and a custom cron escape hatch for everything else. Whatever you build is read back to you in plain language, next to the raw expression, so the sentence you meant and the schedule you saved can be compared at a glance.

If an expression has a shape the reader doesn't recognise, it shows the raw cron instead of guessing. A wrong sentence about a schedule is worse than none, because you would believe it.

Mon 09:00 · 03

Why the clock says UTC.

Every scheduled mission in Xorviex is evaluated in UTC, and every surface that shows a schedule labels its times as UTC rather than rendering a local-looking clock the schedule doesn't keep. That can feel less friendly than showing your own time zone. It is also the only version that can't lie to you.

Consider what "helpfully" converting would do. You are in UTC+3 and ask for "every Monday at 01:00". Converted to the server's clock, that is Sunday at 22:00. A builder that quietly converted your time would store a schedule whose weekday is different from the one you picked, and every plain-language reading of it would be wrong in one direction or the other. So the builder states its time zone instead, and shows the local equivalent underneath — "12:00 your time" beside "09:00 UTC" — as a hint, not as the thing being saved.

The same goes for daylight saving: a schedule at 09:00 UTC fires at 09:00 UTC all year, so on a local clock that shifts twice a year it will appear to move by an hour.

Mon 09:00 · 04

A template that spawns runs, not an agent that loops.

The naive way to make an agent recurring is to keep one agent alive and wake it on a timer. It goes wrong slowly: a long-lived agent accumulates last week's context, assumptions and failures, and six weeks in nobody can say what the Monday brief is based on.

Xorviex does the opposite. A mission with a schedule is a template. It doesn't run agents on every fire. Each time the schedule comes due, it spawns a brand-new child mission that is independent of every run before it:

  • Copied from the template: the title, the goal, the category, and the scope level the operator chose, so a scheduled run can't silently grow or shrink to a default budget.
  • Its own everything else: the child goes through the ordinary path — spawning, a fresh plan of agents for that goal, its own supervisor audits, its own logs and deliverables.
  • Pointing back: each run records which template it came from, which is how the Recurring page can show a template's run count and its latest outcomes.
  • Never recurring itself: a spawned run can't be given a schedule of its own. If it could, every fire would create another self-scheduling mission.

Figure 2 · one template, many independent runs (illustrative dates)

Weekly mentions briefEvery Monday at 09:00 UTC · 0 9 * * 1template
  1. Mon 24 Aug
    Fresh missionresolved
  2. Mon 31 Aug
    No runpaused
  3. Wed 02 Sep
    Resumedone catch-up run
  4. Mon 07 Sep
    Fresh missionresolved
  5. Thu 10 Sep
    Run nowschedule unchanged
  6. Mon 14 Sep
    Fresh missionrunning

Every card is its own mission with its own agents and audits. The paused week produced nothing, resuming fired one catch-up run rather than one per missed week, and the manual run on Thursday didn't move Monday.

A schedule is a template: every time it fires, a fresh, independent mission starts with the same goal and scope.
A template holds the goal and the clock. The work happens in the runs it spawns.

Mon 09:00 · 05

Never skipped, never doubled.

A schedule is only trustworthy if two things are true: every due run happens, and no due run happens twice. Both are easy to get wrong in the obvious implementation, which checks "is it exactly 09:00 right now?" on every tick.

The problem is that no background sweep lands on the exact minute. If the check runs at 08:59:50 and then at 09:00:50, a strict "is it this minute" test can miss the fire entirely. Make the window generous to compensate, and a slow sweep or a restart can match the same minute twice.

So Xorviex doesn't ask whether this is the cron tick. For every active template, it asks: starting from the last time this template fired (or from when it was created, if it never has), has the next scheduled time already passed? If yes, the template is due. A sweep that runs a little late still sees the fire as due; a sweep that runs early simply finds nothing due yet.

One Monday, as the sweep sees it

  1. 08:59:52 UTC

    Sweep. Last fire was Monday a week ago; next scheduled time is 09:00:00. Not passed yet — nothing to do.

  2. 09:00:41 UTC

    Sweep. 09:00:00 has passed. Due. Two workers pick the template up within milliseconds of each other.

  3. 09:00:41 UTC

    Both try to claim the fire: "set last fired to now, only if last fired is still what I read". One update matches a row. The other matches nothing.

  4. 09:00:41 UTC

    The winner creates the child mission and starts spawning its agents. The loser skips it. One run, one bill.

  5. 09:01:40 UTC

    Sweep. Last fire is now 09:00:41 today; the next scheduled time is next Monday. Nothing to do for a week.

That claim matters because several processes run the sweep; without it, one template picked up twice would produce two identical missions and twice the operation units.

The same anchoring explains what happens after a pause. A schedule that missed Mondays while paused is already due when you resume it, so the next sweep fires it once — not once per missed week. That fire becomes the new anchor, and the following Monday is simply the next one.

Mon 09:00 · 06

When a run can't start.

Two things can stop a due run from starting on the minute. Both are handled by making the reason visible rather than by quietly dropping the work.

The plan's concurrency limit is full

If your plan caps how many missions can run at once and that cap is already reached when a schedule comes due, the run is held, not dropped. The sweep doesn't claim the fire, so the template stays due, and the next sweep starts the run as soon as a slot frees up. Your Monday brief may arrive a little later than 09:00; it does not silently skip a week because Monday was busy.

The expression doesn't parse

A schedule that can no longer be evaluated would otherwise throw an error on every sweep, forever. Instead, the sweep pauses it. On the Recurring page it is marked Invalid schedule, and its next run reads "Never — expression doesn't parse". That wording is intentionally different from a normal pause — "Paused — nothing scheduled" — because the two problems have different fixes: one needs a click on Resume, the other needs the expression corrected first. Saving a schedule that doesn't parse is refused up front, so in practice this is a safety net rather than something you hit.

Mon 09:00 · 07

Pause, resume, run now.

A schedule you can't see is a schedule you can't stop. The Recurring page lists every schedule in the workspace — including paused ones — with a summary bar of active schedules, paused schedules, runs spawned, and the time until the next run. Each row shows the schedule in words and as cron, the next and last run, runs spawned, and its most recent runs with their outcomes. Its controls each do one thing:

  • Run now spawns one run immediately, off-schedule. It works on a paused schedule too, which is how you try a change once before resuming. Crucially, it doesn't move the schedule's anchor: a manual run is an extra run, not a rescheduling, so next Monday still fires on time.
  • Pause / Resume turns the schedule off and on without discarding the expression. Nothing fires while it is paused, and the row stays on the page.
  • Edit changes the expression. Editing a paused schedule leaves it paused — changing when something should run is not a request to start running it.
  • Unschedule removes the expression. The template mission and every run it already spawned stay exactly where they are, which is why it is not a delete button.

Creating a schedule works the same way from the page or from Command Chat, and both say the same thing about it: the first run starts immediately, and the schedule takes over from there. You see the output of the work you just described today, rather than waiting until next Monday to find out whether the goal was worded well.

A weekly schedule, every Monday at 09:00 UTC, with three of its runs listed as separate missions: two resolved, one running.
One schedule and three of its runs, each its own mission. Illustrative values.

Mon 09:00 · 08

What a schedule costs.

A schedule costs nothing by itself. Its runs cost what any mission costs, in operation units (OU), and they are charged to the person who created the schedule — a scheduled run is billed to that user's own quota, not to a shared pool. A manual Run now is billed to whoever pressed the button.

The biggest lever on that cost is the scope level. Before Command Chat creates a mission, it asks how extensive the work should be, with five options written for your request, and says plainly that a higher level does more work and uses more OU. For a scheduled mission, that answer applies to every run: a level-2 weekly brief is a level-2 brief every Monday. That is worth thinking about once, because a choice made for a single run gets multiplied by every week the schedule is active.

Frequency is the other lever: "every hour" is 168 runs a week, and many hourly-feeling checks are really daily questions.

Mon 09:00 · 09

What a schedule doesn't do.

  • It is time-based. A schedule fires on the clock. It is not an event trigger, so "whenever a new lead arrives" is a different kind of automation from "every Monday at 09:00".
  • Runs don't share memory. Agents inside one mission read each other's findings; separate runs of a schedule don't. What does carry across is what an agent explicitly records: measurements saved to the workspace's measurement history outlive the mission that took them, so a later run can report a number as rising, falling or flat — and says there isn't enough history yet rather than inventing a trend from one reading.
  • It evaluates in UTC only. There is no per-schedule time zone, so a local-time habit that shifts with daylight saving has to be accounted for when you pick the hour.
  • It can't act on what isn't connected. A run that should post its brief to Slack can only do that if the workspace has connected Slack; agents only get write tools for integrations that are actually connected.

Mon 09:00 · 10

How to schedule AI agents in Xorviex.

Put together, setting up the weekly mentions brief looks like this:

  1. Say it. In Command Chat: "Every Monday at 9 UTC, find what the news and social media said about us this week, summarise the themes and post the brief to #marketing." Or open the Recurring page, choose New schedule, write the title and goal, and pick Every week · Monday · 09:00 UTC.
  2. Size it once. Answer the scope question. The level you choose is the budget of every run.
  3. Watch the first run. It starts immediately. The planner builds the team the goal needs, the agents search, write and — if Slack is connected — post, and a separate supervisor AI audits the output before the mission completes.
  4. Let the clock take over. From next Monday, each fire spawns a fresh mission from the template, claimed exactly once, held if your plan's concurrency is full, and listed on the Recurring page with its outcome.
  5. Steer without rebuilding. Pause it for a holiday week, run it now after changing the goal, edit the hour, or unschedule it while keeping every brief it already produced.

questions

Frequently asked questions.

How do I schedule an AI agent to run every week?

Give the mission a schedule rather than scheduling a reminder for yourself. In Xorviex you can ask Command Chat for "every Monday at 9", or use the Recurring page's schedule builder and choose every week, a weekday and a time. Either way the mission becomes a template, the first run starts right away, and every following Monday spawns a fresh run.

What time zone do scheduled AI agents use?

UTC. Every schedule is stored and evaluated in UTC and labelled that way, with your local equivalent shown beside it as a hint. Converting silently would be unsafe: for anyone far enough east or west, a local time can land on a different weekday in UTC.

Does each scheduled run remember the previous one?

No. Each run is an independent mission with its own plan, agents and audits, which keeps one week's errors from leaking into the next. Measurements an agent records deliberately are kept in the workspace's history, so later runs can compare against them.

What happens if the previous run is still going when the next one is due?

The next run starts as its own mission anyway — runs are independent. The exception is your plan's concurrent-mission limit: if starting it would exceed that limit, the run is held and starts when a slot frees, rather than being dropped.

Can I run a scheduled mission right now without changing its schedule?

Yes. Run now spawns one extra run immediately, even on a paused schedule, and deliberately leaves the schedule's timing untouched, so the next regular run still happens when it was going to.

How much does a recurring AI agent cost?

Each run costs operation units like any mission, at the scope level chosen for the schedule, charged to the user who created it. The total is that per-run cost times how often the schedule fires, which is why choosing daily instead of hourly matters more than any other setting.

the difference

The difference, in one table.

A saved prompt and a reminder

  • Runs only when someone remembers
  • A missed week leaves no trace
  • The same chat accumulates old context
  • Two people can run it twice
  • No record of what each run cost or produced

A scheduled mission

  • Fires on a cron, evaluated in UTC
  • Held when it can't start, paused when it can't parse
  • Every run is a fresh, audited mission
  • Each fire is claimed exactly once
  • Every run listed with its outcome, on one page

Xorviex is a self-architecting AI executive: you describe a goal in plain language, it plans and runs the team of AI agents the goal needs, audits every output with independent supervisor AIs, and — when the work is worth doing again — puts it on a schedule. A recurring mission spawns a fresh, independent run every time its cron comes due, claims each fire exactly once, holds a run instead of dropping it, and shows every schedule, paused or not, on one page. See how it works at xorviex.ai, or start a mission and tell it to run every Monday.

The brief nobody has to remember is the one that keeps arriving.

0 likes
About XorviexSee PricingStart Free →