cd /news/ai-tools/show-hn-open-source-local-memory-vau… · home topics ai-tools article
[ARTICLE · art-89670] src=github.com ↗ pub= topic=ai-tools verified=true sentiment=· neutral

Show HN: Open-source local memory vault

Rafaelpta released litepipe, an open-source macOS app that captures everything a user sees, says, and hears on their computer into a local SQLite database with full-text search, making zero network calls and keeping all data on-device. The app, a fork of Screenpipe's MIT-licensed engine, transcribes meetings locally with Whisper, redacts PII, and lets AI agents query the memory folder directly.

read11 min views1 publishedAug 9, 2026
Show HN: Open-source local memory vault
Image: source

A local memory of everything you have seen, said or heard while you work at your computer.

It remembers your work. It stays on your Mac. It feeds your AI.

Features | Install | How it works | Architecture | FAQ

0 network calls · 100% on device

A Monday, as it was kept. Every tile is a screen the engine held on to, and the panel is the text it read off the one selected.

All work and no play makes Jack a dull boy.

You work all day and your agents still start from scratch.

litepipe keeps a local memory of everything you do, hear, and see on your computer: meetings, videos, clicks, every app. It all lands in one folder on your Mac.

Screenpipe built a solid capture engine and published it under MIT. litepipe is a fork that keeps that core evolving in the open, without the features that grew around it: no pipes, no accounts, no telemetry, no cloud sync. The work goes into simplicity, less weight, and safer guardrails on what gets captured. Bugs in the shared code go back upstream, as in issue 5531 and pull request 5532.

Meetings become transcripts. litepipe spots the call window and asks. One click, and the transcript is on your disk when the call ends.The microphone opens only for meetings you accept. The recording is deleted once it's text.Everything on screen is captured. Text comes from the accessibility tree, with OCR for what the tree can't see.Nothing leaves the Mac. Whisper and pyannote run on device, and the only socket is the app talking to its own engine.One folder holds it all. SQLite with full text search, so your agent reads it directly.

Download litepipe.dmg, drag it to Applications, launch. Signed and notarized by Apple.

To audit or change the code. Needs Xcode. The engine ships prebuilt; rebuilding it needs Rust and CMake, see crates/

.

git clone https://github.com/Rafaelpta/litepipe
cd litepipe/apps/litepipe-mac
./build-app.sh release

The engine alone, no app. Captures into ~/.litepipe

, local API on 127.0.0.1:3030, control C stops it. No meeting banner, no microphone gate, and the permissions go to your terminal.

curl -fsSL https://raw.githubusercontent.com/Rafaelpta/litepipe/main/headless.sh | bash

The engine reads what you're working on through the accessibility tree, the layer assistive technology uses: like HTML, for every app. OCR fills the gaps the tree can't see: video, games, remote desktops. Voice is transcribed locally with Whisper and grouped by speaker. Everything lands in SQLite with full text search, so you can query it, search it, or point your AI agent at the folder and ask what you agreed to, planned, or missed.

Screen and voice take separate paths, both end as searchable text in the same database, and everything is redacted before it settles.

flowchart LR
    SCR["Screen<br/>all day"] --> STT["Screen to text<br/>accessibility tree + OCR"]
    MIC["Voice<br/>meetings you accept"] --> VTT["Voice to text<br/>Whisper, after the call"]
    STT --> PII["PII redaction<br/>seconds later, overwritten in place"]
    VTT --> PII
    PII --> DB[("~/.litepipe/db.sqlite<br/>full text search")]
    VTT -. "audio deleted once transcribed" .-> X["no voice file remains"]
Step Detail
Capture Event driven: an app switch, click, scroll stop, or typing triggers a screenshot paired with the accessibility tree; idle fallback when nothing happens; audio in 30 second chunks with 2 second overlap
Screen to text The accessibility tree arrives with the frame; OCR fills its gaps seconds behind, in a background queue. Stopping the engine drops whatever is still queued
Meetings Window titles plus browser URLs from captured frames; banner within about 10 seconds of joining, mic on about 3 seconds after you accept
Voice to text Whisper large v3 turbo (quantized, Metal) retranscribes the meeting after the call on audio normalized to -16 LUFS; transcript ready about 11 minutes after the call ends
PII redaction Seconds after each item lands, on this Mac: all text is cleaned, secret regions in screenshots painted black, the original overwritten in place. Voice audio is deleted once transcribed. Details under Privacy controls
Cleanup Voice audio deleted after transcription, within the hour; system audio kept 7 days; frames 30 days; text and index kept

