Running & managing tasks
A schedule is not the only way to start a task, and it is not something you have to live with once set. Everything below is available in both the dashboard and the CLI.
Run now
Any deployed task can be run on demand, whether or not it has a schedule. In the dashboard, use the run button on the agent row. From the CLI:
# Start a run and return immediately
afy agents run nightly-report
# Pass input and block until it finishes
afy agents run nightly-report --payload '{"date":"2026-07-17"}' --wait
# Or read the payload from a file
afy agents run nightly-report --payload-file ./input.json --wait--payload/-ptakes inline JSON;--payload-file/-freads it from a file. Use one or the other, not both.--waitblocks until the run ends and exits 0 on success, 1 on failure — which makesafy agents run ... --waitusable as a CI step.
--wait gives up watching after 30 minutes and exits 0 with a warning — the run itself keeps going. For tasks that can run long, check the outcome with afy agents runs rather than relying on the watch.
A manual run is not a schedule event: it does not consume, shift, or record against the schedule. The next scheduled run happens exactly when it would have anyway.
Pause and resume a schedule
Pausing stops scheduled runs without touching your aetherfy.yaml or the agent itself. Manual runs still work while paused. In the dashboard this is the pause control on the agent row; the next-run cell then reads Paused.
# Stop scheduled runs; manual runs still work
afy agents schedule pause nightly-report
# Resume — the next run is the next future occurrence
afy agents schedule resume nightly-reportResuming never back-fills. A schedule paused for a week does not fire a week of runs when you resume it — the next run is simply the next future occurrence. Both commands are safe to repeat; pausing an already-paused schedule changes nothing.
Overlaps and missed windows
A schedule is a heartbeat, not a work queue. Occurrences that cannot run are dropped, never queued:
- Overlap. If the previous run is still going when the next one is due, that occurrence is skipped. Runs never stack up, and a task that occasionally overruns its interval cannot snowball into a pile of concurrent machines.
- Missed window. If an occurrence could not be evaluated in time, it is recorded as missed and the schedule skips to the next future occurrence. There is no catch-up burst.
If you need every single occurrence to be processed, a schedule is the wrong tool — use a durable queue and let a task drain it.
Run history
The dashboard shows a RUN HISTORY drawer per agent, with columns WHEN · TRIGGER · STATE · DURATION · LOGS. The CLI shows the same list:
# Recent runs, newest first (default 20, max 100)
afy agents runs nightly-report --limit 50
# Logs for one specific run
afy logs nightly-report --run <run-id>History covers scheduled and on-demand runs — the TRIGGER column reads scheduled or manual. Workers spawned by a parent agent are not listed here; they belong to the parent's history.
Run states
| State | Meaning |
|---|---|
| ACTIVE | the run is executing right now |
| COMPLETED | finished with exit code 0 |
| FAILED | exited non-zero, crashed, or hit the 60-minute backstop |
Runs are briefly QUEUED and DEPLOYING on their way to ACTIVE.
Last-fire badges
Next to the schedule, the dashboard shows what happened at the most recent occurrence:
| Badge | Meaning |
|---|---|
| FIRED | a run was started — see run history for how it ended |
| SKIPPED | the previous run was still in flight |
| MISSED | the occurrence could not fire — e.g. a plan limit, or a window that elapsed before it could be evaluated |
A badge describes the fire, not the outcome. FIREDmeans a run started; whether it succeeded is the run's own state. Skipped and missed occurrences never create a run, so they cost nothing.
Per-run logs
Every history row deep-links to that run's logs in the dashboard, filtered to just that run. From the CLI, pass the run id from afy agents runs to afy logs --run. This is the fastest path from "last night's run failed" to the traceback that explains it.
Limits and billing behavior
- A schedule adds no charge of its own. You pay for the runs' compute, and your spend limit applies to it like any other usage.
- Scheduled tasks are agents, so how many you can have is bounded by your plan's agent allowance — not by a separate schedule quota.
When your account is over its usage limit — or has an unresolved payment issue — scheduled occurrences are recorded as MISSED instead of firing, and the dashboard shows "Scheduled runs are blocked: plan limit reached." on the agent.
Nothing is lost and nothing needs re-enabling: raise your spend limit, upgrade, or settle the payment, and the next occurrence fires normally. The banner clears itself on the next successful fire. Missed occurrences are not backfilled.