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
- 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.