On a brand-new OS user whose only prior action was claude + /login, the environment scan reported existingInstall: true. The heuristic is "settings.json exists in the config root" — but a fresh Claude Code login always creates one, so every first-time Claude Code user reads as an existing LifeOS install.
Downstream logic recovers fine (the conflict scan found a clean slate and proceeded), so this is wording/semantics, not behavior: a first-timer seeing "existing install detected" is misled at exactly the moment they have the least context. Worth noting existingInstall (InstallEngine.ts:184) is the same expression as settingsExists two lines down (:186) and no code path in the tree consumes it — it's only surfaced in DetectEnv's JSON — so the rename costs nothing.
Suggested fix: key the flag on a LifeOS-specific artifact instead (e.g. LIFEOS/VERSION or the LifeOS skill dir), or rename the current signal to harnessConfigPresent and keep existingInstall for actual LifeOS traces.
Environment: Debian 13 (headless), Claude Code 2.1.220, bun 1.3.14, fresh OS user, installed via https://ourlifeos.ai/install at tag v7.28.3 (36c6f01). All line references are to this tag. One of four reports from the same fresh-install trial.
— Reported by Rob Pratt (@rpriven), co-authored with Kai.
On a brand-new OS user whose only prior action was
claude+/login, the environment scan reportedexistingInstall: true. The heuristic is "settings.json exists in the config root" — but a fresh Claude Code login always creates one, so every first-time Claude Code user reads as an existing LifeOS install.Downstream logic recovers fine (the conflict scan found a clean slate and proceeded), so this is wording/semantics, not behavior: a first-timer seeing "existing install detected" is misled at exactly the moment they have the least context. Worth noting
existingInstall(InstallEngine.ts:184) is the same expression assettingsExiststwo lines down (:186) and no code path in the tree consumes it — it's only surfaced in DetectEnv's JSON — so the rename costs nothing.Suggested fix: key the flag on a LifeOS-specific artifact instead (e.g.
LIFEOS/VERSIONor the LifeOS skill dir), or rename the current signal toharnessConfigPresentand keepexistingInstallfor actual LifeOS traces.Environment: Debian 13 (headless), Claude Code 2.1.220, bun 1.3.14, fresh OS user, installed via
https://ourlifeos.ai/installat tagv7.28.3(36c6f01). All line references are to this tag. One of four reports from the same fresh-install trial.— Reported by Rob Pratt (@rpriven), co-authored with Kai.