About lifeos
LifeOS is an installation and onboarding skill for setting up a personalized life-management system within a supported harness. It places components with consent, captures identity and goals through an interview, and provides routes for health checks, updates, reporting, and removal.
Key features
- 01Install and configure LifeOS components
- 02Interview-based identity and goal capture
- 03Pulse state dashboard setup
- 04Installation capability diagnostics
- 05Update, report, and uninstall flows
Use cases
- 01Set up LifeOS in a supported harness
- 02Capture current and ideal state during onboarding
- 03Check installation health and missing capabilities
- 04Update or remove an installation while preserving user data
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ danielmiessler/ lifeos --skill lifeosAfter installing, type/lifeosin Claude Code to confirm it loaded.
Details
From the project READMELifeOS
This is the INSTALLED copy of the LifeOS skill, not the distribution root. Its
install/directory holds only bootstrap files. To update, followIntents/Update.md: it first runsbash <configRoot>/skills/LifeOS/install/install.shto fetch the full release skill. Only then run the payload tools — OverlaySystem, InstallHooks, and ScaffoldUser — which need that full payload. Run every tool by its full path:bun <configRoot>/skills/LifeOS/Tools/<Tool>.ts.
The install and onboarding surface for LifeOS, the Life Operating System. One command takes a stranger on any harness from nothing to a working, personalized install whose Pulse dashboard already shows their current state vs ideal state, without making them adopt a whole new harness.
Ideal State
- A stranger on any supported OS and harness ends with a working, personalized install: Core placed after one consent, every enhancement they did not decline, identity placeholders gone, the
lifeoslaunch command wired, and Pulse showing their own current and ideal state. - Every change to the user's machine was shown before it happened and is reversible: settings and shell rc are backed up first, updates and uninstalls move or back up instead of deleting, and nothing the user authored is overwritten.
- Setup completes and its hooks and integration are in place before the Interview writes anything.
- Nothing changes without an explicit yes, during the install and afterwards, unless the user turned on the opt-in
automodecomponent (Intents/Setup.mdstep 7), which ships off and needs a clear yes. - Every "installed", "updated" or "removed" claim rests on the evidence the intent names, and a capability the user declined is reported as declined, never as broken.
- Feedback sent upstream is redacted, reproducible and posted only on the user's own yes.
Intent Routing
| Intent | Trigger | File |
|---|---|---|
| Setup | setup, /LifeOS setup, "install LifeOS", "integrate into my harness" | Intents/Setup.md |
| Interview | interview, "onboard me", "run the interview", TELOS capture | Intents/Interview.md |
| Doctor | doctor, "check my install", "what's broken", "what capabilities are live" | run bun <configRoot>/LIFEOS/TOOLS/Doctor.ts (Intents/Setup.md step 9.6) |
| Pulse | "set up pulse", "pulse setup", "audit pulse setup", "is Pulse healthy" | Intents/Setup.md step 8.6: bun Tools/PulseHealth.ts audit reports Pulse health read-only |
| Update | update, "update LifeOS", after a version bump | Intents/Update.md |
| Uninstall | uninstall, "remove LifeOS" | Intents/Uninstall.md |
| Report | report, "report this bug", "file an issue", "contribute this fix", "open a PR", "suggest this to the project", "ask the LifeOS project" | Intents/Report.md |
| File | Read when |
|---|---|
INSTALL.md | the AI-native install document (served at ourlifeos.ai/install; host is install_host in <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LifeOS/Config.md): capability gate, prerequisites, release fetch, DetectEnv, harness integration, the support table and the install rules; everything after the fetch is Intents/Setup.md |
Workflows/Update.md | an install from before 2026-10-08 whose Update step re-reads this path: a signpost that sends the agent to Intents/Update.md |
GETTING-STARTED.md | after the install: the optional external tools (codex, Interceptor, cf, Fish Audio, gh, and smaller ones), what each powers and how to prove it is live |
References/HermesSidecar.md | the user said yes to the Hermes sidecar offer in Setup step 9.5: the pinned install, its own device-code login, the evidence-based guard check and the two disclosures to make |
install/ | the whole-system payload (skills, hooks, system prompt, Algorithm, docs, runtime tools, placed during setup with permission) and the bootstrap install/install.sh (served as ourlifeos.ai/install.sh); data the install Tools read and place, never edited by hand. The LifeOS/ directory is the entire distribution: no release-root install.sh, no .claude/ clone |
doctor is the one tool-backed route: Doctor.ts prints each capability's state and the fix for anything broken. Relay it and honor decline (Setup step 9.6).
Data & Config
<configRoot> is the harness config dir DetectEnv reports (on Claude Code, $CLAUDE_CONFIG_DIR when set, else ~/.claude). The user tree is reached at <configRoot>/LIFEOS/USER once LinkUser has linked it in.
USER/CONFIG/LIFEOS_CONFIG.tomlholds the DA name and voice and the[principal]identity. Interview writes it; Update reads it to re-render identity placeholders.USER/PRINCIPAL/PRINCIPAL_IDENTITY.md(prose only; names and voice live inLIFEOS_CONFIG.toml) andUSER/TELOS/TELOS.mdare written by Interview;SeedPulsederivesLIFEOS_STATE.jsonandPRINCIPAL_TELOS.mdfrom them.USER/CUSTOMIZATIONS/SKILLS/LifeOS/Config.mdholdsinstall_host, the host that servesINSTALL.mdandinstall/install.sh(written asourlifeos.aiin this skill), andspinner_verbs_file, the optionalspinnerVerbs.jsonbeside it that thespinnerverbscomponent deploys in place of the shipped list, andpulse_templates_dir, the USER template treeTools/ScaffoldUser.tscopies from andTools/PulseHealth.ts auditcomparesUSER/against (default<configRoot>/skills/LifeOS/install/USER; an explicit--skill-rootwins for ScaffoldUser). Every key, the file shape and a proof run:Setup.md.<configRoot>/LIFEOS/MEMORY/STATE/reports/current/holds the Report intent's in-progress report;Report.ts resetclears it.
Gotchas
- The frontmatter
version:is the COMPONENT line, not the release. Claude Code ignores it; the maintainer-sideBumpSkillVersions(not shipped) maintains it at the source repo. The DISTRIBUTION version, what a user means by "LifeOS 7.x", is the GitHub release tag +LIFEOS_RELEASES/<version>/+ theinstall.shfetch. Never read the component line as the release number. - Config root keeps its canonical name. The user tree lives under the config dir and is linked into the harness tree; "LifeOS" is the brand, the resolved config path does not rename (renaming it breaks the identity
@-imports). - Dev-tree refusal checks one marker. The install tools refuse to run inside the LifeOS source repo.
detectDevTree(Tools/InstallEngine.ts) checks one thing: whether the maintainer-side release skill directory exists under the config root. It does not look at git remotes, so a source checkout without that private skill is not detected.--allow-devoverrides the refusal on the tools that accept it (InstallSettings.ts,ActivateImports.tsand others). Never mutate the author's live system. - Config is
.toml, never.yaml.LifeosConfig.tsreads TOML; the legacy.yamltemplate was retired 2026-06-19. - Every install tool is a dry run without
--apply(InstallAll:--yes). Between 2026-07-08 and 2026-07-31 the documented update path omitted it, and users saw success-shaped output while nothing changed.
Examples
- "install LifeOS" → Setup, then Interview: Core and every enhancement not declined are in place with permission at each step, hooks fire, and the user rolls straight into onboarding.
- "run the lifeos interview" → Interview: TELOS and current/ideal state captured, the user's sources merged in, Pulse showing real rings.
- "lifeos doctor" →
Doctor.ts: the capability table, with the fix command offered for anything broken. - "audit pulse setup" →
PulseHealth.ts audit: one status block with real counts for the schema tool, provenance of the USER template copies, missing templates and/healthz, NOT RUN shown as such. - "update LifeOS" → Update: the install is on the latest release with the user's data untouched, or reported already current.
- "report this bug to LifeOS" → Report: a redacted five-field issue the user has read, posted only on their yes. "contribute this fix" adds a green run and a PR on top; "suggest this to the project" files a discussion instead.