Open source, AGPL-3.0  ·  macOS  ·  Not released yet

Your data has been working for someone else.

Years of it, sitting on the tech giants’ servers — indexed, queryable, and useful to every company holding a copy. Holmes reads the same archive on your own computer, and answers to you.

Casebook  ·  worked example

Evidence

    Holmes

    Hover a sentence to see the evidence it rests on.

    The asymmetry

    They can ask your data questions. You got a zip file.

    Every service you have used will mail you an archive of what it holds on you — the request button exists because the record does. What arrives is searchable in the worst possible way: by filename, one archive at a time, with no idea what you are looking for.

    Holmes reads the whole thing once and keeps reading what changes. It writes a summary of every file, then of every folder, then of your life, and hangs a dated record off all of it. The folder stops being an archive and starts being a witness.

    See what is actually inside those exports

    What it can read

    • Documents you point it attxt, md, pdf, docx, xlsx
    • Photos, read by a vision modeljpg, png, heic, tiff
    • Apple Health export, MyChart records, bloodworkxml, ccda, pdf
    • iMessage, from the local databasechat.db
    • Account exports — Google, Amazon, Meta and nine more13 sources
    • E-books, into a shelf with a readerepub, pdf

    You choose the folders. Nothing is discovered behind your back, and a source you disconnect takes everything derived from it with it.

    How it reads

    Summaries of summaries, and only the bottom layer sees your files.

    Four layers, each one written from the layer beneath it. That shape is the whole design: it is what keeps a life-sized question inside a model’s context window, and it is what makes every answer traceable.

    your life

    One super-context over every source you did not mark as separate. A project set to separate is still fully indexed and still keeps its own timeline — it just never reaches this layer.

    └─ a source

    One connected folder, and the conversations you have had about it. A project can hold several sources; with more than one, their roots are combined into a single picture of that project.

    └─ a folder

    Synthesized from the summaries of its children, never from the files again. Children the input budget had to drop are recorded as dropped, so a synthesis can’t quietly look more complete than it is.

    └─ a file

    The only level that reads your bytes. Text is extracted and redacted, then summarized. Images are downscaled to 768 px and described by a vision model — a full-resolution photo costs about 16,000 image tokens, the same photo at 768 px costs about 590.

    Every layer also emits a dated block: - 2015-07-17..2015-07-20 | day | travel | Deep Creek | four nights, six people
    Those are harvested into one timeline. Precision may be widened by evidence and never sharpened, and a model that cannot date a fact is told to leave it undated rather than guess.

    Nothing generated is thrown away. Regenerating a context files the old one as a version rather than overwriting it, and a rebuild that stops seeing a fact marks it archived instead of deleting it — it was true when it was written.

    Provenance

    Every claim carries the line it came from.

    By the top layer an answer is four levels of summary away from anything real. Without stored pointers there is no path back, so each node records exactly which inputs produced it, with each child’s content hash as of that moment.

    Ask for the chain and Holmes walks those edges down to a file path and a line range — then re-reads the file through the same pipeline the indexer used and shows you the text. If the file changed since indexing, it shows you nothing rather than the wrong line.

    The excerpt is never generated

    The model supplies numbers — [L42-58] — and a range past the last line it was shown is rejected. The words you read come off disk.

    A citation can’t point somewhere real that wasn’t used

    Only inputs that actually reached the prompt get a tag. A marker with no matching input is dropped, because at that point it can only be invented.

    The stored text stays clean

    Markers are stripped after the spans are recorded. Chat, memory and the timeline all read that text, and none of them should be reading citation syntax.

    The part most pages skip

    What leaves your Mac, and what it costs when it does.

    Holmes is local-first, not offline. Your archive, the index and everything derived from it stay on your machine. Reading them takes a language model, and unless that model is running on your own hardware, the text goes somewhere. Here is exactly where.

    Stays on the machine

    One SQLite file under ~/Library/Application Support/holmes/ holds the index, the timeline, memory and every conversation. Provider keys live in electron-store; account credentials live in the macOS Keychain.

    No account, no sign-in, no telemetry, no server — there is nothing to sync to. The database is an ordinary file, not an encrypted vault: if that matters for your threat model, the volume is the place to encrypt it.

    Goes to the model you chose

    OpenRouter, any OpenAI-compatible endpoint, or Ollama on your own machine — with Ollama nothing leaves at all. Everything else sends the text being summarized, plus downscaled images when a photo is indexed.

    Everything is redacted first: API keys, passwords, card numbers, SSNs, and for health material also MRN, NPI, date of birth, chart account numbers and phone numbers. Sensitive memory categories are gated behind an explicit flag rather than a default.

    Priced before it runs

    An index run is quoted up front — tokens, dollars, hours — from live model pricing, minus everything already cached. A model with no published price is quoted as unknown, never as free.

    Estimating walks your whole directory tree, so it only ever happens when you press the button.

    Logged after it runs

    Every provider call is recorded with its model, tokens, cost and which feature made it — indexing, the timeline, a background pass, or you. It is recorded in the network layer, so no feature can make a call that escapes the log.

    Three refusals for credit in a row and billed calls stop locally until you clear them. One switch pauses every background timer, including work already in flight.

    Bulk indexing is paced to your key’s rate limit — 20 requests a minute by default — and at scale that limit, not your CPU, sets the wall clock. As a rough shape: 236 documents took 55 minutes. A photo library is a project you start on purpose and leave running, and background timers never begin one.

    The app

    One index underneath. A page for each way of asking.

    The window

    One conversation, with the model, the reasoning effort, how much of your memory it may see, and which sources are stacked as context — all chosen above the box, per message.

    The Holmes window: a sidebar of tools on the left, and on the right a greeting, four controls for model, effort, memory mode and context, a message box, and a list of suggested questions.
    The Data page

    One row per connected source. The dot is index state — teal when a source is fully indexed, green when it is attached but the run hasn’t finished, red when the directory is unreachable. Dimmed rows are hidden, and hidden means hidden everywhere.

    The Holmes Data page: a list of connected sources — File System, Documents, Activity, Finances, Health, Psychology, Training, Career, Personal Projects — each row showing a status dot, its path, file and folder counts, and controls to expand, index, hide and reorder it.

    Design mockups, drawn from the running app. Where they differ from the build, the build wins: its sidebar names the modes Think, Work and Code, and carries more pages than are shown here.

    Shipping

    Chat, Recall, Life Dashboard, Timeline

    Ask with any combination of sources stacked as context. Search across Spotlight and every past conversation. Read the life picture, or the dated record it was built from.

    Shipping

    Data, Memory, Health, People, Library

    Connect and index sources; keep a structured memory across 25 categories in three disclosure modes; ingest health records; resolve the people who recur across everything; read your shelf with narrated read-along.

    Not yet

    Work mode, Code mode, Casebook, Decision Room

    Visible in the interface and deliberately disabled. Think mode is the one that works, and the sidebar says so rather than pretending otherwise.

    There is also an iOS client: a thin remote that holds no database and no key, reaching a running desktop over your own Tailscale network. Every channel it can call is on an explicit allowlist that defaults to deny, and a device paired as a guest reaches the book shelf and nothing else.

    The timeline

    Every source, normalised onto one dated spine.

    Each layer of the context tree ends its output with a dated block. Holmes harvests those from every file, folder, analysis and memory summary, merges the duplicates, and stores what is left as one record — so a question can cross from your calendar into your sleep data and back without you filing anything.

    The record thickens where the data does. Almost nobody has a queryable archive before about 2009 — which is exactly when the services that keep one arrived. Holmes shows that honestly rather than inventing a childhood.

    A date is evidence, not a guess. A date stated inside the data beats one in the file name, which beats the file’s modified time. Precision can be widened by evidence and never sharpened, so a fact known only to a year is never narrated as a specific day — and a model that cannot date something is told to leave it undated.

    Rebuilds merge rather than replace: an event whose source stops reporting it is marked archived, not deleted, because it was true when it was written. Anything you add by hand survives every rebuild.

    Built on the same index

    Two places the life picture goes to work.

    Life Dashboard

    The apex of the context tree, in plain prose, at the top of the page: what Holmes has concluded about you from everything you have connected — with its provenance attached, so you can walk any sentence back down to the file it came from.

    Under it sits a card per life source — Psychology, Health, Activity, Finances, Training — and the people who recur across all of them, resolved into one list rather than one per source. Sources you hide disappear from here too; hidden means hidden everywhere.

    Library, reader and lessons

    Point Holmes at a shelf of EPUBs and PDFs and it becomes a reader. It will narrate a book aloud with the words highlighted as they are spoken, annotate it as you go, and turn a run of chapters into a lesson — concepts, questions and a model answer, each citing the passage it came from.

    Annotations are anchored to the quote plus the 32 characters either side, so they survive the book being re-scanned and say so when they cannot. Narration is priced before it runs.

    Book text never enters the profile. A shelf is scanned into the Library, never into document contexts. Only the reading record — what you read, and when — reaches the life picture, because a library is evidence about you and its contents are not.

    What it concludes

    Observations you did not write down about yourself.

    Holmes keeps a standing analysis per life source, refreshed as the sources change, and each one is written to state what it measured, over what window, from which records. These are the shapes those analyses come back in.

    Illustrative — the shapes are real, the person is not.

    It synthesises. It does not diagnose.

    That is not a disclaimer bolted on afterwards; it is written into the prompts. The health analysis is instructed to synthesise rather than diagnose, to flag its uncertainties and follow-ups explicitly, and to never advise starting, stopping or changing a medication or dose — that is the prescriber’s call, not a model’s.

    The mental-coach role is held to the same line: no diagnosis, no diagnostic label, no severity rating, no score. It may say that something you described resembles what a clinician would assess for, and that assessment is how you find out. That is a signpost, not a verdict.

    A thin record gets a short answer.

    Length has to buy specificity or evidence. Where the records carry real signal, the summary is asked for measured trends with their values, units and dates, and for what is still unresolved. Where they do not, a shorter honest answer is the correct one — padding is ruled out in the instruction itself.

    You can also sit nine standard instruments inside Holmes — Mini-IPIP, GAD-7, PHQ-9, Rosenberg, WHO-5, PSS-10, PC-PTSD-5, AUDIT-C and ASRS-6. The results are filed as dated evidence on the timeline, alongside everything else, rather than as a label attached to you.

    And every line above traces back the same way the rest of the page describes: claim, file, line.

    Why AGPL

    The last one that promised this got bought.

    Rewind built the best local memory tool anyone had shipped, and its whole pitch was that your data never left your Mac. That pitch was only ever as durable as the company holding it.

    A promise a company makes can be sold. A promise the license makes cannot.

    Holmes is AGPL-3.0. Fork it, audit it, keep running it after I lose interest. There is no company here to acquire and no server to switch off.

    What happened

    • 2022Rewind ships — local screen capture, on-device index
    • 2024Rebrands to Limitless, pivots to a cloud pendant
    • Dec 5, 2025Acquired by Meta; Rewind sunset and pendant sales halted
    • Dec 19, 2025Capture disabled; EU and UK users lose access, with that date as the deadline to export
    • TodayRemaining users sit under Meta’s terms of service

    Holmes solves a different problem — it never watches your screen, and it only reads what you hand it. The lesson it takes from Rewind is about ownership, not about capture.

    Status

    Version 0.1.0. No download yet.

    It runs, it is used daily, and it is not packaged for anyone else. There is no installer, no signed build and no release to point you at. When there is, it will be on the repository — and so is every line of it in the meantime.

    What you’ll need, when it ships

    • MachinemacOS, Apple silicon
    • A modelOpenRouter, any OpenAI-compatible endpoint, or Ollama
    • Diskgrows with your archive
    • First indexhours to days, resumable
    • For iMessageFull Disk Access
    • For live Apple Healtha signed build, or use the XML export