paperclipai/paperclip · error · Error
Missing live candidate for ${profile}
Error message
Missing live candidate for ${profile} What it means
For each selected profile the script resolves a live candidate via liveCandidate(profile, RUNNER_LIVE_CANDIDATE_SLOTS). If no candidate matches the profile's qualification slot, it throws this error naming the profile. This means the profile cannot be run live because no configured candidate supports it.
Source
Thrown at packages/paperclip-runner/scripts/run-local-provider-smoke.mjs:251
let failed = false;
try {
// Import only after the disposable homes are authoritative so no provider
// module can snapshot the developer's normal Paperclip or provider state.
const {
RUNNER_LIVE_CANDIDATE_SLOTS,
executeLiveRunnerWorkflow,
runnerWorkflowCase,
} = await import("../dist/eval/index.js");
const candidates = new Map(
profiles.map((profile) => [
profile,
liveCandidate(profile, RUNNER_LIVE_CANDIDATE_SLOTS),
]),
);
const credentialsByProfile = new Map();
for (const [profile, candidate] of candidates) {
if (!candidate) throw new Error(`Missing live candidate for ${profile}`);
const missingCredentials = [];
const profileCredentials = {};
for (const name of candidate.qualification.requiredEnvironment) {
const value = ambientEnvironment[name]?.trim();
if (value) profileCredentials[name] = value;
else missingCredentials.push(name);
}
if (missingCredentials.length > 0) {
throw new Error(
`${profile} requires ${missingCredentials.join(", ")} in the smoke process environment`,
);
}
credentialsByProfile.set(profile, profileCredentials);
}
const providerCredentialNames = new Set(
[...credentialsByProfile.values()].flatMap((credentials) =>
Object.keys(credentials),
),View on GitHub (pinned to 01ad858492)
Solutions
- Check RUNNER_LIVE_CANDIDATE_SLOTS in run-local-provider-smoke.mjs for the profile id and add/register a matching candidate slot if missing.
- Run a different profile that has a registered live candidate (e.g. runner-acpx-claude).
- If the profile id was renamed, update the slots map to use the new id.
Example fix
// before
RUNNER_LIVE_CANDIDATE_SLOTS = [{ profiles: ["runner-acpx-claude"], ... }]
// after
RUNNER_LIVE_CANDIDATE_SLOTS = [{ profiles: ["runner-acpx-claude", "runner-new"], ... }] Defensive patterns
Strategy: validation
Validate before calling
const slots = require('./run-local-provider-smoke.mjs'); // or read source
if (!RUNNER_LIVE_CANDIDATE_SLOTS.some(s => s.profiles.includes(profile))) console.warn(`no live candidate for ${profile}`); Prevention
- Register a slot for every new profile id
- Grep RUNNER_LIVE_CANDIDATE_SLOTS before adding profiles
- Keep profile ids and slot keys in sync on renames
When it happens
Trigger: Selecting a profile whose id has no entry in RUNNER_LIVE_CANDIDATE_SLOTS (or all entries fail liveCandidate's slot matching), e.g. a newly added profile in PROFILE_IDS without a corresponding live candidate slot.
Common situations: Adding a new smoke profile without registering its live candidate, or profile-id renames that left the slots map stale.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- OpenCode evals require exact version 1.18.17; received ${ver
- devUiUrl must use http or https protocol
- devUiUrl must target localhost
- Plugin tool dispatch is not enabled
- Existing Anthropic Agent model does not match the requested
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/ecaf05c9eb5b0206.
Report an issue: GitHub.