AI DevelopmentFramework14 min readPublished October 26, 2026

Cron or once · new or existing session · a state boundary, not a feature announcement

Scheduled Agents: When to Start a Fresh API Session

OpenAI's Agents API documents scheduled automations: a saved schedule that starts a new agent session, or sends a task into an existing one, on a cron expression or at a single future time. The feature is in beta and the documentation, as read on October 26, 2026, carries no launch date. What it does carry is a set of design choices every scheduled agent has to make, and this guide works through them: when a run should start clean, what an invocation record proves, how an agent schedules itself, and which behaviours the pages leave unspecified.

DA
Digital Applied Team
Senior strategists · Published October 26, 2026
PublishedOct 26, 2026
Read time14 min
SourcesOpenAI docs · openai-node
Schedule types
2periodic · once
five-field cron with an IANA zone, or a Unix timestamp
Target types
2new · existing
either schedule works with either target
Status on creation
active·
saved, not run; first run at the next matching time
Launch date
—unverified
not in the API changelog; page read Oct 26, 2026

Scheduling an agent requires an explicit decision about conversation state. Scripts can preserve state too, but an agent platform also has to decide which session receives each scheduled turn. An agent session holds a conversation, tool results and work in progress, so a schedule has to decide whether each run inherits that state or begins without it. OpenAI's Agents API documents that choice. Its scheduled automations guide, as it stood on October 26, 2026, describes saved schedules that either start a new session or deliver a task into one that already exists.

We are not treating this as launch news. The feature does not appear in the API changelog we read the same day, and the guide carries only a page timestamp, so we do not know when it shipped and say so. What we can do is read the documentation closely, because it answers a design question that applies to any scheduled agent on any platform: where should the state boundary sit?

This post assumes the Agents API basics, which our managed-runtime guide covers: an agent is a configuration of model, instructions and tools; a session is a durable instance of it; and an environment is the optional sandbox it works in. Everything below is about what happens when a clock, rather than a person, starts the next turn.

Key takeaways
  1. 01
    Choose the target by whether the task needs history.The guide's own rule: a new session for independent work such as a monthly review, an existing session for follow-ups that depend on earlier findings. Both schedule types work with both targets, and creating a schedule never runs it immediately.
  2. 02
    A completed invocation means delivery, not finished work.Each run creates an invocation whose status goes from queued to completed when the session accepts the task. The guide states that this does not mean the agent has done the work; follow session events for that.
  3. 03
    Cron follows clock times, with a small random delay.A five-field expression is interpreted in a named time zone and fires on the clock, not at intervals from creation. OpenAI adds a randomised delay to spread load, and a run waits if the target session is busy.
  4. 04
    An agent can schedule itself, but only within its session.With the automations tool enabled, an agent can create, pause, resume and delete schedules whose target is its current session. It cannot start a new session or touch another session's schedules, and the tool is off by default.
  5. 05
    Retries, overlap, catch-up and limits are not specified.The pages we read say nothing about what happens when delivery fails, when a periodic run fires while the previous one is still queued, or when a paused periodic schedule resumes. Design as if none of those is handled for you.

01 — The FeatureWhat the documentation actually describes

The guide defines an automation as a saved schedule for agent work. The Agents API stores it and, when the time comes, sends a task to the target session. Three resources are involved. The automation itself holds when to run and which session to use. An invocation records each attempt to send the task. The session does the work, and its events are where progress and results appear. All of it sits behind the Agents API beta header, and the openai-node repository's API listing shows the client methods: create, retrieve, update, list, delete, pause and resume on automations, plus create, retrieve and list on invocations.

Two schedule types exist. A periodic automation takes a five-field cron expression and a time zone, either UTC or an IANA name such as America/New_York. A one-time automation takes a Unix timestamp in seconds that must be in the future. The guide is explicit that the fields are exclusive: no timestamp on a periodic schedule, no expression or zone on a one-time one. Creating either saves it with an active status and does not run it; a periodic schedule's first run is the next matching time.

