paperclipai/paperclip · error · Error
ACPX Claude requires Linux x64 or macOS ARM64/x64.
Error message
ACPX Claude requires Linux x64 or macOS ARM64/x64.
What it means
Thrown by `testEnvironment` after a successful remote platform probe when the reported OS/architecture is not one of the supported ACPX Claude platforms: Linux x86_64, or Darwin (macOS) on arm64 or x86_64. ACPX Claude's native runner only ships for these platforms, so unsupported hosts are rejected up front.
Source
Thrown at server/src/adapters/registry.ts:418
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 {
adapterType: "paperclip_runner", status: "fail" as const, testedAt: new Date().toISOString(),
checks: [{ code: "acpx_runtime_unavailable", level: "error" as const, message: error instanceof Error ? error.message : "ACPX Claude runtime could not be verified." }],
};View on GitHub (pinned to 01ad858492)
Solutions
- Run the runner on a supported platform: Linux x64 or macOS ARM64/x64.
- If on Apple Silicon, run the runner natively (Darwin/arm64) rather than in a Linux VM/container.
- Check the probe output for shell banners that corrupt the `os arch` parse; run the command directly to compare.
- Use a non-ACPX provider for unsupported platforms.
Example fix
// before
executionTarget: { kind: "remote", host: "arm-linux-box", remoteCwd: "/srv/runner" }
// after
executionTarget: { kind: "remote", host: "linux-x64-box", remoteCwd: "/srv/runner" } Defensive patterns
Strategy: validation
Validate before calling
const [os, arch] = (await ssh(target, "uname -s && uname -m")).stdout.trim().split(/\s+/);
const supported = (os === "Linux" && arch === "x86_64") || (os === "Darwin" && ["arm64", "x86_64"].includes(arch));
if (!supported) throw new Error(`host ${os}/${arch} unsupported for ACPX Claude`); Type guard
function isSupportedAcpxPlatform(os, arch) {
return (os === "Linux" && arch === "x86_64") || (os === "Darwin" && ["arm64", "x86_64"].includes(arch));
} Try / catch
try {
await registry.testEnvironment(profile, context);
} catch (err) {
if (err.message.includes("requires Linux x64 or macOS")) {
await reassignExecutionTargetToSupportedPlatform(profile);
} else throw err;
} Prevention
- Document supported platforms (Linux x64, macOS ARM64/x64) wherever remote targets are configured.
- Probe uname at target-registration time, not just at test time.
- Route ARM Linux workloads to a provider that supports aarch64.
When it happens
Trigger: Remote ACPX probe succeeds (`uname -s && uname -m` returns 0) but the parsed `os`/`arch` pair is not `Linux/x86_64`, `Darwin/arm64`, or `Darwin/x86_64` — e.g. Linux aarch64, Windows, FreeBSD, or Alpine reporting an unexpected arch string.
Common situations: Pointing the ACPX Claude runner at an ARM Linux box (e.g. AWS Graviton, Raspberry Pi, Apple Silicon Linux container); targeting a Windows remote; musl/Alpine reporting unusual arch values; misparsed stdout because the remote shell prints extra banners.
Understand the failure class
Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.
Related errors
- ACPX ${input.profile.agent} verified runtime executable is u
- Could not verify the remote ACPX runner platform.
- [opencode-local] Remote `opencode models` returned no models
- Adapter declares unsupported UI parser contract version — sk
- Native ACPX backend for pi is unavailable until descriptor-c
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/675f6a04b656be3d.
Report an issue: GitHub.