once with an RFC 3339 runAt, or repeated with a standard
five-field cron and an IANA timezone. After a one-time schedule fires it
flips enabled to false and sets completedAt; give it new once timing if
you want to reuse it.
The target decides where the message lands. { "mode": "spawn" } starts a
fresh thread on each fire, which keeps unrelated runs from piling into one
context window. { "mode": "thread", "threadId": "..." } queues onto a thread
the same agent already owns.
Each fire uses the agent’s configuration as it is at that moment: its profile,
roles, tools, and model. If the previous scheduled turn is still running, the
next fire is skipped rather than run on top of it. Creating a schedule requires
an Idempotency-Key header. The same key twice returns the original schedule;
the same key with different fields is rejected.
After each fire, lastStatus is fired, skipped, or failed, with
lastThreadId and lastTurnId pointing at the work. A schedule that can no
longer run is disabled with a disabledReason of agent_not_found,
thread_not_found, or invalid_config.
Belongs to one agent · Timing is
once or repeated · Target is
spawn or an existing thread · Paused with enabled: falseRules
- Overlapping fires are skipped, never queued behind each other. See Rules.
- Disabling an agent’s identity stops its schedules firing.
API
GET/POST /v1/agents/{agentId}/schedules.limitmaxes out at 100 here, not 200.GET/PATCH/DELETE /v1/schedules/{scheduleId}.