paperclipai/paperclip · error

Failed to ${action} exe.dev VM ${vmName}: ${result.stderr.tr

Error message

Failed to ${action} exe.dev VM ${vmName}: ${result.stderr.trim() || result.stdout.trim() || "unknown error"}

What it means

SSH failure surfacing via formatSshFailure: the `sh -lc` command run over SSH to detect the VM's home dir and shell either timed out or exited non-zero, and its trimmed stderr/stdout (or 'unknown error') is reported. The detected homeDir/shellCommand are required to build later commands, so detection failure aborts the flow.

Source

Thrown at packages/plugins/sandbox-providers/exe-dev/src/plugin.ts:657

    });
  } finally {
    await identity.cleanup();
  }
}

async function detectRemoteContext(
  config: ExeDevDriverConfig,
  vm: ExeDevVmRecord,
): Promise<{ homeDir: string; shellCommand: "bash" | "sh" }> {
  const result = await runSshCommand(
    config,
    vm,
    `sh -lc ${shellQuote(
      'home="${HOME:-}"; if [ -z "$home" ]; then home="$(pwd)"; fi; if command -v bash >/dev/null 2>&1; then shell=bash; else shell=sh; fi; printf "%s\\n%s\\n" "$home" "$shell"',
    )}`,
  );
  if (result.timedOut || result.exitCode !== 0) {
    throw new Error(formatSshFailure("inspect", vm.name, result));
  }

  const [homeDirRaw, shellRaw] = result.stdout.split(/\r?\n/);
  const homeDir = homeDirRaw?.trim() || "/tmp";
  return {
    homeDir,
    shellCommand: shellRaw?.trim() === "bash" ? "bash" : "sh",
  };
}

async function ensureRemoteWorkspace(
  config: ExeDevDriverConfig,
  vm: ExeDevVmRecord,
  remoteCwd: string,
): Promise<void> {
  const result = await runSshCommand(
    config,
    vm,

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Inspect the stdout/stderr in the message, fix the VM operation, and retry.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/plugins/sandbox-providers/exe-dev/src/plugin.ts:655 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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