db and fire from the same FastAPI process that serves your agents.
agno_schedules every scheduler_poll_interval seconds, fires due jobs, retries failures, and persists state.
Two ways to create schedules
| Pattern | When | Lives in |
|---|---|---|
| Agent-driven | Users ask the agent to schedule things in chat | The agent’s own tool calls |
| Startup-registered | Schedules that should always exist, regardless of who’s chatting | Your app’s lifespan |
Agent-driven
Give an agentSchedulerTools and it can schedule its own work via chat:
Startup-registered
For schedules that should always exist (the daily digest, the hourly sync, the nightly cleanup), register them in your app’s lifespan:Workflows for multi-step jobs
Schedules fire single endpoints. When the work is multi-step — research, then outline, then draft, then review — you reach for a workflow. Workflows aren’t strictly a scheduling feature, but they’re the most common thing a schedule fires. A workflow is a typed pipeline. Steps run in order.Parallel runs them concurrently. Loop repeats until a condition holds. Router picks one branch.
/workflows/<id>/runs POST endpoint, schedulable, traced, persisted in the same db.
| Pattern | Use when |
|---|---|
| Sequential | Steps depend on each other |
| Parallel | Steps are independent and you want fanout |
| Loop with condition | Quality threshold or max iterations |
| Router + Condition | Dynamic branching on input |
| Cross-modal chaining | Output of one agent is input to a different modality (text → speech, code → narration) |
Schedule runs and observability
When a schedule fires, AgentOS:- Looks up the schedule in
agno_schedules. - Hits the configured endpoint (
POST /agents/<id>/runsorPOST /workflows/<id>/runs) inside the same process. - Records the result in
agno_schedule_runs(status, duration, error if any) and the underlying run inagno_sessionsandagno_traceslike any other run.
run_id from agno_schedule_runs back to agno_traces. See Observability for the full data model.