Scheduling Agent Runs
Set up a schedule and your agent will wake up at the times you choose, do the work, and leave the results in chat — even when you’re not looking. A daily morning briefing, an hourly site check, a one-off “remind me in 30 minutes” — they all use the same simple mechanism.
What can I do with it?
| Scenario | Example |
|---|---|
| Same time every day | Every morning at 8 AM, summarize overnight news |
| Weekdays only / weekends only | Twice a day on weekdays — 9 AM and 6 PM market check |
| Hourly or sub-hourly polling | Every hour, check this inventory page and alert me only if it changed |
| One-time delayed run | ”Come back in 30 minutes and finish the meeting notes” |
| Heavy work in off hours | Every Sunday at 3 AM, run the weekly cleanup |
A scheduled run is a simple loop: the agent works, leaves the result in chat, and a push notification lets you know it’s ready. You step away, your agent works, you check the answer when you come back.
Two ways to set up a schedule
1. Just tell the agent in plain language
Easiest path. Type it into chat the way you’d ask a person.
“Every morning at 8, pull the top 5 AI news stories from yesterday and summarize them.”
“Check this page every hour and only tell me if the price changes.”
“Come back in 30 minutes and recheck the result.”
The agent will register the schedule itself. A “Schedule registered” card appears in chat showing the next run time and the exact instruction it saved. You just confirm it looks right.
An agent can have up to 5 active recurring schedules that it created for itself at any one time. Schedules you add yourself from the UI are not subject to this cap.
2. Set it up from the UI
The Schedules menu (/agents/<agent>/schedules) has two distinct sections.
How actively it works on its own
At the top of the page you’ll see “How actively it works on its own”. This controls how often your agent checks in and handles things on its own, without being asked. There are three options — all run around the clock, 24 hours a day. The only difference is how often the agent checks in.
| Option | Check-in interval | Good for |
|---|---|---|
| Relaxed | Every 4 hours | Agents that only need occasional background work |
| Normal | Every 2 hours | A sensible default that fits most agents |
| Diligent | Every hour | Agents that need to respond quickly (uses more credits) |
Clicking an option saves immediately — no extra save button needed.
If you only want the agent to act when you ask it something or when a specific scheduled task fires, ignore this section and use “Add Schedule” below to set up explicit times instead.
Add Schedule (specific recurring times)
For more precise timing, press Add Schedule.
- Configure the active window:
- Choose the days of the week, start and end times, and the interval (every 30 min, 1 hour, 2 hours, etc.).
- Example: weekdays 09:00–18:00, every 2 hours → up to 4–5 runs per day.
- Your account timezone is applied automatically.
- Save. The new schedule appears in the list with the next scheduled run time. This schedule has no fixed instruction — at each run time the agent decides on its own what to do. If you want the same instruction to run every time, ask the agent in chat to set up a recurring run instead.
From the list you can:
- Toggle active/inactive — pause a schedule without deleting it; it’s skipped until you re-enable it.
- Edit — change the active days, hours, and interval (there is no instruction field).
- Delete — remove it once you no longer need it.
- Show/hide inactive schedules — keep the list tidy when you’ve parked a few schedules.
The iOS app offers the same schedule editor, so you can add and manage schedules on the go.
If you need a precise clock time (e.g. “every day at exactly 8 AM”) or a one-time delayed run, ask the agent directly in chat. Precise recurring schedules are registered by the agent using its scheduling tool.
How an automatic run plays out
[Registered schedule]
│
│ Run time arrives
▼
Agent wakes up automatically
│
│ Picks tools and does the work
│ (only tools you've already enabled are available)
▼
Drops the result into chat
│
│ ┌──────────────────────────────┐
└▶│ Push notification fires │
│ Open the chat to read it │
└──────────────────────────────┘The result lands in your chat exactly like a normal message would. The message is tagged with which schedule woke the agent and what instruction it was given, so you can tell a scheduled answer apart from your own back-and-forth — even days later.
Where do I see the result?
- In chat: the answer arrives as a new message. A “Triggered by schedule” tag and the original instruction are shown alongside it.
- Push notification: if mobile / desktop notifications are on, you get a ping when the result lands. Tap it to jump straight to the chat.
- Schedules menu: each schedule card shows the last run time, total run count, and the next scheduled run.
- Run history: the agent’s Logs menu (
/agents/<agent>/logs) shows schedule run records (success/failure, timestamp). Note that the Logs view currently shows the run history of the first schedule in the list only. To review a specific schedule’s history in detail, open that schedule directly from the Schedules menu.
Safety rails
Because scheduled runs spend credits while you’re away, several guardrails are in place:
| Guardrail | Behavior |
|---|---|
| Tool approval | Tools marked Always ask (risky ones such as skill install or team-member creation) are never auto-executed during a scheduled run — they wait for you |
| Credit balance | If your credits run out, the next scheduled run is skipped |
| Unread-message cap | If unread messages from the agent pile up past the configured limit, further scheduled runs are skipped. Opening the chat and reading the messages resets the counter, and runs resume from the next slot |
| Repeated-failure alert | If the same schedule fails several times in a row, a push notification tells you to take a look |
| No double-runs | A single agent only runs once at any moment — overlapping or stuck schedules can never spin up two parallel executions |
| Active hours | If you’ve configured active hours, and the agent tries to register a schedule that fires outside that window, the tool returns an error. The agent then decides on its own whether to ask you for confirmation, or — if you clearly requested that specific time — to proceed as-is |
A scheduled run can only use tools you already enabled, and Always ask tools stay frozen until you approve them in person. Your agent works inside the limits you set ahead of time.
Common patterns
Daily morning briefing
Get news / stock / inbox summaries at a fixed time each day. Wake up, open the chat, done.
Watch + alert only on change
“Check this page every hour and alert me only if the price moves.” Quiet by default, loud only when it matters.
Periodic cleanup
Run heavy weekly summaries or data cleanup early Sunday morning so they don’t fight with your weekday work.
One-off delayed run
“Come back in an hour and recheck this.” Once it runs, the schedule deactivates itself — it won’t fire again and you don’t have to clean it up.
Next steps
- Equipping Tools — pick the tools your agent will use while you’re away
- Skills & the Autonomous Skill System — package repeated work into a skill for more reliable automation
- Sharing an Agent (Snapshots) — how share links differ from your own scheduled runs
Advanced
You don’t need any of this for normal use. Skip unless you want fine timing control or are debugging odd behavior.
Schedule types
| Type | How to create | Description |
|---|---|---|
| Heartbeat | UI (Add Schedule) | Day/time-window + interval based. Agent wakes at regular intervals within the active window |
| Recurring (cron) | Agent schedule_create tool only | UTC cron expression. Precise daily/weekly/hourly timing |
| One-time (once) | Agent schedule_create tool only | Fires once after N minutes, then deactivates itself (min 1 min, max 7 days) |
The “Add Schedule” button in the UI creates heartbeat schedules only. For cron-style recurring schedules or one-time delayed runs, ask the agent in chat and it will register them using its scheduling tool.
One-time vs recurring
A one-time run deactivates itself after it fires. A recurring run keeps going until you stop it — and a recurring schedule created by the agent itself auto-expires after 7 days by default (configurable up to 90 days), so forgotten schedules don’t keep firing forever.
Picking a time (cron expressions)
Under the hood, when the agent registers a cron schedule it uses standard cron notation. Times are stored in UTC and shown in your local timezone.
| Expression | Meaning |
|---|---|
0 8 * * * | Daily at 08:00 UTC (= 17:00 KST) |
0 23 * * * | Daily at 23:00 UTC (= 08:00 KST next day — use this for a Korea-morning briefing) |
0 * * * * | Every hour on the hour |
0 9 * * 1-5 | Weekdays at 09:00 |
0 0 * * 0 | Every Sunday at midnight |
Asking in plain language (“run at 8 AM Korea time”) lets the agent handle the timezone conversion for you.
Concurrency protection
A single agent only ever has one execution line active.
- If schedule times overlap, or a previous run is still going when the next one’s time arrives, only one runs.
- If a run is in flight when the next slot comes due, the next slot is skipped or queued — never doubled.
- Even when multiple servers try to fire the same schedule at the same instant, the system ensures only one of them actually runs it.
- After a system restart, schedules that were “due” while the system was down are realigned forward to a fresh future time and resume cleanly.
So no, your agent can never accidentally fire the same task 60 times in an hour.
When many agents share the same cron expression (e.g. 0 * * * *) they could otherwise all fire at the same instant. To spread that load, every agent-registered recurring (cron) schedule automatically gets up to 180 seconds of random delay added to its start time. This is automatic — there is nothing to configure — and it does not apply to one-time delayed runs.
Limits and retention
| Item | Value |
|---|---|
| Active recurring schedules an agent can create for itself | Max 5 |
| One-time delay range | 1 minute – 7 days |
| Auto-expire for agent-created recurring schedules (default) | 7 days (configurable 1–90) |
| Consecutive-failure alert threshold (default) | 3 failures in a row (set to 0 to disable failure alerts) |
| Run history retention | ~90 days (older runs are cleaned up automatically) |
Schedules you create yourself from the UI are not subject to the active-schedule cap, and they don’t auto-expire unless you set that yourself.