Capture isn't all or nothing. What ships today:

Private windows are never captured. Safari, Chrome, Edge, Brave, Arc, and Firefox.Password managers are never captured. 1Password, Bitwarden, LastPass, Dashlane, KeePassXC, and Keychain Access.Any app or site can be excluded. Settings, Privacy takes two lists, one of websites and one of apps. An excluded window never reaches the capture buffer, so no frame and no text of it exists.Capture stops when you want. One shortcut s everything, hours can be set to a schedule, and DRM video s it on its own.Secrets are redacted. On by default: keys, cards, and passwords become labels in text and black boxes in screenshots, and the original is overwritten. Under the hood: 46 deterministic patterns run first, an ONNX model on the Apple Neural Engine catches what patterns can't, and a second model finds secrets in the pixels and paints them solid black rather than blurred, since a blur can be undone.What was captured can be deleted. Settings, Data shows how much litepipe holds and deletes the last hour, the last day, a period you pick, or everything, files included. The local API does the same for scripts.The whole memory can be locked. The vault encrypts database and media with a key derived from your password, held only on your machine.

Everything runs in two processes on your machine, and what they may write is checked twice: before capture, and before it settles on disk. Every claim below can be checked from a shell on your own machine.

flowchart LR
    IN["Screen, screen text, system audio<br/>Microphone only in meetings you accept"] --> G1
    G1{"Checked before capture<br/>private windows, password managers,<br/>your app and site lists, , schedule"}
    G1 -->|"blocked"| NONE["Nothing is written<br/>no frame, no text"]
    G1 -->|"allowed"| CAP["Captured and transcribed<br/>on this machine"]
    CAP --> G2["Checked after capture<br/>secrets redacted in text and pixels<br/>voice audio deleted once transcribed"]
    G2 --> DISK[("~/.litepipe<br/>db.sqlite, media, logs")]
    DISK --> APP["litepipe.app"]
    DISK --> AGT["your AI agent"]
Component Stack Role
litepipe.app Swift, AppKit, SwiftUI Notch companion, meeting detection and consent, mic gate, timeline, settings
engine Rust Screen and audio capture, VAD, transcription, diarization, redaction, SQLite, local HTTP API

The app spawns the engine with posix_spawn

and disclaims responsibility transfer, so it stays the TCC responsible process: the permission prompts and grants belong to litepipe.app, and one set covers both processes. Kill the app and the engine goes with it.

macOS permissions used: Screen Recording (capture), Accessibility (screen text and UI events), Microphone (only while a meeting you accepted is running).

Everything lives in one folder, ~/.litepipe

. Browse it with open ~/.litepipe

.

Your data Where it lives
Screen captures, the images data/<date>/ as JPEG frames plus one compacted .mp4 per monitor
Screen text read by OCR db.sqlite , table ocr_text , one row per captured frame
Voice transcripts db.sqlite , table audio_transcriptions
Meetings and their transcripts db.sqlite , tables meetings and meeting_transcript_segments
Raw audio data/<date>/ , one file per device; meeting microphone audio is deleted once transcribed, the text is what remains
Keyboard and UI activity db.sqlite , tables ui_events and elements
App and engine logs app.log and engine-app.log , lifecycle events only, no captured content

