LifeGraph · open source
MIT licenseStatus: early and honestPython 3 · FastAPI · Markdown + JSONL

A local-first, self-hosted personal operating system.

LifeGraph stores your life as plain Markdown and JSONL files on hardware you own, keeps that record append-only and hash-chained so tampering is detectable, and runs a team of scheduled AI agents that read those files instead of a black-box vector database. It already runs daily for its first user across calendar, journal, people, places, health and finances.

Try the core guarantee

Thirty seconds, no account, no server.

The core journaling primitive is real, tested code in the repo: a hash-chained JSONL log that detects any in-place edit, deletion, or reordering of past entries in a stream.

git clone https://github.com/adam-rhodes/lifegraph && cd lifegraph/examples/hashchain
python3 test_hashchain.py                                   # tamper / delete / reorder detection
python3 lifegraph_hashchain.py verify ../vault/sample_timeline.jsonl   # verify a shipped timeline

You should see the tests pass and the shipped timeline verify:

ALL PASS: clean-chain, genesis, linkage, tamper-detect, delete-detect, reorder-detect
OK {'entries': 3, 'head': '...'}

Now edit any character inside examples/vault/sample_timeline.jsonl and run verify again. It names the exact entry where the chain breaks:

BROKEN {'broken_at': 2, 'reason': 'entry_hash mismatch (content altered)', 'entries_ok': 2}

Then open examples/vault/ to see the real shape of the data: a hash-chained timeline, a Mind's journal, and a knowledge-graph node. To see what the record is for, run examples/demo/reconstruct.py: it rebuilds a relationship from the sample vault, cites every line to its source, and refuses to run on a chain it cannot verify.

Scope, stated plainly: this detects tampering with existing entries inside a stream. It does not by itself stop someone who can already write the file from truncating it or replacing the whole chain with a fresh, internally consistent one. Off-box backup and external anchoring are future work, tracked in the roadmap.

What it is

Three commitments define it.

You own the data.

Plain files on your hardware. No lock-in, readable in any editor a decade from now.

The record is the product.

Append-only, timestamped, uniquely identified, hash-chained so tampering is detectable. The memory is an audit trail, not a vector-DB black box.

Intelligence is a team, not a chatbot.

Named specialists collaborate and journal in the open, routed through a model-agnostic broker so no vendor is load-bearing. Only the specific text a task needs is sent to a model; point the broker at a local model for strictly on-box processing.

Most tools give you a calendar here, notes there, a chatbot somewhere else. None see the whole picture, and none actually remember you. LifeGraph is one system that treats your whole life as connected, keeps a durable record you control, and runs specialists that work across every domain and write their reasoning to disk.

Works today
  • Self-hosted server (FastAPI + Caddy) with a progressive web app across many life domains.
  • 11 standing Minds journaling nightly through a cost-capped, model-agnostic broker (observed cost: a few dollars a month against a hard $200 cap).
  • Append-only timelines with unique IDs; the hash-chain module ships here with a test suite.
  • A nightly multi-model council that reviews the system's own work with an evidence gate.
  • A self-healing health monitor with alerting.
Still aspirational
  • Hash-chaining across every write path (module exists and is tested; wiring is in progress).
  • A full enforcement layer via a custom MCP server and editor hooks.
  • Off-site, versioned, encrypted backup as a first-class feature.
  • The Illuminations-to-Resonances loop closing reliably into measured behavior change.
  • Consolidating overlapping memory stores into the one canonical Vault.

What this repo ships: the concept, the data schemas, the runnable hash-chain core, a minimal one-Mind runtime, and a public runtime slice (a roster of Minds on a scheduled tick, a model router with a daily spend cap and a chained cost ledger, and a file-based council with an evidence gate), all stdlib Python with no database. The rest of the private instance (the FastAPI server, the web app, the 35-Mind roster and voices, the Letta memory layer, the ingest pipelines) is being sanitized for public release and is listed on the roadmap with the reason each piece is not out yet.

Architecture

