paperclipai/paperclip · error · RouteError

invalid_agentcore_profile

invalid_agentcore_profile

Error message

AWS AgentCore requires a qualified profile ID.

What it means

Guard in harnessConfiguration: an aws_agentcore request resolved to an empty agentCoreProfileId (payload omitted it and no default qualified profile was configured), so RouteError(400,'invalid_agentcore_profile') is thrown. AWS AgentCore cannot launch without an identified remote-agent profile.

Source

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

    : 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)) {
    throw new RouteError(400, "invalid_spend_cap", "AWS AgentCore requires a positive session spend ceiling.");
  }
  const suppliedLifecycle = source.lifecyclePolicy && typeof source.lifecyclePolicy === "object"
    ? source.lifecyclePolicy
    : source;
  const lifecycleMode = suppliedLifecycle.mode === undefined
    ? source.lifecycleMode === undefined ? "warm" : String(source.lifecycleMode).trim()
    : String(suppliedLifecycle.mode).trim();
  if (lifecycleMode !== "per_turn" && lifecycleMode !== "warm") {
    throw new RouteError(400, "invalid_lifecycle_mode", "Execution mode must be per_turn or warm.");
  }
  let lifecyclePolicy;
  if (lifecycleMode === "per_turn") {
    lifecyclePolicy = { mode: "per_turn", idleTimeoutMs: null };
  } else {
    const rawIdleTimeout = suppliedLifecycle.idleTimeoutMs === undefined

View on GitHub (pinned to 5716fe907e)

Solutions

  1. Pass a non-empty agentCoreProfileId in the harness configuration payload.
  2. Configure the AgentCore profile server-side so the 'default' id resolves.
  3. Choose a different provider (codex, opencode, acpx) if no AgentCore profile exists.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/paperclip-runner/scripts/capability-issue-thread-server.mjs:262 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/779941be66c95bce. Report an issue: GitHub.