paperclipai/paperclip · error

The Pi ACPX profile is not available

Error message

The Pi ACPX profile is not available

What it means

CapabilityLiveSession.create refuses to start a live session for the 'acpx' provider with acpxAgent 'pi'. The Pi profile is intentionally disabled/unavailable in this runner build, so requesting it is rejected up front instead of failing later in transport setup.

Source

Thrown at packages/paperclip-runner/src/live/live-session.ts:865

}

export class CapabilityLiveSessionService {
  readonly #store: CapabilityLiveSessionStore;
  readonly #transportFactory: CapabilityLiveTransportFactory;
  readonly #transportOptions: CapabilityRunnerdCodexTransportOptions;
  readonly #now: () => Date;
  readonly #sessions = new Map<string, CapabilityLiveSession>();

  constructor(options: CapabilityLiveSessionServiceOptions = {}) {
    this.#store = options.store ?? new InMemoryCapabilityLiveSessionStore();
    this.#transportFactory = options.transportFactory ?? createCapabilityRunnerdCodexTransport;
    this.#transportOptions = options.transportOptions ?? {};
    this.#now = options.now ?? (() => new Date());
  }

  async create(input: CreateCapabilityLiveSessionInput = {}): Promise<CapabilityLiveSession> {
    if (input.provider === "acpx" && input.acpxAgent === "pi") {
      throw new Error("The Pi ACPX profile is not available");
    }
    if (input.provider === "claude_managed" && !input.managedProfile) {
      throw new Error("Claude Managed live sessions require a qualified managed profile");
    }
    if (input.provider === "aws_agentcore" && !input.agentCoreProfile) {
      throw new Error("AWS AgentCore live sessions require a qualified AgentCore profile");
    }
    if (
      (input.provider === "claude_managed" || input.provider === "aws_agentcore") &&
      !input.requestedModel?.trim()
    ) {
      throw new Error("Managed live sessions require an explicit qualified model");
    }
    const port = new CapabilityMockControlPlaneAdapter(input.seed);
    const seedState = port.serialize();
    await port.start();
    const state = port.snapshot();
    const sessionId = input.sessionId ?? randomUUID();

View on GitHub (pinned to 01ad858492)

Solutions

  1. Switch to a supported acpxAgent (e.g. another available ACPX agent profile) or a different provider
  2. Remove 'pi' from any config/eval matrix that enumerates ACPX agents
  3. If pi support is needed, upgrade the runner package or check whether the profile was removed intentionally
  4. Guard the call site so pi is skipped/marked unavailable rather than attempted

Example fix

// before
await liveSession.create({ provider: 'acpx', acpxAgent: 'pi' });
// after
const ACPX_AGENTS = ['gemini', 'codex']; // supported profiles
if (!ACPX_AGENTS.includes(agent)) throw new Error(`acpx agent ${agent} unavailable`);
await liveSession.create({ provider: 'acpx', acpxAgent: agent });
Defensive patterns

Strategy: validation

Validate before calling

if (provider === 'acpx' && acpxAgent === 'pi') throw new Error('pi ACPX profile unavailable; pick a supported agent');

Type guard

function isSupportedAcpxAgent(agent: string): boolean {
  return agent !== 'pi';
}

Try / catch

try {
  await liveSession.create(input);
} catch (err) {
  if (err instanceof Error && err.message === 'The Pi ACPX profile is not available') {
    // mark this candidate unavailable and continue
  } else throw err;
}

Prevention

When it happens

Trigger: Calling create({ provider: 'acpx', acpxAgent: 'pi', ... }) or any caller (session/first/reset helpers) that passes the pi ACPX agent profile.

Common situations: Config or eval matrix enumerates all ACPX agents including pi; stale config left over from when pi was supported; docs/examples referencing the pi profile.

Related errors


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