How to Deploy LifeOS Enhancement Components: Hooks, Statusline, Tooltips, and Spinner Verbs
Deploy LifeOS UI enhancement components by running the DeployComponents CLI tool with --components statusline,tooltips,spinnerverbs or --all to install hooks that merge into ~/.claude/settings.json and copy supporting scripts to ~/.claude/hooks.
LifeOS provides a lightweight TypeScript CLI for installing optional non-launchd UI enhancements that run inside your terminal session. These components—statusline, tooltips, spinner verbs, and hooks—feed real-time data into your Claude environment without requiring persistent background services. This guide explains how the deployment system works at the source level and the exact commands to run.
What LifeOS Enhancement Components Do
Each component serves a distinct purpose in the terminal UI:
- Statusline – A persistent bottom bar displaying usage metrics, active agents, and system health.
- Tooltips – Context-sensitive help that appears when hovering over interface elements.
- Spinner Verbs – Animated status indicators (e.g., "Thinking…", "Fetching…") for background operations.
- Hooks – Thin scripts (
.hook.tsor.hook.sh) that supply data to the statusline and tooltips.
All components are declared in the deployment system's constant array:
// LifeOS/Tools/DeployComponents.ts
const NON_LAUNCHD_COMPONENTS = ["statusline","tooltips","spinnerverbs","agents","commands"] as const;
(See line 51 of [DeployComponents.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/Tools/DeployComponents.ts).)
How Component Deployment Works
The deployment process follows a three-stage pipeline: probing, dispatching, and installation.
Stage 1: Probe and Readiness Check
Before installing, the tool validates that each component is properly wired. For the statusline, this means verifying the binary exists and is executable:
r.probe = {
name: "statusline-wired",
passed: wired && executable,
detail: `wired=${wired} executable=${executable}${alreadyWired ? " (idempotent)" : ""}`
};
(See line 202 of [DeployComponents.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/Tools/DeployComponents.ts).)
Stage 2: Deployment Dispatch
The CLI parses your --components flag and routes to the appropriate deployer:
case "statusline": return deployStatusline(ctx);
(See line 373 of [DeployComponents.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/Tools/DeployComponents.ts).)
Stage 3: Hook Installation and Settings Merge
The core deployment logic lives in [DeployCore.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/Tools/DeployCore.ts). For the statusline, it performs three atomic operations:
- Merges the
statuslineconfiguration into~/.claude/settings.json - Copies
LIFEOS_StatusLine.shto the Claude hooks directory - Sets executable permissions with
chmod +x
The underlying hook installer, [InstallHooks.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/install/skills/LifeOS/Tools/InstallHooks.ts) (lines 66–111), handles the recursive copy:
const hooksPayloadDir = join(skillRoot, "install", "hooks");
const hooksDestDir = join(configRoot, "hooks");
cpSync(hooksPayloadDir, hooksDestDir, { recursive: true });
Because statusline, tooltips, and spinner verbs all depend on hook scripts, installing any of these components automatically provisions the required files.
Step-by-Step Deployment Commands
Prerequisites
Install the TypeScript runtime in the LifeOS repository:
cd /path/to/LifeOS
bun install
Deploy Individual Components
Install only the statusline:
bun DeployComponents.ts --components statusline
Install multiple UI enhancers together:
bun DeployComponents.ts --components statusline,tooltips,spinnerverbs
Deploy All Non-Launchd Components
Install every available enhancement:
bun DeployComponents.ts --all
This installs statusline, tooltips, spinnerverbs, agents, and commands in a single operation.
Verify Installation
Confirm the statusline entry exists in your Claude settings:
cat ~/.claude/settings.json | grep statusline
Activate the Enhancements
Open a new Claude session. The bottom line should now display the statusline with spinner verbs animated during operations.
Note on idempotency: The deployment CLI uses
force: falseincpSyncoperations, so re-running commands will not duplicate entries or overwrite existing files.
Key Source Files
Summary
- LifeOS enhancement components (statusline, tooltips, spinner verbs) are non-launchd terminal UI features that install via the
DeployComponentsCLI. - Deployment merges configuration into
~/.claude/settings.jsonand copies hook scripts to~/.claude/hooks. - Run
bun DeployComponents.ts --components statusline,tooltips,spinnerverbsto install all three UI enhancers. - Use
--allto deploy every available non-launchd component at once. - The process is idempotent—safe to re-run without side effects.
Frequently Asked Questions
What is the difference between launchd and non-launchd LifeOS components?
Non-launchd components like statusline, tooltips, and spinner verbs run entirely within your terminal session and do not require macOS launchd services. They are pure shell scripts and TypeScript hooks that Claude executes directly. Launchd components (not covered here) would require persistent background daemons.
Can I deploy LifeOS components without modifying my existing Claude settings?
No—the deployment intentionally merges into ~/.claude/settings.json because this is the configuration file the core LifeOS engine reads. However, the merge is additive and idempotent; it will not remove or overwrite unrelated settings you have configured.
Where are the hook scripts physically installed after deployment?
Hook scripts are copied recursively to ~/.claude/hooks/ as implemented in [InstallHooks.ts](https://github.com/danielmiessler/LifeOS/blob/main/LifeOS/install/skills/LifeOS/Tools/InstallHooks.ts) lines 66–111. The statusline script specifically installs as ~/.claude/hooks/LIFEOS_StatusLine.sh with executable permissions.
What happens if I run the deploy command multiple times?
The deployment is designed to be idempotent. The cpSync operations use force: false, and settings merges check for existing entries before adding duplicates. You will see (idempotent) in probe details when components are already installed, indicating no changes were made.
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 →