paperclipai/paperclip · error · RouteError

invalid_managed_profile

invalid_managed_profile

Error message

Claude Managed requires a qualified profile ID.

What it means

Guard in harnessConfiguration: a claude_managed provider request resolved to an empty managedProfileId — neither the payload's managedProfileId nor PAPERCLIP_CLAUDE_MANAGED_PROFILE_ID supplied a qualified profile — so RouteError(400,'invalid_managed_profile') is thrown. Claude Managed cannot launch without an identified managed-agent profile.

Source

Thrown at packages/paperclip-runner/scripts/capability-issue-thread-server.mjs:246

    if (!(acpxAgent in ACPX_QUALIFIED_MODELS)) {
      throw new RouteError(400, "invalid_acpx_agent", "ACPX agent must be claude or codex.");
    }
    if (model !== ACPX_QUALIFIED_MODELS[acpxAgent]) {
      throw new RouteError(400, "invalid_model", `The qualified ACPX ${acpxAgent} profile requires exact model ${ACPX_QUALIFIED_MODELS[acpxAgent]}.`);
    }
  }
  const requestedManagedProfileId = source.managedProfileId === undefined || source.managedProfileId === null
    ? "default"
    : String(source.managedProfileId).trim();
  const configuredManagedProfileId = process.env.PAPERCLIP_CLAUDE_MANAGED_PROFILE_ID?.trim();
  const managedProfileId = provider === "claude_managed" && requestedManagedProfileId === "default" && configuredManagedProfileId
    ? configuredManagedProfileId
    : requestedManagedProfileId;
  const maxSessionListCostUsd = source.maxSessionListCostUsd === undefined || source.maxSessionListCostUsd === null
    ? 1
    : Number(source.maxSessionListCostUsd);
  if (provider === "claude_managed" && !managedProfileId) {
    throw new RouteError(400, "invalid_managed_profile", "Claude Managed requires a qualified profile ID.");
  }
  if (provider === "claude_managed" && (!Number.isFinite(maxSessionListCostUsd) || maxSessionListCostUsd <= 0)) {
    throw new RouteError(400, "invalid_spend_cap", "Claude Managed requires a positive session spend ceiling.");
  }
  const requestedAgentCoreProfileId = source.agentCoreProfileId === undefined || source.agentCoreProfileId === null
    ? "default"
    : String(source.agentCoreProfileId).trim();
  const configuredAgentCoreProfileId = process.env.PAPERCLIP_AWS_AGENTCORE_PROFILE_ID?.trim();
  const agentCoreProfileId = provider === "aws_agentcore" && requestedAgentCoreProfileId === "default" && configuredAgentCoreProfileId
    ? configuredAgentCoreProfileId
    : requestedAgentCoreProfileId;
  const maxEstimatedSessionCostUsd = source.maxEstimatedSessionCostUsd === undefined || source.maxEstimatedSessionCostUsd === null
    ? 1
    : Number(source.maxEstimatedSessionCostUsd);
  if (provider === "aws_agentcore" && !agentCoreProfileId) {
    throw new RouteError(400, "invalid_agentcore_profile", "AWS AgentCore requires a qualified profile ID.");
  }
  if (provider === "aws_agentcore" && (!Number.isFinite(maxEstimatedSessionCostUsd) || maxEstimatedSessionCostUsd <= 0)) {

View on GitHub (pinned to 5716fe907e)

Solutions

  1. Pass a non-empty managedProfileId in the harness configuration payload.
  2. Set the PAPERCLIP_CLAUDE_MANAGED_PROFILE_ID environment variable so the 'default' profile resolves.
  3. Switch the provider to codex/opencode/acpx if no Claude Managed profile is available.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/paperclip-runner/scripts/capability-issue-thread-server.mjs:246 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@5716fe907e (2026-09-02). Data as JSON: /api/errors/3e572c84e54296ea. Report an issue: GitHub.