paperclipai/paperclip · error

remote session deletion requires a connected remote provider

Error message

remote session deletion requires a connected remote provider session

What it means

deleteManagedRemoteSession requires a connected remote managed provider session; the guard rejects the call when the provider is not claude_managed/aws_agentcore or the transport is null. There is no remote session to destroy otherwise, so the call fails explicitly.

Source

Thrown at packages/paperclip-runner/src/live/live-session.ts:2100

      this.#config.agentCoreProfile.maxEstimatedSessionCostUsd =
        maxSessionListCostUsd;
    }
    this.#status = this.#activeTurnId === null ? "warm_idle" : "running";
    this.#appendEvidence("session", this.#activeTurnId, {
      action: "budget_increased",
      maxSessionListCostUsd,
    });
    await this.#persist();
    return this.snapshot();
  }

  async deleteManagedRemoteSession(): Promise<CapabilityLiveSessionSnapshot> {
    if (
      (this.#config.provider !== "claude_managed" &&
        this.#config.provider !== "aws_agentcore") ||
      this.#transport === null
    ) {
      throw new Error(
        "remote session deletion requires a connected remote provider session",
      );
    }
    if (
      this.#activeTurnId !== null ||
      this.#turnWaiter !== null ||
      this.#pendingTurnAdmission !== null
    ) {
      throw new Error(
        "interrupt the active turn before deleting the remote session",
      );
    }
    await this.#transport.request("session/destroy", {});
    this.#providerSessionId = null;
    this.#authority.active = false;
    this.#status = "closed";
    this.#appendEvidence("cleanup", null, {
      reason: "remote session explicitly deleted",

View on GitHub (pinned to 01ad858492)

Solutions

  1. Only call deleteManagedRemoteSession for claude_managed/aws_agentcore sessions with an active connection
  2. Check provider and connection state (snapshot/flags) before calling
  3. Wrap in try/catch in cleanup paths where the session may already be gone
  4. Reconnect the transport first if deletion must proceed after a disconnect

Example fix

// before
await session.deleteManagedRemoteSession(); // cleanup, may throw
// after
const snap = session.snapshot();
if ((snap.provider === 'claude_managed' || snap.provider === 'aws_agentcore') && snap.connected) {
  await session.deleteManagedRemoteSession().catch(() => {});
}
Defensive patterns

Strategy: try-catch

Validate before calling

const isManaged = cfg.provider === 'claude_managed' || cfg.provider === 'aws_agentcore';
if (!isManaged || !session.isConnected?.()) return; // nothing to delete remotely

Try / catch

try {
  await session.deleteManagedRemoteSession();
} catch (err) {
  if (err instanceof Error && err.message.includes('remote session deletion requires')) {
    // session already local/disconnected; treat as already deleted
  } else throw err;
}

Prevention

When it happens

Trigger: Calling deleteManagedRemoteSession on a local/mock provider session, or on a managed session whose transport was never connected or has since been disconnected/nullified.

Common situations: Cleanup/shutdown code that unconditionally deletes remote sessions; calling delete after the remote connection already dropped; provider switched away from managed without updating cleanup logic.

Related errors


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-02). Data as JSON: /api/errors/96b36797964cd8cc. Report an issue: GitHub.