Scheduler and heartbeat¶
Scheduled jobs live in the agent's schedule list and appear in the
dashboard's Scheduler tab, where you can also create, pause, edit and
trigger them.
schedule: [
{
name: "Morning revenue check",
cron: "0 9 * * 1-5",
timezone: "America/Costa_Rica",
message: "Check yesterday's revenue and flag anything unusual.",
},
]
A job is a message sent to the agent at a time you choose — so anything the
agent can do in a conversation, it can do on a schedule. Use thread_id to keep
a job's history in one continuous conversation.
Fan-out. With multi-user mode on, for_each_customer: true runs the job once
per end user, and the message can use {customer_key}, {platform} and
{user_id}. Use action instead of message to run a named script from
allowed_actions.
Two places jobs live. The schedule list above is one of them; the other is
the scheduler's own store, which is what the Scheduler tab's "New task" form
writes and what an agent creates when it schedules something itself. The
Scheduler tab merges both and badges each row, so nothing is hidden — but the
difference matters when you go looking for what is triggering a job. A
schedule entry is cron-only and lives in the agent's configuration; a stored
task can also be one-time and can be handed to a different agent later.
Asking an agent about the schedule. Any agent can read and change its own scheduled work in chat, and AgentFather can do the same for every agent in the deployment — across both places — so "what wakes the finance agent at 3am?", "pause that job", or "schedule a Monday summary for the support agent" are all things you can simply ask for. Changing, creating or immediately running another agent's job always raises an approval card first, because it makes that agent start working on instructions you supplied. Ask to see a job's full instructions before approving an edit: a listing shows only its name, schedule and the first couple of lines.
Heartbeat is different and simpler: the agent wakes up periodically (default
every 60 minutes) and reads HEARTBEAT.md in its workspace — a plain markdown
file of standing instructions. It is the low-ceremony way to say "keep an eye on
this" without writing a cron entry. Control it with the heartbeat block per
agent, or heartbeat: in config.yaml for the fleet.