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
- Set the Kilo data-root environment variable to a non-empty absolute path
- Unset the variable so the default data location is used
- 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.