Raw capture โ€” raw/life-system.md


url: https://github.com/davidhariri/life-system date_fetched: 2026-07-05 backfilled: true


A personal life operating system powered by Claude Code. Inspired by Carmack's .plan files and Franklin's systematic self-improvement.

A plain-text system for life planning, daily journaling, decision-making, and task capture โ€” with Claude Code as your thinking partner. No apps, no subscriptions. Just markdown files, a terminal, and an AI that pushes back.

npm install -g @anthropic-ai/claude-codeCopy CLAUDE.md from this directory to ~/.claude/CLAUDE.md. This is the global instructions file that tells Claude how to work with you.

cp CLAUDE.md ~/.claude/CLAUDE.mdThen edit it โ€” replace the placeholders with your own name, projects, paths, and preferences. The whole point is that it's yours.

The /morning skill is what powers the daily routine. Copy it into your Claude Code skills directory:

mkdir -p ~/.claude/skills
cp -r skills/morning ~/.claude/skills/morning

Then edit the skill files โ€” replace YOURNAME with your name in both SKILL.md and reference.md.

The jrn command creates today's journal from the template, backfills any missing days (carrying forward uncompleted todos and active decisions), pulls in calendar events, and opens the file in your editor.

mkdir -p ~/.scripts
cp scripts/journal.sh ~/.scripts/journal.sh
chmod +x ~/.scripts/journal.sh

Edit ~/.scripts/journal.sh โ€” update JOURNAL_DIR, TEMPLATE, and EDITOR_CMD at the top to match your paths and preferred editor.

Then add the alias to your shell config (~/.zshrc or ~/.bashrc):

echo "alias jrn='~/.scripts/journal.sh'" >> ~/.zshrc
source ~/.zshrc

Now just type jrn to open today's journal.

Copy the starter files to wherever you want your life system to live. The default assumes ~/Documents/[yourname]/:

# Copy starter files
cp -r plan.md journal/ reference/ decisions/ people/ research/ templates/ inbox.md ~/Documents/yourname/

Update the paths in your CLAUDE.md to match wherever you put these.

cd ~/Documents/yourname
git init
git add -A
git commit -m "Initial life system setup"

This gives you version history on your life plan, goals, and decisions.

cd ~/Documents/yourname
claude

Say "morning" or "let's plan the day" and Claude will walk you through the morning routine โ€” reviewing yesterday, setting today's priorities, and checking that your daily actions connect to your annual goals and life plan.

Open Claude Code in your life directory. Say "morning" or "let's plan today." Claude will:

The system works because Claude reads your plan, goals, and values before every session. It holds you accountable to what you said matters. When your daily actions drift from your annual goals, it names it. When your goals drift from your life plan, it names that too.

The files are the source of truth. Claude is the accountability partner who never forgets what you wrote.

Files can reference each other using [[wiki-links]]. For example, a journal entry might say Met with [[jane-smith]] about the project โ€” and Claude will resolve that by finding people/jane-smith.md and pulling in context.

This works because CLAUDE.md includes a convention telling Claude to search people/, research/, decisions/, and journal/ when it encounters a [[link]]. No special editor required โ€” the links are just a convention that Claude understands.

Use them to connect:

Note: These won't render as clickable links in most markdown editors (GitHub, iA Writer, VS Code). They're a convention for Claude and for your own readability. If you use Obsidian, they'll resolve natively.

Everything is a starting point. Delete what doesn't resonate, add what does:

Once you accumulate journal entries, decision docs, and notes, you'll want to search across them without manually reading dozens of files. QMD is a local CLI search engine for markdown files that supports keyword search (BM25), semantic/vector search, and hybrid queries with reranking.

# Install via Homebrew
brew install tobi/tap/qmd
# Index your life directory
cd ~/Documents/yourname
qmd update    # Build keyword index
qmd embed     # Generate vector embeddings for semantic search

Add QMD to your Claude Code MCP config so Claude can search your notes directly. Add this to ~/.claude/settings.json under mcpServers:

{
  "mcpServers": {
    "qmd": {
      "command": "qmd",
      "args": ["mcp"],
      "cwd": "/Users/yourname/Documents/yourname"
    }
  }
}

Once configured, add this to your CLAUDE.md so Claude knows when to use it:

### Searching Documents
Use **QMD** to search across journals, decisions, plans, and inbox:
- `search` โ€” keyword/BM25, fast, good for specific terms
- `vsearch` โ€” semantic/vector, good for "what have I said about X" or thematic queries
- `query` โ€” hybrid (BM25 + vector + reranking), best for important searches
- `get` / `multi_get` โ€” retrieve full document content by path
Read files directly when you already know the exact path.

QMD doesn't auto-update. Run qmd update && qmd embed periodically, or add it to the morning skill (Step 0) so it re-indexes before each session.