Schedules
Schedule one-time or recurring prompts for Letta agents
Scheduled tasks allow you to automate messages to your agent on pre-determined schedule. For example, you can have your agent prepare a custom briefing for you every morning at 9am, or have your agent triage your unread emails once an hour.
Your agent can schedule tasks itself. This is the best way to use schedules - simply ask your agent to create a schedule by chatting with it!
Getting started
Section titled “Getting started”The easiest way to manually configure channels is via the desktop app. Simply navigate to the “Schedules” tab in the sidebar, and follow the on-screen instructions to set up a new schedule.
Scheduled tasks are device-bound. This means that if you create a schedule via the desktop app, your desktop app (or CLI session) will need to be open for the schedule to trigger.
If you want to make sure schedules run uninterrupted, regardless of whether your device is online or not, you can set up a 24/7 server (e.g. a home workstation, or remote VM) as a remote device. You can configure schedules on remote devices with the Letta Code app as well - simply swap the selected device in the schedules menu.
Setting up schedules via the CLI
Section titled “Setting up schedules via the CLI”You can use the letta cron subcommand to manually create schedules:
letta cron add \ --agent agent-123 \ --conversation default \ --name "daily-review" \ --description "Summarize recent code changes every morning" \ --prompt "Review recent changes and summarize any issues." \ --cron "0 9 * * *"Use --every 1d for a once-daily task at local midnight. Use --cron when you need a fixed time of day like 9:00am.
List tasks for the agent:
letta cron list --agent agent-123If no listener is active when you add the task, Letta Agent still creates it, but warns that it will only execute once letta server is connected.
For the full command table, required fields, and defaults, see the CLI reference.
Current behavior and limits
Section titled “Current behavior and limits”These constraints are important enough to know before you depend on the feature:
- Tasks only execute while
letta serveris connected. - One-shot tasks that are more than 5 minutes late are marked as missed.
- Letta Agent currently allows up to 50 active tasks per agent.
- Recurring tasks remain active until you delete them.
--every 1dfires daily at local midnight. Use--cronfor a fixed time of day.--atvalues are interpreted in your local timezone.- Raw cron expressions are evaluated in the local timezone by default.
- All
letta croncommands print JSON, so they work well in scripts and wrappers.
Examples
Section titled “Examples”Daily review
Section titled “Daily review”letta cron add \ --agent agent-123 \ --name "daily-review" \ --description "Review recent changes every morning" \ --prompt "Review recent changes and summarize any issues." \ --cron "0 9 * * 1-5"One-time reminder
Section titled “One-time reminder”letta cron add \ --agent agent-123 \ --conversation default \ --name "deploy-reminder" \ --description "Remind me to validate staging before deploy" \ --prompt "Check staging health, review recent failures, and summarize anything blocking deploy." \ --at "in 45m"Frequent recurring check
Section titled “Frequent recurring check”letta cron add \ --agent agent-123 \ --name "log-watch" \ --description "Check logs every five minutes" \ --prompt "Inspect the latest logs and flag anything unusual." \ --every 5mTroubleshooting
Section titled “Troubleshooting”-
My task never ran
- Make sure
letta serverwas connected when the schedule should have fired. - Run
letta cron list --agent <id>and confirm the task is still active.
- Make sure
-
My one-time task disappeared without running
- If the listener was down for long enough, the task may have been marked as missed.
Skip to content