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
- Run the ACPX runner on a qualified combination: linux x64 (any agent) or macOS arm64/x64 (claude only).
- 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.
- 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.
- Check process.platform/process.arch at startup and fail fast with a clear deployment-level message instead of reaching this deep integrity check.
- 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
- Check process.platform/process.arch at deployment startup and refuse to configure ACPX agents on unqualified targets.
- Pin runner images to linux/amd64 (or native macOS for claude) in Docker/CI configs.
- Gate the codex agent to Linux x64 hosts only in provisioning scripts.
- Log platform info in health checks so mismatches are visible before the integrity check fires.
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
- ACPX provider package manifest resolves outside the selected
- ACPX provider node_modules resolves outside the selected pro
- ACPX ${input.profile.agent} runtime executable escapes its p
- ACPX ${agent} runtime executable must be a real regular file
- ACPX ${agent} runtime executable could not be opened as a no
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/1e87adf3490dd03d.
Report an issue: GitHub.