JuliusBrussee/caveman · error · Error

Kilo data root resolves to an empty path

Error message

Kilo data root resolves to an empty path

What it means

Sanity check when resolving Kilo's data root: the computed directory path is empty, analogous to the config-root guard. Environment variables steering Kilo's data location are set to values that resolve to an empty string, so subsequent path joins would be meaningless.

Source

Thrown at packages/cli/src/index.ts:11660

  // but managed loading deliberately excludes it.
  const configFiles = ["kilo.jsonc", "kilo.json", "opencode.jsonc", "opencode.json"];
  if (configFiles.some((name) => existsSync(join(directory, name)))) return true;
  if (process.platform !== "darwin") return false;
  const preferenceFiles = ["/Library/Managed Preferences/ai.opencode.managed.plist"];
  try {
    preferenceFiles.unshift(join("/Library/Managed Preferences", userInfo().username, "ai.opencode.managed.plist"));
  } catch {
    // System-level preference remains covered; an unreadable username is itself
    // unusual, but no user path can be resolved safely enough to claim absence.
    return true;
  }
  return preferenceFiles.some((path) => existsSync(path));
}

function kiloDatabasePath(): string | null {
  const rawDataRoot = process.env.XDG_DATA_HOME || join(homedir(), ".local", "share");
  const cleanedDataRoot = rawDataRoot.replace(/[\r\n]+/g, "");
  if (!cleanedDataRoot) throw new Error("Kilo data root resolves to an empty path");
  const dataRoot = normalize(isAbsolute(cleanedDataRoot) ? cleanedDataRoot : resolve(cleanedDataRoot));
  const configured = process.env.KILO_DB;
  if (configured === ":memory:") return null;
  if (configured) {
    if (/[\0\r\n]/.test(configured)) throw new Error("KILO_DB contains an invalid path character");
    return normalize(isAbsolute(configured) ? configured : join(dataRoot, "kilo", configured));
  }
  return join(dataRoot, "kilo", "kilo.db");
}

function kiloActiveOrganizationState(): "none" | "active" | "unknown" {
  let path: string | null;
  try {
    path = kiloDatabasePath();
    if (path === null) return "none";
    const stat = statSync(path);
    if (!stat.isFile()) return "unknown";
  } catch (error) {

View on GitHub (pinned to 5184b3d11a)

Solutions

  1. Set the Kilo data-root environment variable to a non-empty absolute path
  2. Unset the variable so the default data location is used
  3. Fix shell scripts that export it with an unset or blank value
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/cli/src/index.ts:11660 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@5184b3d11a (2026-09-06). Data as JSON: /api/errors/bfff57b33a4ddd8f. Report an issue: GitHub.