Sume skipped run with previous_run_active: what it means, what to do
A scheduled Sume run is skipped with skip_reason previous_run_active when the last one is still going. It is not billed work. How to detect it and avoid it.

It means the previous run of that schedule had not finished when the next fire came, so Sume did not start another one. The new run has status skipped, skip_reason of previous_run_active and is never started. The fix is to fire less often than a run takes, not to retry the skipped run.
Read the status first
The run lifecycle is queued, processing, then one of completed, failed, canceled or skipped. Branch on the status and not on the presence of output, because output is null unless the status is completed or failed.
| Status | Meaning | Output populated? | Your action |
|---|---|---|---|
| completed | Finished | Yes | Use output |
| failed | Finished with an error | Maybe | Read error and output_error |
| canceled | A cancel stopped it | No | Stop |
| skipped | Another run was active | No | Widen the interval |
def handle(run: dict) -> str:
status = run["status"]
if status == "skipped":
return "widen the interval: " + str(run.get("skip_reason"))
if status == "completed":
return "use output"
if status == "failed":
return "alert: " + str((run.get("error") or {}).get("code"))
return status
print(handle({"status": "skipped", "skip_reason": "previous_run_active"}))
Webhooks do not cover cancel
A webhook also tells you when a run ends. A canceled run sends no webhook, so poll status_url after you cancel. See Run webhooks.
Check the docs before you ship
Sume's limits and field names change faster than blog posts do. Read the linked docs pages for the current request fields before you ship, and send a dry_run or a low spend cap on your first real call.
Sources
Related posts
More in Agents
- Sonnet 5.5 vs GPT-6.1 Sol for video scripts: both $2 in, $10 out
Claude Sonnet 5.5 and GPT-6.1 Sol list the same $2 input and $10 output per million tokens (read 2026-10-05), so pick on fit, not price.
- Spend guard layers for an unattended Sume video agent, in order
Five layers cap a Sume agent that runs unattended: key scope, per-run cap, max_spend_usd and dry_run, generation admission, and the wallet. What each one stops.
- One Sume schedule on a clock and on call: api_trigger_enabled
A Sume cron schedule can also set api_trigger_enabled to accept API runs. trigger_type is fixed at create time, so choose once. Overlap defaults to skip.
- What a Sume MCP create result tells the agent to call next
A Sume MCP create result carries agent.next_step: jobs_wait with the job_id and timeout 50, plus poll_after_seconds 5. Follow it; do not resubmit.
Written by Sume