Two target types exist, and they are the subject of this post. A new-session target carries an agent, either a saved agent ID or an inline configuration but not both, an environment such as an OpenAI-hosted sandbox, and at least one initial message with text or an image. An existing-session target carries a session ID and reminder text, which the guide calls instructions and which the run delivers as an automation notification, distinct from a user message. Each run against a new-session target starts a fresh conversation; each run against an existing one lands in the same conversation, using the session's current agent configuration and saved state.

Automations resourceAgents API, beta
/v1/agents/automationspause, resume and delete sub-operations; invocations beneath it
Periodic scheduleexpression + timezone
five-field cronclock times in the named zone; no run_at allowed
One-time schedulerun_at
Unix seconds, futureno expression or timezone allowed; completes after one run
New-session targetagent_id or inline agent
environment + inputexactly one of agent_id or agent; input holds the messages
Existing-session targetsession_id
instructionsdelivered as an automation notification, not a user message

02 — The BoundaryFresh session or continue: the guide's rule and ours

The guide's rule is short: use a new session for independent work, such as a monthly spending review, and an existing session for follow-up work that needs the session's previous findings. The examples behind it are a daily suggestions agent that starts fresh each morning with access to the user's calendar and tasks, and a dinner-planning session that keeps restaurant preferences and earlier availability checks while a two-hourly schedule asks it to check reservations again.

A fresh session resets the conversation history, which makes one source of state easier to inspect. It does not isolate shared files or external systems from earlier writes, and it does not make outputs deterministic. Reconstructing a run also requires its effective agent configuration, environment, tool activity and the data those tools returned. The cost is that the agent re-derives context every time, which for a review over a data source it can re-read is fine, and for a task that depends on what it found yesterday is not.

The failure case for continuing is the one the guide's multi-agent advice is designed to prevent. A session that receives a reservation check every two hours accumulates every tool result from every check. Repeated checks can accumulate stale availability tables unless the runtime compacts history or the application summarises it deliberately. The guide's answer is to enable multi-agent orchestration and instruct the main agent to delegate each scheduled task to a subagent, keep only a concise summary, and decide whether to continue, change or stop the schedule. The main session keeps the goal; the subagents absorb the noise. It is the same problem we described for cloud agents that outlive the session, now with a clock attached.

new_session

Start clean each run

guide: independent work

Inputs are the saved agent plus the initial messages. The conversation starts fresh; shared files and external data may still change between runs. The invocation records delivery, while session and data records are needed to reconstruct the work. Example: a first-of-month spending review over the user's financial records.

existing_session

Continue with history

guide: follow-up work

The run delivers reminder text into a live session with its findings intact. Context grows with every run unless the agent delegates to subagents and keeps summaries. Example: a dinner-planning session re-checking reservations every two hours.

03 — TimingCron follows the clock, not the interval you meant

Three timing details in the guide will catch people who think of a schedule as a timer. First, the expression is interpreted as clock times in the chosen zone: the guide's example is that an every-three-hours expression fires at midnight, three, six and so on, not at three-hour intervals from creation. Second, the Agents API adds a small randomised delay to recurring runs to spread load, so a nine o'clock schedule is a schedule for roughly nine o'clock. Third, if the target session is busy when the run is due, delivery waits until it is free, and the guide says the wait can be longer than the delay.

The onboarding example in the guide shows the right response to the first of these. An application that wants to follow up a new user 48 hours after sign-up, then 48 hours after that, should not reach for a cron expression, because a day-of-month expression cannot express a 48-hour interval across month boundaries. Instead it creates a one-time schedule for 48 hours ahead, and after each completed follow-up creates the next one, stopping and deleting any pending schedule when onboarding ends or the user opts out.

A failure case from the time-zone field: a schedule written as nine in the morning in UTC for a team in New York runs at four or five in the morning local time depending on the season, because UTC does not observe daylight saving. Use the IANA zone the humans live in. What the guide does not say is how a cron expression behaves at the moment the clocks change in that zone, which section 07 lists among the open questions.

