Skip to content

existingInstall heuristic fires on every fresh Claude Code login (settings.json existence) #1727

Description

@rpriven

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions