paperclipai/paperclip · error

ACPX ${input.profile.agent} verified runtime executable is u

Error message

ACPX ${input.profile.agent} verified runtime executable is unavailable for ${process.platform} ${process.arch}

What it means

verifyQualifiedRuntimeExecutable is a security/integrity gate that only permits the ACPX runtime binary on platform/arch combinations the project has actually qualified and hash-pinned (linux/x64 for any agent, plus darwin arm64/x64 for claude). When the configured profile names a qualified runtime package and version but the current process is running on an unqualified platform/arch, the check deliberately refuses to proceed instead of executing an unverified binary.

Source

Thrown at packages/paperclip-runner/src/drivers/acpx/installation-integrity.ts:855

    input.profile.agent === "claude"
      ? process.platform === "darwin" && (process.arch === "arm64" || process.arch === "x64")
        ? QUALIFIED_CLAUDE_DARWIN_RUNTIMES[process.arch]
        : QUALIFIED_CLAUDE_LINUX_X64_RUNTIME
      : input.profile.agent === "codex"
        ? QUALIFIED_CODEX_LINUX_X64_RUNTIME
        : null;
  if (qualification === null) return null;
  if (
    input.profile.agentRuntimePackage !== qualification.runtimePackageName ||
    input.profile.agentRuntimeVersion !== qualification.runtimePackageVersion
  ) {
    throw new Error(
      `ACPX ${input.profile.agent} runtime does not match its qualified profile`,
    );
  }
  if (!((process.platform === "linux" && process.arch === "x64")
    || (input.profile.agent === "claude" && process.platform === "darwin" && (process.arch === "arm64" || process.arch === "x64")))) {
    throw new Error(
      `ACPX ${input.profile.agent} verified runtime executable is unavailable for ${process.platform} ${process.arch}`,
    );
  }

  const optionalDependencies = input.runtimePackage.optionalDependencies;
  if (
    typeof optionalDependencies !== "object" ||
    optionalDependencies === null ||
    Array.isArray(optionalDependencies) ||
    (optionalDependencies as Record<string, unknown>)[
      qualification.packageName
    ] !== qualification.dependencyDeclaration
  ) {
    throw new Error(
      `ACPX ${input.profile.agent} runtime omitted its verified platform executable package`,
    );
  }

View on GitHub (pinned to 01ad858492)

Solutions

  1. Run the ACPX runner on a qualified combination: linux x64 (any agent) or macOS arm64/x64 (claude only).
  2. If on ARM Linux or Windows, run under an x64 emulation layer (e.g. x86_64 container via Rosetta/QEMU) or a qualified x64 host.
  3. Verify the profile truly intends the qualified runtime; if a custom/local runtime is desired, route through the non-qualified path (qualification returns null) rather than a qualified profile name.
  4. Check process.platform/process.arch at startup and fail fast with a clear deployment-level message instead of reaching this deep integrity check.
  5. If a new platform genuinely should be supported, extend both the qualification map and this allowlist together with pinned digests upstream in the repo.

Example fix

// before (linux/arm64 host)
const profile = { agent: "codex", agentRuntimePackage: "@paperclip/acpx-codex-linux-x64", agentRuntimeVersion: "1.2.0" };
// after: run in an x64 container
// docker run --platform linux/amd64 paperclip ...
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED = (agent) =>
  (process.platform === "linux" && process.arch === "x64") ||
  (agent === "claude" && process.platform === "darwin" && ["arm64", "x64"].includes(process.arch));
if (!SUPPORTED(profile.agent)) {
  throw new Error(`ACPX agent '${profile.agent}' not qualified for ${process.platform} ${process.arch}; use linux/x64 or claude on macOS`);
}

Type guard

function isQualifiedPlatform(agent: string): boolean {
  return (process.platform === "linux" && process.arch === "x64") ||
    (agent === "claude" && process.platform === "darwin" && (process.arch === "arm64" || process.arch === "x64"));
}

Prevention

When it happens

Trigger: Running on any platform/arch outside {linux/x64} or {claude on darwin arm64|x64} — e.g. win32, linux/arm64 (Apple Silicon Docker on ARM hosts, Raspberry Pi, Graviton), darwin for codex, or freebsd — while the agent profile (profile.agent, agentRuntimePackage, agentRuntimeVersion) matches a qualified profile so verification is attempted at all.

Common situations: Deploying Paperclip into an ARM Linux container or ARM CI runner; running on macOS with the codex agent (only claude is qualified on darwin); Windows development machines; someone added a qualified runtime entry without extending the platform allowlist.

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


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10). Data as JSON: /api/errors/1e87adf3490dd03d. Report an issue: GitHub.