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

  1. Change acpxAgent to 'codex' or 'claude' in the request.
  2. Remove the acpxAgent field entirely if the default ACPX agent is acceptable.
  3. Update the eval pipeline/matrix to exclude the Pi profile.
  4. 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

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


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