Timing behaviours stated in OpenAI's scheduled automations guide, read October 26, 2026. The design responses are ours.
Stated behaviourConsequenceDesign response
Expressions follow clock times in the named zoneEvery-N-hours expressions align to the clock, not to creation timeUse one-time schedules for true intervals; use cron for times of day
A small randomised delay is added to recurring runsScheduled time is intended time, not exact timeDo not chain a second system to the minute; read scheduled_at on the invocation
Delivery waits while the target session is busyLong-running turns push scheduled tasks later, possibly past the next occurrenceKeep scheduled turns short, or target a new session for work that must not queue
A one-time run_at must be in the future, in secondsA millisecond value is the wrong unit; a past time is not allowedCompute run_at server-side from a clock you trust and validate the unit

04 — ProvenanceDelivery is not completion, and the invocation says so

Every run, scheduled or manual, creates an invocation. The guide lists the fields to inspect: a status that starts as queued and becomes completed when delivery succeeds; a session ID that can be null before a session is available; a source type of manual or automation; and the intended scheduled time, null for a manual run. Then it states the sentence this whole section hangs on: a completed delivery does not mean the agent has completed its work. For a new session it means the session accepted its initial input. For an existing session it means the session accepted the notification and the request to start work.

Why this matters operationally: an invocation list is an audit trail of attempts, not of outcomes. If a scheduled run is supposed to send a customer a message, the invocation shows that a session was asked to do so at a certain time. Whether the message went, what it said, and whether a tool call failed on the way are in the session's events and items, reached through the invocation's session ID. The guide is direct that the automation schedules the work and the application displays the output and sends any notifications to the user.

One useful consequence is the manual invocation. Sending an empty request to the invocations endpoint runs the automation now, without changing the saved schedule or consuming a one-time run, and it works while the schedule is paused. That makes a paused automation a testable one: pause it, invoke it by hand, read the session, then resume. The failure case is treating the invocation list as complete history; the guide notes it contains invocations already created, not every future occurrence.

status
Delivery succeeded
queued→ completed

Completed means the session accepted the task. It says nothing about the turn's outcome.

guide
session_id
Where to look next
nulluntil ready

Follow this session's events to learn what the agent did. It can be empty before a new session exists.

guide
source.type
manual or automation
2values

Distinguishes a hand-triggered test from a scheduled run in the same history.

guide
scheduled_at
Not the delivery time
intendedtime

Null for manual runs. Compare with the session's own timestamps to measure queueing delay.

guide

05 — Agent ToolWhen the agent schedules itself, and what it cannot reach

Adding the automations tool to an agent's configuration lets it schedule work requested during a conversation: a user who says check again in two hours gets a one-time schedule the agent creates for itself. The guide lists what the tool can do, which is create, list, get, update, pause, resume and delete the agent's own automations, and the Agents API sets the target to the current session every time. The agent can create one-time or periodic runs.

The boundaries are as important as the capability. The agent cannot use the tool to start a new session, and it cannot manage another session's automations. The tool sees only automations created by the agent in the current session; the application can see those too, through the API, alongside any it created itself, and the creator is recorded in a field the application must not set on create. An agent-created automation must keep its creator session as the target even when updated. The tool is absent by default, and removing it later does not delete schedules already saved.

The failure case here is permission creep by schedule. An agent that can create periodic automations targeting its own session can, if instructed carelessly, keep itself running indefinitely after the user has stopped caring. The guide's framing is that the automations tool manages schedules while the other tools and data access do the work; the design corollary is that the application owns the stop. Pause or delete through the API when the goal is met, and remember that pausing does not stop work a session has already accepted.

Application-created
Your code owns the schedule
API · any target

Create new-session or existing-session automations from your own events. Full lifecycle control, including other sessions' schedules.

default
Agent-created
The agent books its own follow-up
automations tool · current session only

One-time or periodic, always targeting the session that created it. Cannot start new sessions or see other sessions' automations.

opt-in
Delegated
Main agent schedules, subagent works
multi-agent enabled

The guide's pattern for ongoing goals: keep the goal and schedule in the main session, hand each run to a subagent, retain a summary.

