How to Configure the `lifeos` Launch Command to Load the Constitutional System Prompt
Use the -s or --system-prompt flag when running lifeos.ts to inject LIFEOS/LIFEOS_SYSTEM_PROMPT.md, or create a shell alias that includes this flag so every session loads the constitutional rules automatically.
LifeOS operates Claude through a three-layer architecture where the constitutional layer—immutable rules, response formatting, and security protocols—resides in a dedicated system prompt file. Understanding how to configure the lifeos launch command to load this constitutional system prompt is essential for activating LifeOS's core protections. This guide walks through the exact mechanism, shell configurations, and verification steps based on the danielmiessler/LifeOS source code.
How the lifeos Launcher Handles System Prompts
The lifeos.ts tool serves as the primary launcher for LifeOS. Located at LifeOS/install/LIFEOS/TOOLS/lifeos.ts, it accepts a -s | --system-prompt option that specifies the path to the system prompt file.
According to [line 688 of lifeos.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/install/LIFEOS/TOOLS/lifeos.ts#L688), when this option is omitted, the tool defaults to LIFEOS/LIFEOS_SYSTEM_PROMPT.md. However, relying on defaults is risky—explicit configuration ensures the constitutional prompt is always present.
Without this flag, a plain claude command runs without the constitution, loading only CLAUDE.md and bypassing LifeOS's security framework.
Creating the Shell Alias for Automatic Loading
The official installation approach wraps the launcher in a shell alias that hardcodes the system prompt path. This guarantees every lifeos invocation includes the constitutional layer.
Bash and Zsh Configuration
The alias uses a <configRoot> placeholder that resolves to your LifeOS configuration directory (typically ~/.claude), discovered via the DetectEnv utility:
alias lifeos='bun <configRoot>/LIFEOS/TOOLS/lifeos.ts -s <configRoot>/LIFEOS/LIFEOS_SYSTEM_PROMPT.md'
The install.sh bootstrap script handles this automatically during setup, injecting the alias after environment detection. See [line 286 of install.sh](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/install/install.sh#L286) for the implementation.
To add manually:
# Detect your config root and append alias
echo "alias lifeos='bun $(detectEnv)/LIFEOS/TOOLS/lifeos.ts -s $(detectEnv)/LIFEOS/LIFEOS_SYSTEM_PROMPT.md'" >> ~/.bashrc
source ~/.bashrc
Fish Shell Configuration
Fish requires a different syntax using funcsave for persistence:
alias lifeos "bun (detectEnv)/LIFEOS/TOOLS/lifeos.ts -s (detectEnv)/LIFEOS/LIFEOS_SYSTEM_PROMPT.md"
funcsave lifeos
What the Constitutional System Prompt Contains
When properly loaded, LIFEOS/LIFEOS_SYSTEM_PROMPT.md injects:
- Five constitutional rules — Security protocol, verification doctrine, and operational constraints
- Unified output format — Structured response requirements the model must obey
- Built-in security checks — External content treated as data only, preventing prompt injection
These protections are absent without the -s flag. The install documentation explicitly warns: "The launch command loads the constitution" — skip this step and you defeat LifeOS's core security model. See [INSTALL.md, lines 97-99](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/install/skills/LifeOS/INSTALL.md#L97).
Using Alternative Harnesses
If you prefer a different CLI (e.g., pi), pass its equivalent system-prompt flag pointing to the same file:
pi --append-system-prompt <configRoot>/LIFEOS/LIFEOS_SYSTEM_PROMPT.md
The constitutional rules are tool-agnostic—what matters is that LIFEOS_SYSTEM_PROMPT.md contents reach the model's system context.
Verifying Your Configuration
Confirm the constitutional prompt loads correctly:
# Check that the -s option is recognized
lifeos --help
# Test with an invalid path — should error, proving the flag is active
lifeos -s /dev/null
# Run normally — constitutional rules now govern the session
lifeos
Key Source Files Reference
| File | Purpose |
|---|---|
LifeOS/install/LIFEOS/TOOLS/lifeos.ts |
Launcher script defining -s/--system-prompt flag |
LifeOS/install/skills/LifeOS/INSTALL.md |
Official alias syntax and launch requirements |
LifeOS/install/install.sh |
Bootstrap script that injects aliases during setup |
LifeOS/LIFEOS/LIFEOS_SYSTEM_PROMPT.md |
Constitutional rules, format spec, security protocol |
LifeOS/install/settings.system.json |
Privileged paths always authorized for edits |
Summary
- The
-s/--system-promptflag is mandatory to injectLIFEOS/LIFEOS_SYSTEM_PROMPT.mdinto Claude's context. - Shell aliases hardcode this flag so you never launch without the constitution.
- The
install.shscript automates alias creation during environment setup. - Alternative CLIs like
pirequire their own flag syntax but consume the same prompt file. - Verification via
--helpand invalid path testing confirms proper configuration.
Without this configuration, LifeOS runs in a degraded state—functional but unprotected.
Frequently Asked Questions
What happens if I run lifeos without the -s flag?
The model launches with only CLAUDE.md loaded. You lose the five constitutional rules, unified output format, and security protocols. The session behaves like standard Claude without LifeOS protections.
Does the default behavior work, or must I specify the path explicitly?
While lifeos.ts defaults to LIFEOS/LIFEOS_SYSTEM_PROMPT.md when -s is omitted, explicit configuration via alias is strongly recommended. This prevents accidental unprotected launches if working directories or environment variables change.
Can I use LifeOS with a different model or CLI tool?
Yes. Any CLI that supports system prompt injection can load the constitution. Adapt the flag syntax—pi uses --append-system-prompt, for example—and point it to LIFEOS/LIFEOS_SYSTEM_PROMPT.md.
Where is <configRoot> determined during installation?
The DetectEnv utility discovers this at runtime, typically resolving to ~/.claude. The install.sh script performs this detection before injecting aliases, ensuring paths are correct for your system.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →