paperclipai/paperclip · error · ToolRuntimeSupervisorError

runtime_restart_backoff

runtime_restart_backoff

Error message

Runtime restart backoff is active

What it means

assertRestartAllowed backoff: metadata restartBackoffUntil (set after a recent crash/exit) is still in the future, so an immediate restart attempt is refused with 429. Wait out the exponential backoff window; the slot will become restartable once the backoff expires.

Source

Thrown at server/src/services/tool-runtime-supervisor.ts:320

        { reasonCode, companyCount, hostCount, maxCompanySlots, maxHostSlots },
      );
    }
  }

  function assertRestartAllowed(row: typeof toolRuntimeSlots.$inferSelect, metadata: Record<string, unknown>) {
    const at = now();
    const suppressedUntil = dateValue(metadata.restartSuppressedUntil);
    if (suppressedUntil && suppressedUntil.getTime() > at.getTime()) {
      throw new ToolRuntimeSupervisorError(
        429,
        "Runtime restart storm suppression is active",
        "runtime_restart_suppressed",
        { slotId: row.id, suppressedUntil: suppressedUntil.toISOString() },
      );
    }
    const backoffUntil = dateValue(metadata.restartBackoffUntil);
    if (backoffUntil && backoffUntil.getTime() > at.getTime()) {
      throw new ToolRuntimeSupervisorError(
        429,
        "Runtime restart backoff is active",
        "runtime_restart_backoff",
        { slotId: row.id, backoffUntil: backoffUntil.toISOString() },
      );
    }
  }

  function restartMetadata(row: typeof toolRuntimeSlots.$inferSelect, metadata: Record<string, unknown>, reason: string) {
    const at = now();
    const windowStartedAt = dateValue(metadata.restartWindowStartedAt);
    const inSameWindow = windowStartedAt && at.getTime() - windowStartedAt.getTime() <= restartStormWindowMs;
    const restartCount = inSameWindow ? numberValue(metadata.restartCount) + 1 : 1;
    const suppressed = restartCount > restartStormLimit;
    const backoffMs = restartBackoffMs === 0
      ? 0
      : Math.min(restartBackoffMaxMs, restartBackoffMs * (2 ** Math.max(0, restartCount - 1)));
    return {

View on GitHub (pinned to 120ae5428f)

Solutions

  1. Restart backoff is active for this runtime. Wait for the backoff window to expire before retrying; investigate the repeated failure cause.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at server/src/services/tool-runtime-supervisor.ts:320 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18). Data as JSON: /api/errors/7e6a63502ad053ea. Report an issue: GitHub.