recommended for recurring

06 — LifecyclePause, update and delete without surprises

The lifecycle operations are small but each has a documented edge. An update leaves omitted fields unchanged, except that a supplied target replaces the whole target, so every required field must be present and the type must be retained. Updates apply to future invocations only; an invocation already queued keeps the target and input it was saved with, so a change made after the scheduled time has passed will not affect the run that is waiting for a busy session.

Pause holds pending scheduled deliveries and leaves manual invocation available. Resume reactivates the saved schedule. Delete prevents future scheduled and manual invocations. None of the three stops work a session has already accepted or deletes the session; a delivery in progress may still arrive. To stop current work, the guide points to cancelling the session's active turn, which is a session operation rather than an automation one.

The one-time schedule has its own corner. If its time passes while it is paused, you must set a new future timestamp before resuming. Once it has run, it is complete: it cannot be paused or resumed, although it can still be invoked manually, and another follow-up needs a new automation. For the onboarding pattern, that means the application is creating a new automation after every completed step and tidying the previous one.

Lifecycle operations and their documented effects, from OpenAI's scheduled automations guide, read October 26, 2026.
OperationEffect on scheduleEffect on running workEdge to remember
UpdateFuture invocations only; target replaced wholeNoneA queued invocation keeps its saved target and input
PauseHolds pending scheduled deliveriesNone; accepted work continuesManual invocation still works, which makes pause a test mode
ResumeReactivates the saved scheduleNoneA paused one-time schedule whose time has passed needs a new run_at first
DeletePrevents future scheduled and manual invocationsNone; a delivery in progress may still arriveStop current work by cancelling the session's active turn

07 — Open QuestionsWhat the pages leave open, as of October 26

We read the guide, the reference navigation and the openai-node listing looking for six behaviours that any scheduler eventually has to define, and found none of them stated. Retries: the guide describes an invocation becoming completed when delivery succeeds but does not describe a failed delivery, a failure status or any retry. Overlap: it says a run waits for a busy session but not what happens if the next periodic occurrence arrives while the previous invocation is still queued. Catch-up: it does not say whether a periodic schedule that was paused through several occurrences runs once, runs them all or skips them on resume.

Limits and clock changes are also absent: no maximum number of automations per project or per session, no minimum interval, and no statement of how an expression behaves when the named zone moves its clocks. Billing is stated only at the Agents API level, which is that model usage is charged at the model's API rates, OpenAI tools at their standard rates and OpenAI-hosted sandboxes at container rates; the guide names no charge for the automation itself, and we do not infer one either way.

The honest design response is to assume nothing is handled. Make scheduled turns idempotent, so a repeated or late delivery does not duplicate an action. Record your own expected-run table and reconcile it against the invocation list, so a missing run is noticed. And pin the model in the saved agent rather than relying on a floating alias, which is the rule our model-pinning policy for production automations sets out, because a schedule that runs unattended for months may outlive the model version it was tested on; monitor its retirement policy as well.

Six unknowns, one habit
Retries, overlap, catch-up, limits, clock changes and automation-specific billing are not described in the pages we read on October 26, 2026. Treat each as undefined until OpenAI documents it, and design the scheduled turn so that running twice, running late or not running at all is detectable from your own records and harmless to the business action. That habit costs little and survives whatever the documentation later says.

08 — DecisionA boundary rule for scheduled agent work

Put together, the documentation supports a rule that is more precise than new-for-independent and existing-for-follow-up. Ask three questions of every scheduled task. Does the run need something only the previous run produced, rather than something it can re-read from a system of record? Will the run produce output that should stay in context for the next one, or output that should be summarised and discarded? And must the run happen at a time of day, or after an interval from an event?

The first question picks the target. If the answer is no, start a new session, and give the agent tools that reach the source of truth; the invocation then leads to the new session, whose events show what the run saw. The second question picks the structure within an existing session: if output accumulates, enable multi-agent orchestration and delegate, keeping summaries in the main session as the guide suggests. The third picks the schedule type: cron for clock times, one-time schedules chained by the application for intervals.