One diagram.

  Clients      PWA (per-domain views) + chat / CLI
     |
  Edge         Caddy (TLS, static + reverse proxy)
     |
  API          FastAPI + enforcement / validation layer   <- significant writes routed through (partial today)
     |
  Intelligence Minds runtime (scheduled + on demand)
               model broker: Claude / GPT / Gemini / local, with fallbacks + spend cap
     |
  Memory       The Vault: Markdown + JSONL, unique IDs, append-only hash-chained timelines
     |
  Durability   owned hardware -> replicated (Syncthing/iCloud) -> [planned] versioned off-site encrypted git backup
MindsScheduled and on-demand agents, each with a role and a journal file. See examples/vault/sample_mind_journal.md.
The VaultThe canonical file store. One home and one stable ID per fact.
TimelinesAppend-only, hash-chained JSONL. See examples/vault/sample_timeline.jsonl and the runnable verifier.
The ConstellationThe relationship graph. See examples/vault/sample_graph_node.md.
Illuminations / ResonancesAn insight, and an insight that actually changed behavior. Tracked as records, not vibes.

Full detail in docs/ARCHITECTURE.md. Threat model, auth and key handling in SECURITY.md.

The Minds

A team of specialists, not one assistant.

A Mind is a named specialist with a role, a voice distinct enough that you can tell who is speaking, a journal it keeps in its own words written to disk, a strand of accumulated experience that persists across sessions, and the ability to collaborate with the other Minds and with you. If the system vanished, you could read the journals in order and reconstruct what the team was thinking and why.

The target coordination design: a significant event arrives; a chief-of-staff Mind assigns it to the owning specialist with an urgency and a follow-up date; the owner does the work and journals it; disagreements are logged and resolved rather than averaged away; a scheduled council reviews the output with an evidence gate. Today the Minds journal reliably on a schedule. The coordination layer is the current build focus, and that is stated plainly because honesty about built versus intended is a project principle.

The roster is not fixed at a number. When a domain of a life recurs and grows, that is the signal to give it a dedicated Mind. The first user's private roster and their live journals live in that user's own instance, not here. What lives here is the shape: docs/THE_MINDS.md and the sample journal in examples/vault/.

Help wanted

Good first contributions. None need the private runtime.

They all live in this repo against the shipped module and samples. Open an issue to claim one, or just open a PR.

portability

Cross-platform file locking

The hash-chain module uses POSIX fcntl; on Windows locking is a no-op. Add a portable lock (msvcrt or fasteners) behind the same interface, with a test.

tooling

A small CLI

Wrap append, verify and the reconstruction demo into one lifegraph command that works over any vault directory.

integrity

Detecting tail truncation

Truncating the last entries leaves a valid prefix that still verifies. Prototype a periodic Merkle root or entry count committed off-box, or an append-only length receipt.

ingest

A source adapter

Sketch the common adapter interface and implement one read-only adapter (iCal, mbox) that emits timeline entries in the shipped JSONL shape.

correctness

Concurrency tests

A test that hammers append from several processes on POSIX and proves the chain never corrupts.

How to contribute

The best contributions right now are ideas, critique and design pressure, not just code. Open an issue that tells us where the vision is thin, where the architecture is wrong, or where a claim is overstated. Propose how a subsystem should work: the enforcement layer, the memory model, the Minds coordination protocol. Make the docs clearer for the next person. Small, self-contained reference implementations (a hash-chained append log, a model-agnostic broker, a named-path retriever) are gold.

Never commit personal data or secrets. Keep discussions civil and specific. Start with CONTRIBUTING.md, VISION, ARCHITECTURE and GLOSSARY.

Repo map
docs/VISION.mdWhy this exists and where it is going.
docs/ARCHITECTURE.mdHow it is built and the design choices.
docs/THE_MINDS.mdHow the team of AI specialists works.
docs/PRINCIPLES.mdThe commitments a real change must honor.
docs/ROADMAP.mdHonest current status and near-term priorities.
docs/GLOSSARY.mdThe project's small, deliberate vocabulary.
SECURITY.mdThreat model, auth, key handling, self-host risks.
examples/Runnable code and anonymized sample data.

Prefer the longer read? The original essay-form introduction is kept at The LifeGraph Record.