Schedules
A schedule is a pack objective that the pack runs automatically. It either repeats on a cron expression (five fields, UTC, at least 30 minutes apart) or fires once at a future time. It can’t do both. Only ask and task can be scheduled. A brief holds their whole request. teach and import need a file or target that isn’t available when the schedule is created. Each fire creates an Action for that verb. A scheduled ask answers its question. A scheduled task works on its objective.
See Scheduling recurring work for when to use one.
Create a schedule
Section titled “Create a schedule”schedule_create sets up standing work on a pack. Nothing runs until nextRunAt. To run it now, use schedule_trigger. Check schedule_list first to avoid creating a duplicate. A task schedule spends agent time on every fire.
| Input | Type | Required | Meaning |
|---|---|---|---|
packId |
string | Yes | The pack’s id or slug, from list_packs. |
actionType |
ask or task |
Yes | ask answers the brief each fire. task has the pack’s agents work on it. |
brief |
string | Yes | The question (ask) or objective (task) every fire works on, written as a person would say it. Up to 4,000 characters. |
cron |
string | One of cron or runAt |
Five-field cron, UTC, firing at least 30 minutes apart. |
runAt |
string | One of cron or runAt |
An ISO 8601 UTC instant to fire once. Must be in the future. |
name |
string | No | A short label, unique per pack. Lowercased, with anything but a letter or digit turned into an underscore. It may not start with sched_. If you leave it out, one is made from the brief. |
description |
string | No | A note for people reading the schedule later. Up to 1,000 characters. |
mode |
standard or fast |
No | task only. Stored with the schedule and passed to each fire unchanged. It does not change how the task runs. Both modes use the same executor. |
mustWrite |
boolean | No | task only. Record a run that writes nothing to the pack as failed. |
Returns the schedule.
Permission: needs steer access on the pack.
“Ask the growth-metrics pack how many active wallets we had last week, every Monday at 9.”
Create one with the ask or task verb. The question or objective becomes the standing brief. Add a cadence to make it a schedule instead of a single run. The command prints the schedule id.
edisyl ask growth-metrics "How many active wallets last week?" --cron "0 9 * * 1"edisyl task growth-metrics "Digest the week's activity" --cron "0 9 * * 1" --name weekly_digestedisyl task growth-metrics "Write this week's summary at /weekly/<date>" --cron "0 9 * * 1" --must-writeedisyl task growth-metrics "Prepare the launch report" --at 2026-08-10T09:00:00-04:00| Flag | Behavior |
|---|---|
--cron "<expr>" |
Run on a recurring cron expression. 30-minute minimum interval. |
--at <RFC3339> |
Run once, at a future time. Use one of --cron or --at, never both. |
--name <label> |
A name for the schedule. Other schedule commands accept it or the id. |
--must-write |
task only. Record a run that writes nothing to the pack as failed. |
--mode standard|fast |
task only. Recorded with each fire. It doesn’t change how the task runs. |
--id-only |
Print only the schedule’s id, to store in a shell variable. |
Every other schedule command takes the schedule’s id or its name. A name is unique only within one pack. If schedules on two packs have the same name, add --pack <pack>.
List schedules
Section titled “List schedules”schedule_list lists the standing work on the packs you can read: what recurs, on what cadence, whether it is paused, how its last run ended, and when it fires next. Paused schedules are included, with enabled: false.
| Input | Type | Required | Meaning |
|---|---|---|---|
packId |
string | No | Narrow the list to one pack. |
Returns the schedules. Pass an entry’s scheduleId to schedule_get, schedule_runs, and schedule_trigger. Refer to a schedule by its name, or by its brief if it has no name.
Permission: anyone who can read the pack can list its schedules.
“What runs by itself on the growth-metrics pack?”
edisyl schedule list [--pack <pack>]Shows ids, names, when they run, and the last and next run.
| Flag | Behavior |
|---|---|
--pack <pack> |
Only schedules on this pack (UUID, slug, or name). |
--quiet |
Print only the data: no hints, no banners. |
Read one schedule
Section titled “Read one schedule”schedule_get fetches one schedule: its brief, its cadence (cron or a one-shot runAt), its stored mode, whether it is paused, how its last run ended, and when it fires next. lastResult holds the newest run’s answer or summary, with its citations. If you can’t read a schedule with that id, it returns a not found error.
| Input | Type | Required | Meaning |
|---|---|---|---|
scheduleId |
string (UUID) | Yes | The schedule’s id, from schedule_list. |
Returns the schedule.
“What exactly does the weekly digest run, and what did it last say?”
edisyl schedule view <schedule> [--pack <pack>]Shows when it runs, its brief, and its last result. --quiet prints only the data.
Change a schedule
Section titled “Change a schedule”update changes a schedule in place. The schedule keeps its id and run history. Pass only the fields that change. cron and runAt are alternatives. Setting one switches the schedule to that cadence and removes the other. After you change the brief, the schedule fires as you from then on.
schedule_update changes a schedule and returns it as it now stands.
| Input | Type | Required | Meaning |
|---|---|---|---|
scheduleId |
string (UUID) | Yes | The schedule’s id. |
brief |
string | No | The new standing question or objective. |
cron |
string | No | A new five-field UTC cron, 30 or more minutes apart. Drops runAt. |
runAt |
string | No | A new future ISO 8601 UTC instant to fire once. Drops cron. |
description |
string or null | No | A note for readers. null clears it. |
mode |
standard or fast |
No | task only. Recorded; it does not change execution. |
mustWrite |
boolean | No | task only. Whether a run that writes nothing to the pack fails. |
Pass at least one field besides scheduleId.
“Move the weekly digest to Tuesdays at 9.”
edisyl schedule update <schedule> --brief-file brief.mdedisyl schedule update weekly_digest --pack growth-metrics --cron "0 9 * * 1"edisyl schedule update <schedule> --at 2026-09-10T09:00:00Zedisyl schedule update <schedule> --must-write=false| Flag | Behavior |
|---|---|
--brief "<text>" / --brief-file <path> |
A new standing brief. A brief often contains quotes and newlines. Use --brief-file to read it from a file (- reads stdin). |
--cron "<expr>" |
Make the schedule recurring. Removes a one-time --at. |
--at <RFC3339> |
Make the schedule fire once. Removes a --cron. |
--mode standard|fast |
Task schedules only. |
--must-write |
Task schedules only. Record a run that writes nothing to the pack as failed. --must-write=false turns this off. |
--description "<text>" |
A note on the schedule. An empty value clears it. |
--pack <pack> |
Look for the schedule on this pack only. |
Run a schedule now
Section titled “Run a schedule now”The cadence doesn’t change. The next scheduled fire still happens. The run uses the schedule’s own verb. Its Action is the run.
schedule_trigger runs a schedule now, without waiting for its next fire. It is rate-limited per user and per schedule.
| Input | Type | Required | Meaning |
|---|---|---|---|
scheduleId |
string (UUID) | Yes | The schedule’s id. |
idempotencyKey |
string | No | A key you choose for this fire, up to 200 characters. Send the same key again to retry without firing twice. |
Returns an actionId. Follow it with action_get.
Permission: needs steer access on the pack.
“Run the weekly digest now.”
edisyl schedule trigger <schedule> [--pack <pack>]Returns an Action id to follow with edisyl action watch.
Read a schedule’s runs
Section titled “Read a schedule’s runs”schedule_runs lists a schedule’s past runs, newest first, each with its status, when it fired, when it completed, a one-line summary, and the actionId to open with action_get for the full result. Use it to check whether a schedule has been running and whether it worked.
| Input | Type | Required | Meaning |
|---|---|---|---|
scheduleId |
string (UUID) | Yes | The schedule’s id. |
status |
string | No | One of dispatched, completed, failed, or cancelled. |
limit |
integer | No | Page size, 1 to 100. Default 20. |
cursor |
object | No | The previous response’s nextCursor, for the next page. |
Returns the runs and a nextCursor while more remain.
“Has the weekly digest been running, and did the last run work?”
edisyl schedule runs <schedule> [--pack <pack>] [--limit <n>]| Flag | Behavior |
|---|---|
--limit <n> |
The most runs to return. Default 20. |
--pack <pack> |
Look for the schedule on this pack only. |
Pause and resume a schedule
Section titled “Pause and resume a schedule”schedule_pause stops a schedule from firing while keeping it and its history. Pausing a paused schedule does nothing.
schedule_resume puts a paused schedule back on its cadence, starting now. Fires missed while it was paused are not run later.
| Input | Type | Required | Meaning |
|---|---|---|---|
scheduleId |
string (UUID) | Yes | The schedule’s id. |
Permission: pausing and resuming need steer access on the pack.
“Pause the weekly digest until the launch is over.”
edisyl schedule pause <schedule> # stop firing, keep itedisyl schedule resume <schedule>Both take --pack <pack> and --quiet.
Delete a schedule
Section titled “Delete a schedule”schedule_delete retires a schedule. A schedule that never ran is removed (removed: true). A schedule that has run is paused instead (removed: false). schedule_runs can still read its history. Check removed to see which happened. To stop work for a while, use schedule_pause.
| Input | Type | Required | Meaning |
|---|---|---|---|
scheduleId |
string (UUID) | Yes | The schedule’s id. |
Permission: needs steer access on the pack.
“Delete the launch report schedule.”
edisyl schedule delete <schedule>Removes a schedule only if it has never run. A schedule with run history is paused instead. Its runs and the Actions they created stay readable, and you can resume it. Takes --pack <pack> and --quiet.
Was this page helpful?
Thanks for the feedback.
