paperclipai/paperclip · error
The Pi ACPX profile is not available
Error message
The Pi ACPX profile is not available
What it means
The Pi ACPX agent profile is explicitly disallowed in eval-session requests. parseEvalSessionRequest fail-closed rejects input.acpxAgent === 'pi' before any other acpxAgent validation, so Pi can never reach CapabilityLiveSessionService even though other ACPX agents (codex, claude) are accepted. The library throws this to guarantee only qualified ACPX profiles run at the executable boundary.
Source
Thrown at packages/paperclip-runner/src/cli/eval-session-contract.ts:240
providerValue !== "opencode" &&
providerValue !== "claude_managed" &&
providerValue !== "aws_agentcore" &&
providerValue !== "acpx"
) {
throw new Error(
"eval-session provider is unsupported by CapabilityLiveSessionService",
);
}
const provider = providerValue;
const driver = expectedEvalSessionDriver(provider);
if (input.driver !== undefined && input.driver !== driver) {
throw new Error("eval-session provider/driver mismatch");
}
// The original Evalbook v1 producer serialized absent provider-specific
// options as JSON null. Preserve compatibility with those immutable request
// artifacts while continuing to reject non-null values for the wrong lane.
const acpxAgent = input.acpxAgent === null ? undefined : input.acpxAgent;
if (acpxAgent === "pi") throw new Error("The Pi ACPX profile is not available");
if (
acpxAgent !== undefined &&
acpxAgent !== "codex" &&
acpxAgent !== "claude"
) {
throw new Error("eval-session acpxAgent must be codex or claude");
}
if (provider !== "acpx" && acpxAgent !== undefined) {
throw new Error("eval-session acpxAgent requires provider acpx");
}
const managedProfileInput = input.managedProfile === null
? undefined
: input.managedProfile;
const agentCoreProfileInput = input.agentCoreProfile === null
? undefined
: input.agentCoreProfile;
const managedProfile = provider === "claude_managed"
? parseManagedProfile(managedProfileInput)View on GitHub (pinned to 01ad858492)
Solutions
- Change acpxAgent to 'codex' or 'claude' in the request.
- Remove the acpxAgent field entirely if the default ACPX agent is acceptable.
- Update the eval pipeline/matrix to exclude the Pi profile.
- If Pi is genuinely required, check whether a newer version of paperclip-runner qualifies it — in this contract it is hard-rejected.
Example fix
// before
const request = { schema, provider: "acpx", acpxAgent: "pi", ... };
// after
const request = { schema, provider: "acpx", acpxAgent: "codex", ... }; Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED_ACPX_AGENTS = ["codex", "claude"] as const;
function assertAcpxAgentSupported(request: { provider?: string; acpxAgent?: string }): void {
if (request.acpxAgent === "pi") {
throw new Error("Pi ACPX profile is not available; use codex or claude");
}
if (request.acpxAgent !== undefined &&
!(SUPPORTED_ACPX_AGENTS as readonly string[]).includes(request.acpxAgent)) {
throw new Error(`acpxAgent must be one of ${SUPPORTED_ACPX_AGENTS.join("|")}`);
}
} Type guard
function isSupportedAcpxAgent(v: unknown): v is "codex" | "claude" {
return v === "codex" || v === "claude";
} Try / catch
try {
const parsed = parseEvalSessionRequest(raw);
} catch (err) {
if (err instanceof Error && err.message === "The Pi ACPX profile is not available") {
console.error("Request uses the retired Pi profile; switch acpxAgent to 'codex' or 'claude'.");
} else throw err;
} Prevention
- Keep an allowlist constant ('codex' | 'claude') in your request builder and type acpxAgent as that union.
- Exclude 'pi' from any eval matrix or agent enumeration configs.
- When copying ACPX configs, check for profile-specific fields before reusing them.
- Type acpxAgent as 'codex' | 'claude' | undefined so Pi is a compile-time error.
When it happens
Trigger: Submitting an eval-session request with provider 'acpx' and acpxAgent set to 'pi', typically via the eval-session CLI request path that calls parseEvalSessionRequest.
Common situations: Copy-pasting an ACPX config that previously used the Pi profile; enumerating agent names generically instead of using the supported set; a CI matrix listing 'pi' as an agent variant; switching agent profiles after Pi support was removed.
Related errors
- ${path} must be an object
- ${path} must be a non-empty string
- ${path} must be a positive safe integer
- ${path} must be a positive finite number
- request.managedProfile.betaVersion is not qualified
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/1d3ba213b82765ed.
Report an issue: GitHub.