paperclipai/paperclip · error · Error
Could not verify the remote ACPX runner platform.
Error message
Could not verify the remote ACPX runner platform.
What it means
Thrown by `testEnvironment` when the remote ACPX platform probe fails. For remote execution targets, the registry runs `uname -s && uname -m` via `runAdapterExecutionTargetShellCommand` with a 15s timeout; if the probe times out or exits non-zero, the remote platform cannot be verified and this error is raised.
Source
Thrown at server/src/adapters/registry.ts:415
status: "fail" as const,
testedAt: new Date().toISOString(),
checks: [{
code: profileError.code,
level: "error" as const,
message: profileError.message,
}],
};
}
if (profile.provider === "acpx") {
try {
if (profile.acpxAgent !== "claude") throw new Error("Select Codex to use the native Codex runner.");
const target = context.executionTarget;
if (target?.kind === "remote") {
const probe = await runAdapterExecutionTargetShellCommand(
`acpx-platform-${crypto.randomUUID()}`, target, "uname -s && uname -m",
{ cwd: target.remoteCwd, env: {}, timeoutSec: 15 },
);
if (probe.timedOut || probe.exitCode !== 0) throw new Error("Could not verify the remote ACPX runner platform.");
const [os, arch] = probe.stdout.trim().split(/\s+/);
if (!((os === "Linux" && arch === "x86_64") || (os === "Darwin" && ["arm64", "x86_64"].includes(arch ?? "")))) {
throw new Error("ACPX Claude requires Linux x64 or macOS ARM64/x64.");
}
return {
adapterType: "paperclip_runner", status: "warn" as const, testedAt: new Date().toISOString(),
checks: [{ code: "acpx_remote_runtime_unverified", level: "warn" as const,
message: "The remote platform is supported. Runtime package integrity and readiness must still be verified by the remote runner before launch." }],
};
}
const { probeAcpxClaudeInstallation } = await import("@paperclipai/paperclip-runner/live");
await probeAcpxClaudeInstallation(profile.model);
return {
adapterType: "paperclip_runner", status: "pass" as const, testedAt: new Date().toISOString(),
checks: [{ code: "acpx_runtime_ready", level: "info" as const, message: "ACPX Claude runtime is installed and verified. Model access is checked when Claude runs." }],
};
} catch (error) {
return {View on GitHub (pinned to 01ad858492)
Solutions
- Verify the remote host is reachable (ping/SSH manually) and credentials work.
- Confirm `remoteCwd` exists on the remote host and the shell can execute `uname` there.
- Increase the 15s `timeoutSec` if the link is slow, or retry once connectivity improves.
- Check proxy/firewall/VPN settings between the control plane and the remote runner.
Example fix
// before
const probe = await runAdapterExecutionTargetShellCommand(
`acpx-platform-${crypto.randomUUID()}`, target, "uname -s && uname -m",
{ cwd: target.remoteCwd, env: {}, timeoutSec: 15 },
);
// after
const probe = await runAdapterExecutionTargetShellCommand(
`acpx-platform-${crypto.randomUUID()}`, target, "uname -s && uname -m",
{ cwd: target.remoteCwd, env: {}, timeoutSec: 60 },
); Defensive patterns
Strategy: retry
Validate before calling
const probe = await ssh(target, "uname -s && uname -m", { timeoutSec: 15 });
if (probe.code !== 0) throw new Error("remote host unreachable before ACPX test"); Try / catch
try {
await registry.testEnvironment(profile, context);
} catch (err) {
if (err.message.includes("Could not verify the remote ACPX runner platform")) {
await checkSshConnectivity(target); // diagnose then retry
} else throw err;
} Prevention
- Pre-flight SSH connectivity and credentials before running adapter tests.
- Ensure remoteCwd exists on the remote host.
- Size the probe timeout for your network latency.
When it happens
Trigger: Testing an ACPX profile whose `context.executionTarget.kind === "remote"` and the shell probe returns `probe.timedOut === true` or `probe.exitCode !== 0` — e.g. SSH connectivity failure, remote shell unavailable, `uname` missing, or auth failure to the remote host.
Common situations: Remote host offline or unreachable over the network; SSH key/credentials misconfigured; remote cwd does not exist so the command fails; firewall or VPN blocking the connection; 15s timeout too short for a slow link.
Related errors
- ACPX Claude requires Linux x64 or macOS ARM64/x64.
- [opencode-local] Remote `opencode models` returned no models
- No Tailscale address was detected during setup. The saved co
- No Tailscale address was detected during setup. The saved co
- Anthropic Managed Agents request failed with HTTP ${response
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/73b4ff8599527174.
Report an issue: GitHub.