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 === undefinedView on GitHub (pinned to 5716fe907e)
Solutions
- Pass a non-empty agentCoreProfileId in the harness configuration payload.
- Configure the AgentCore profile server-side so the 'default' id resolves.
- 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.