Significant-Gravitas/AutoGPT · warning · ExpertRunPausedError
{expert.name}'s schedules are paused.
Error message
{expert.name}'s schedules are paused. What it means
ExpertRunPausedError raised at scheduling.py:303 when expert.schedulesPausedAt is not None: schedules were previously paused (typically by the weekly-budget breach path or an explicit pause) and the pause has not been resumed. The run is refused at the gate before any cost is metered.
Source
Thrown at autogpt_platform/backend/backend/api/features/experts/scheduling.py:303
The spend read is a snapshot, not an atomic reservation: N runs firing
in the same instant can each pass the check before any of them meters
cost. That overshoot is bounded by per-run cost × concurrent firings,
the next gate check pauses her, and the durable wallet (credit system)
is charged correctly regardless — this gate is a churn guardrail, not
the billing ledger, so the simpler check is the deliberate trade-off.
"""
expert = await prisma.models.Expert.prisma().find_first(
where={"id": expert_id, "ownerUserId": user_id, "isTemplate": False}
)
if expert is None:
return
if expert.isArchived:
raise ExpertRunPausedError(
f"{expert.name} is archived; her schedules do not run.", expert_id
)
if expert.schedulesPausedAt is not None:
raise ExpertRunPausedError(f"{expert.name}'s schedules are paused.", expert_id)
budget = effective_weekly_budget(expert)
if budget is None:
return
spent = await get_weekly_spend(expert_id)
if spent >= budget:
await pause_expert_schedules(
user_id,
expert_id,
reason=f"Weekly credit budget reached ({spent}/{budget})",
)
await _post_budget_message(user_id, expert, spent, budget, breached=True)
raise ExpertRunPausedError(
f"{expert.name} hit her weekly credit budget ({spent}/{budget}); "
"schedules are paused until you resume them.",
expert_id,
)
if spent >= int(budget * _BUDGET_WARN_FRACTION):
await _post_budget_message(user_id, expert, spent, budget, breached=False)View on GitHub (pinned to 9c8bb5550f)
Solutions
- Call POST /experts/{expert_id}/schedules/resume (the one-click reversal route) and re-test the trigger.
- If the pause came from a budget breach, raise the expert's weekly budget or wait for the spend window to reset before resuming.
- Check the expert's state via GET /experts to distinguish paused vs archived before resuming.
Example fix
// before: trigger silently fails with 'schedules are paused'
// after: resume first, then fire
await api.post(`/experts/${expertId}/schedules/resume`);
await fireTrigger(); Defensive patterns
Strategy: validation
Validate before calling
expert = await get_expert(user_id, expert_id)
if expert and expert.schedules_paused_at is not None:
await resume_expert_schedules(user_id, expert_id) # clear the pause before firing Type guard
def schedule_runnable(e: Expert) -> bool:
return (not e.is_archived) and e.schedules_paused_at is None Try / catch
try:
await run_schedule(...)
except ExpertRunPausedError:
await resume_expert_schedules(user_id, expert_id) # or surface 'paused' to the user Prevention
- After any budget breach, call the resume endpoint once spend is acceptable again — pauses never auto-clear.
- Surface paused state in the expert UI so users know schedules are inert.
- Distinguish paused (resumable) from archived (needs re-hire) before acting.
When it happens
Trigger: A trigger fires for an expert whose schedulesPausedAt was set earlier — most commonly after error 188 (budget reached) auto-paused her, or after a user-initiated pause — before POST /experts/{id}/schedules/resume was called.
Common situations: User hit the weekly credit budget last week, budgets reset, but nobody resumed schedules; stale trigger still attached after a pause; confusion between archived (186) and paused (this) states.
Related errors
- {expert.name} is archived; her schedules do not run.
- {expert.name} hit her weekly credit budget ({spent}/{budget}
- Expert not found
- Failed to set tier
- Search query must be at least 3 characters.
AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14).
Data as JSON: /api/errors/ebaaf3ef77b1d789.
Report an issue: GitHub.