{"record":{"id":"73b4ff8599527174","repo":"paperclipai/paperclip","slug":"could-not-verify-the-remote-acpx-runner-platform","errorCode":null,"errorMessage":"Could not verify the remote ACPX runner platform.","messagePattern":"Could not verify the remote ACPX runner platform\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/adapters/registry.ts","lineNumber":415,"sourceCode":"        status: \"fail\" as const,\n        testedAt: new Date().toISOString(),\n        checks: [{\n          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 {","sourceCodeStart":397,"sourceCodeEnd":433,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/server/src/adapters/registry.ts#L397-L433","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nconst probe = await runAdapterExecutionTargetShellCommand(\n  `acpx-platform-${crypto.randomUUID()}`, target, \"uname -s && uname -m\",\n  { cwd: target.remoteCwd, env: {}, timeoutSec: 15 },\n);\n// after\nconst probe = await runAdapterExecutionTargetShellCommand(\n  `acpx-platform-${crypto.randomUUID()}`, target, \"uname -s && uname -m\",\n  { cwd: target.remoteCwd, env: {}, timeoutSec: 60 },\n);","handlingStrategy":"retry","validationCode":"const probe = await ssh(target, \"uname -s && uname -m\", { timeoutSec: 15 });\nif (probe.code !== 0) throw new Error(\"remote host unreachable before ACPX test\");","typeGuard":null,"tryCatchPattern":"try {\n  await registry.testEnvironment(profile, context);\n} catch (err) {\n  if (err.message.includes(\"Could not verify the remote ACPX runner platform\")) {\n    await checkSshConnectivity(target); // diagnose then retry\n  } else throw err;\n}","preventionTips":["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."],"tags":["remote","acpx","shell","network"],"backgroundTag":"network-request-failed","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"}