Operate

Cron

Fire agents on a schedule from the control plane — same enqueue path as a client-created run, with exactly-once claims across replicas.

What it is

Named schedules in langgraph.json (5-field cron + optional IANA timezone). Each fire creates a run on a fixed thread cron:<schedule-name> so history stays browsable as one thread.

Why it is here

Scheduled work must not depend on a laptop cron or a sidecar that bypasses grants, kill, and audit. The plane owns the fire; runners only execute jobs.

How to implement

  1. Add a cron block to a discovered config (schedules bootstrap from every file, like graphs).
  2. Point agent_id at a registered agent; set expression and optional timezone / input.
  3. Confirm the schedule in Admin → Cron (or GET /internal/cron).
  4. After a fire, open thread cron:<name> and the run stream like any other run.
"cron": {
  "daily-report": {
    "agent_id": "my_agent",
    "expression": "0 9 * * *",
    "timezone": "America/New_York",
    "input": { "messages": [{ "role": "human", "content": "generate the daily report" }] }
  }
}

In the product

Admin → Cron — schedules across tenants
Runkite Admin Cron schedules

What to expect

Reference: docs/configuration.md · Admin UI guide → Cron · Runs & threads