Nothing is encrypted at rest by default: FileVault covers the disk, and the vault (/vault/*

) locks the database and media behind a password when you turn it on. Settings, Data shows the folder's size and deletes by period, from the last hour to all of it. Removing ~/.litepipe

by hand works too; the app rebuilds an empty one on the next launch.

One listening socket: the engine on 127.0.0.1:3030

, writes authenticated with a key generated at install time. The app is the only client; it calls meetings/start

, meetings/stop

, meetings/status

, audio/start

, audio/stop

, and health

, and reads history straight from SQLite. Confirm with lsof -nP -iTCP -sTCP:LISTEN | grep screenpipe

or a network monitor.

Models are downloaded once on first run and then cached: Whisper and a voice activity model for transcription, and, while secret redaction is on, an image redactor (52 MB, ~/.screenpipe/models/rfdetr_v12.onnx

) and a text redactor (159 MB, ~/.screenpipe/models/v45_phase5_pruned/

).

What you want to audit Where it lives
Engine spawn, flags, restart, mic gate apps/litepipe-mac/Sources/litepipe/Engine.swift
Meeting detection, consent, cleanup apps/litepipe-mac/Sources/litepipe/MeetingWatcher.swift , MeetingPrompt.swift
Privacy settings and exclusion lists apps/litepipe-mac/Sources/litepipe/Settings.swift
Screen capture and window filtering crates/screenpipe-screen/ , crates/screenpipe-capture/
Accessibility text and private window detection crates/screenpipe-a11y/
Audio, VAD, transcription crates/screenpipe-audio/
Secret redaction, text and image crates/screenpipe-redact/
Storage, schema, retention crates/screenpipe-db/ , crates/screenpipe-engine/src/retention.rs
HTTP API and routes crates/screenpipe-engine/src/server.rs , src/routes/
Area Spec
Screen capture ScreenCaptureKit, event driven: captures when the screen changes, idle fallback when it doesn't; all monitors, every on screen app
Screen text Accessibility tree extraction; OCR fallback for video, games, remote desktops
Audio capture System audio continuous; microphone only during confirmed meetings; 30 second chunks with 2 second overlap
Meeting detection Zoom, Google Meet, Microsoft Teams (native and web), FaceTime; window titles plus browser URLs from captured frames; banner within about 10 seconds
Meeting end Automatic about 30 seconds after the meeting windows disappear; stop button; shortcut
Transcription Whisper large v3 turbo, quantized, Metal; audio normalized to -16 LUFS; full meeting context; transcript about 11 minutes after the call ends
Speaker separation pyannote segmentation and voice embeddings
Secret redaction On by default; 46 deterministic patterns plus ONNX models on the Apple Neural Engine (text and image); labels in text, solid black boxes in screenshots, source overwritten
Capture exclusions Private browser windows, password managers, and the app and domain lists from Settings; excluded windows never reach the capture buffer
Storage SQLite with FTS5 at ~/.litepipe/db.sqlite ; media in ~/.litepipe/data
Retention Voice audio deleted after transcription, within the hour; system audio 7 days; frames 30 days; text and index kept
Local API REST on 127.0.0.1:3030 with a per install key; the same API the app uses
Telemetry Disabled; the engine logs "telemetry is disabled" at startup
Offline Fully functional without network after the one time model download on first run
Diagnostics Engine lifecycle log at ~/.litepipe/app.log
Distribution Developer ID, hardened runtime, notarized, stapled DMG (69 MB); installed app 151 MB
Platform macOS on Apple Silicon
License MIT, full source

Does any audio or screen data leave my machine? No. The engine downloads its models on first run; after that the only network socket is the app talking to its own engine on 127.0.0.1. No telemetry, no crash reporting, no updater.

What happens to the recording of my voice? It's deleted within the hour and the transcript stays. A voice recording is the most sensitive file on the disk: minutes of it can clone a voice, and an hour of meetings is about 25 MB of audio against 50 KB of text.

Which meeting apps are detected? Zoom, Google Meet, and Microsoft Teams, native and web, plus FaceTime. Detection reads window titles and browser URLs from captured frames.

How do I keep something out of the memory? Four ways. Private browser windows are skipped on their own. Any app or site goes on the ignore list. The shortcut s everything. And anything already captured can be deleted by period in Settings, Data.

Is the data encrypted? FileVault covers the disk, on by default in macOS. The vault adds a lock on the database and media, behind a key derived from your password. Transparent encryption during capture is on the roadmap.

How much disk does it use? System audio is kept 7 days and screen frames 30 days, both cleaned up on their own. Text and the index stay, and they're small. Settings, Data shows the current size.

Can my AI agent read the data? Yes, that's the point. Plain SQLite and media files in ~/.litepipe

. Point an agent at the folder and query it.

How do I delete everything? Settings, Data, delete all context. Or quit the app and remove ~/.litepipe

.

Early beta. Native macOS on Apple Silicon. Open an issue when something breaks.

Bug reports and fixes are welcome. The direction is narrow on purpose: keep it local, keep it stripped to the basics, and make the capture engine better.

litepipe is MIT. It adapts open source code from Screenpipe and Clicky, both MIT, and bundles FFmpeg. The notices are in LICENSE.md, NOTICE, and THIRD_PARTY_NOTICES.md.

── more in #ai-tools 4 stories · sorted by recency
── more on @rafaelpta 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-open-source-…] indexed:0 read:11min 2026-08-09 ·