Our worked example, illustrative rather than run: a weekly content-performance review for a marketing team. The run needs last week's analytics, which live in a warehouse the agent can query, so it does not need the previous session and starts fresh. It should run at nine on Monday in the team's zone, so it is periodic with an IANA zone. Its output is a report the application stores and posts, so the application, not the session, is the record. The invocation list shows it was delivered; the stored report shows it was done; the two are reconciled by the application once a week. That reconciliation step is the part our automation practice builds first, because comparing expected runs with recorded outcomes can reveal a missed run.

A periodic review over data the agent can re-read
New session on a cron schedule with an IANA zone. Give the saved agent the tools; follow each invocation's session ID to the record of what the run did.
new_session · periodic
A follow-up that depends on what the last run found
Existing session. Enable multi-agent orchestration and delegate each run to a subagent so tool output does not pile up in the main context.
existing_session · delegated
Work that must happen N hours after an event
One-time schedules created by the application after each step. Cron cannot express a 48-hour interval across month boundaries.
once · chained
A user asks the agent, mid-conversation, to check back later
Enable the automations tool for that agent. It can schedule its own session only; your application still owns pause and delete.
automations tool
A scheduled run that performs a business action
Make the action idempotent and reconcile your own expected-run table against invocations. A completed invocation proves delivery, not the action.
any · idempotent
Our readingThe documented feature is modest and the design question it raises is not. OpenAI gives you a clean way to say whether a scheduled run inherits state, an invocation record that honestly stops at delivery, and an opt-in way for an agent to book its own follow-ups within its own session. It does not yet tell you what happens when things go wrong. Use the state boundary deliberately, keep the business record outside the session, and treat the unstated behaviours as your responsibility until the pages say otherwise.

09 — ConclusionThe schedule decides when; the target decides what it remembers

What to do, October 26, 2026

Start scheduled runs fresh unless they need the last run's findings, delegate recurring work to subagents, and reconcile invocations against your own record of what should have run.

OpenAI's scheduled automations, as documented on October 26, 2026, give an agent session a clock. A periodic or one-time schedule sends a task either into a new session with a saved agent and initial messages, or into an existing session as a notification carrying reminder text. Each run leaves an invocation whose completed status means the session accepted the task, and whose session ID is where the real outcome lives.

The design decisions follow from that. Choose the target by whether the run needs history. Choose cron for clock times and chained one-time schedules for intervals, in the zone the people live in. Let an agent schedule itself only where a user asks it to, and keep pause and delete in your own hands. Pin the model. Then treat retries, overlap, catch-up, limits and clock changes as undefined, because the pages we read do not define them, and use idempotency, outcome checks and explicit recovery rules to reduce the effects of late, missing or repeated work.

Keep a record of intended runs, delivered invocations and completed outcomes. Those three records answer different operational questions.

Scheduled agents that can be audited

Decide what the run remembers.

We design and run scheduled agent workloads with the state boundary chosen on purpose, the business record kept outside the session, and every run reconciled against what should have happened.

Free consultationExpert guidanceTailored solutions
What we work on

Scheduled and background agents

  • →New-session versus continued-session design per task
  • →Cron and interval schedules in the team's own time zone
  • →Idempotent scheduled actions with reconciliation
  • →Subagent delegation that keeps main context small
  • →Model pinning and change control for unattended runs
FAQ · Scheduled agent sessions

The questions builders are asking.

It is a saved schedule for agent work, stored by the Agents API and run on a periodic cron expression with a time zone or once at a future Unix timestamp. Each run sends a task to a target session, either a new session started from a saved or inline agent with initial messages, or an existing session that receives reminder text as an automation notification. Creating the automation saves it as active; it does not run immediately.
Digital Applied newsletter

Deep dives on AI, marketing and development.

Practical guides and fresh insights by email. No recycled takes.

Related dispatches

Continue exploring agent runtimes and automations.

Google Search

See more Digital Applied analysis in your Google results by adding us as a preferred source.

Add as a preferred source