Skip to main content
Use Scheduler to create cron jobs, execute AgentOS endpoints, and track run history.
pip install agno[scheduler]
from agno.db.sqlite import SqliteDb
from agno.scheduler import ScheduleManager

db = SqliteDb(id="scheduler-demo", db_file="tmp/scheduler.db")
mgr = ScheduleManager(db)

schedule = mgr.create(
    name="weekday-report",
    cron="0 9 * * 1-5",
    endpoint="/agents/reporter/runs",
    payload={"message": "Generate morning report"},
    timezone="UTC",
    max_retries=2,
    retry_delay_seconds=30,
)

for s in mgr.list(enabled=True):
    print(s.name, s.next_run_at)

mgr.disable(schedule.id)

Run with AgentOS

Enable scheduler polling inside AgentOS:
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai import OpenAIChat
from agno.os import AgentOS

db = SqliteDb(id="os-db", db_file="tmp/os.db")

greeter = Agent(
    id="greeter",
    model=OpenAIChat(id="gpt-4o-mini"),
    instructions=["Reply with a short greeting."],
    db=db,
)

app = AgentOS(
    agents=[greeter],
    db=db,
    scheduler=True,
    scheduler_poll_interval=15,
).get_app()
Create a schedule through the Scheduler API:
curl -X POST http://localhost:7777/schedules \
  -H "Content-Type: application/json" \
  -d '{
    "name": "greeting-every-5m",
    "cron_expr": "*/5 * * * *",
    "endpoint": "/agents/greeter/runs",
    "method": "POST",
    "payload": {"message": "Say hello"},
    "timezone": "UTC",
    "max_retries": 2,
    "retry_delay_seconds": 30,
    "timeout_seconds": 3600
  }'

Components

ComponentDescription
ScheduleManagerSDK API for create, list, update, enable, disable, delete, and run history
SchedulePollerClaims due schedules on an interval and executes them concurrently
ScheduleExecutorCalls schedule endpoints, handles retries, and writes run records
Scheduler APIREST endpoints for schedule lifecycle and manual trigger

Schedule Fields

FieldDefaultNotes
methodPOSTAllowed: GET, POST, PUT, PATCH, DELETE
timezoneUTCIANA timezone string
timeout_seconds3600Request and polling timeout
max_retries0Retries after first failure
retry_delay_seconds60Delay between retry attempts

Behavior

TopicBehavior
Cron formatStandard 5-field syntax: minute hour day-of-month month day-of-week
Endpoint formatEndpoint must be a path like /agents/greeter/runs
ValidationInvalid cron or timezone raises ValueError in SDK and 422 in API
Duplicate nameScheduleManager.create() supports if_exists="raise", "skip", or "update"
TriggeringUse POST /schedules/{id}/trigger or SchedulePoller.trigger()
Run historyEach run stores status, attempt, timings, error, input, output, and requirements

Next Steps

TaskGuide
View schedules in AgentOSos.agno.com/schedules
Deploy cron jobs for agents, workflowsAgentOS Scheduler
Manage schedule lifecycleSchedule Management
Validate cron and timezone inputsSchedule Validation
Inspect run recordsRun History
Check API request and response schemasSchedule API schemas