JuliusBrussee/caveman · error · Error

caveman build: generated no candidate plans

Error message

caveman build: generated no candidate plans

What it means

Error "caveman build: generated no candidate plans" thrown in JuliusBrussee/caveman.

Source

Thrown at packages/agent/src/build.ts:260

    true,
    new Map(),
    ENGINE_TRANSFORM_CAPABILITIES,
    new Set(input.evals.some((fixture) =>
      fixture.quality.some((grader) => grader.type === "tool_called"))
      ? ["history", "tool_result"] as ContextKind[]
      : []),
    // The public compile() enforces the same model/safety policy and catalog
    // pricing the CLI does — an unpriced or policy-denied model is rejected
    // here, not only in the CLI.
    {
      ...(input.config.allowedModels === undefined ? {} : { allowedModels: input.config.allowedModels }),
      ...(input.config.deniedModels === undefined ? {} : { deniedModels: input.config.deniedModels }),
      ...(input.config.forbiddenSafetyClasses === undefined
        ? {}
        : { forbiddenSafetyClasses: input.config.forbiddenSafetyClasses }),
    },
  );
  if (candidates.length === 0) throw new Error("caveman build: generated no candidate plans");
  if (!input.entitled && candidates.some((candidate) => candidate.requires_entitlement && !candidate.static_rejection)) {
    return emptyResult("needs_login", "entitled engine required for eligible candidates");
  }

  const runnable = candidates.filter((candidate) => !candidate.static_rejection);
  const staticRejections = candidates.length - runnable.length;
  const plannedRuns = runnable.length * approved.length * seeds.length;
  const estimatedCeiling = roundUsd(
    runnable.reduce((sum, candidate) => sum + candidate.estimated_cost_usd_per_run * approved.length * seeds.length, 0),
  );
  if (estimatedCeiling > input.config.maxSearchCostUsd) {
    return {
      status: "search_budget_exceeded",
      estimated_ceiling_usd: estimatedCeiling,
      planned_runs: plannedRuns,
      completed_runs: 0,
      static_rejections: staticRejections,
      actual_cost_usd: 0,

View on GitHub (pinned to 27d5a3981a)

Solutions

  1. Broaden the seed set or relax plan constraints so the planner can generate at least one candidate plan.

When it happens

Trigger: Thrown at packages/agent/src/build.ts:260 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15). Data as JSON: /api/errors/470aa3260e58894b. Report an issue: GitHub.