{"record":{"id":"675f6a04b656be3d","repo":"paperclipai/paperclip","slug":"acpx-claude-requires-linux-x64-or-macos-arm64-x64","errorCode":null,"errorMessage":"ACPX Claude requires Linux x64 or macOS ARM64/x64.","messagePattern":"ACPX Claude requires Linux x64 or macOS ARM64/x64\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/adapters/registry.ts","lineNumber":418,"sourceCode":"          code: profileError.code,\n          level: \"error\" as const,\n          message: profileError.message,\n        }],\n      };\n    }\n    if (profile.provider === \"acpx\") {\n      try {\n        if (profile.acpxAgent !== \"claude\") throw new Error(\"Select Codex to use the native Codex runner.\");\n        const target = context.executionTarget;\n        if (target?.kind === \"remote\") {\n          const probe = await runAdapterExecutionTargetShellCommand(\n            `acpx-platform-${crypto.randomUUID()}`, target, \"uname -s && uname -m\",\n            { cwd: target.remoteCwd, env: {}, timeoutSec: 15 },\n          );\n          if (probe.timedOut || probe.exitCode !== 0) throw new Error(\"Could not verify the remote ACPX runner platform.\");\n          const [os, arch] = probe.stdout.trim().split(/\\s+/);\n          if (!((os === \"Linux\" && arch === \"x86_64\") || (os === \"Darwin\" && [\"arm64\", \"x86_64\"].includes(arch ?? \"\")))) {\n            throw new Error(\"ACPX Claude requires Linux x64 or macOS ARM64/x64.\");\n          }\n          return {\n            adapterType: \"paperclip_runner\", status: \"warn\" as const, testedAt: new Date().toISOString(),\n            checks: [{ code: \"acpx_remote_runtime_unverified\", level: \"warn\" as const,\n              message: \"The remote platform is supported. Runtime package integrity and readiness must still be verified by the remote runner before launch.\" }],\n          };\n        }\n        const { probeAcpxClaudeInstallation } = await import(\"@paperclipai/paperclip-runner/live\");\n        await probeAcpxClaudeInstallation(profile.model);\n        return {\n          adapterType: \"paperclip_runner\", status: \"pass\" as const, testedAt: new Date().toISOString(),\n          checks: [{ code: \"acpx_runtime_ready\", level: \"info\" as const, message: \"ACPX Claude runtime is installed and verified. Model access is checked when Claude runs.\" }],\n        };\n      } catch (error) {\n        return {\n          adapterType: \"paperclip_runner\", status: \"fail\" as const, testedAt: new Date().toISOString(),\n          checks: [{ code: \"acpx_runtime_unavailable\", level: \"error\" as const, message: error instanceof Error ? error.message : \"ACPX Claude runtime could not be verified.\" }],\n        };","sourceCodeStart":400,"sourceCodeEnd":436,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/server/src/adapters/registry.ts#L400-L436","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nexecutionTarget: { kind: \"remote\", host: \"arm-linux-box\", remoteCwd: \"/srv/runner\" }\n// after\nexecutionTarget: { kind: \"remote\", host: \"linux-x64-box\", remoteCwd: \"/srv/runner\" }","handlingStrategy":"validation","validationCode":"const [os, arch] = (await ssh(target, \"uname -s && uname -m\")).stdout.trim().split(/\\s+/);\nconst supported = (os === \"Linux\" && arch === \"x86_64\") || (os === \"Darwin\" && [\"arm64\", \"x86_64\"].includes(arch));\nif (!supported) throw new Error(`host ${os}/${arch} unsupported for ACPX Claude`);","typeGuard":"function isSupportedAcpxPlatform(os, arch) {\n  return (os === \"Linux\" && arch === \"x86_64\") || (os === \"Darwin\" && [\"arm64\", \"x86_64\"].includes(arch));\n}","tryCatchPattern":"try {\n  await registry.testEnvironment(profile, context);\n} catch (err) {\n  if (err.message.includes(\"requires Linux x64 or macOS\")) {\n    await reassignExecutionTargetToSupportedPlatform(profile);\n  } else throw err;\n}","preventionTips":["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."],"tags":["platform","acpx","remote","compatibility"],"backgroundTag":"unsupported-platform","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}