paperclipai/paperclip · error
Too many explicit skill inputs
Error message
Too many explicit skill inputs
What it means
Bound guard in the runnerd Codex skill-input resolution (resolveRunnerdCodexSkillInputs): the turn supplies more explicit skill inputs than the transport allows, so it refuses rather than materializing an unbounded set of controller-asset copies onto the provider filesystem. Generic validation — the input at fault is an oversized skills array on the turn request, usually from a caller bug or missing batching.
Solutions
- Reduce the number of explicit skill inputs attached to a single turn (split across turns or preselect the needed skills).
- Deduplicate the input list before sending — repeated skill entries often inflate the count.
- If a legitimate workload needs more skills, raise the documented cap in resolveRunnerdCodexSkillInputs.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:6623 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-09-18).
Data as JSON: /api/errors/d5ece1b77591ba7e.
Report an issue: GitHub.
Appendix: source
Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:6623
providerTurnIsActiveFromCommittedEvents,
recoveredRunAttachment,
releaseRunnerProcessOwnership,
runnerCloseDeadlines,
rotatedRunAttachPayload,
rotateExternalAuthorityEpoch,
turnStartCommandResultValid,
turnStartNotificationDisposition,
turnStartResponseReady,
});
/** Map controller asset paths to the assigned copy on the provider filesystem. */
export function resolveRunnerdCodexSkillInputs(
inputs: Record<string, unknown>[],
context: NativeRuntimeContextSnapshot | null,
codexHome: string,
): Array<{ type: "skill"; name: string; path: string }> {
if (inputs.length > 64) throw new Error("Too many explicit skill inputs");
const seen = new Set<string>();
return inputs.map((input) => {
const assigned = context?.skills.find((skill) => skill.runtimeName === input.name);
if (
!assigned || !/^[a-zA-Z0-9_-]+$/.test(assigned.runtimeName)
|| input.path !== resolve(assigned.bundle.rootPath, "SKILL.md")
|| seen.has(assigned.runtimeName)
) {
throw new Error("Explicit skill input must reference a unique assigned runtime skill");
}
seen.add(assigned.runtimeName);
return {
type: "skill",
name: assigned.runtimeName,
path: resolve(codexHome, "skills", assigned.runtimeName, "SKILL.md"),
};
});
}View on GitHub (pinned to 3f1d897a7c)