惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
月光博客
月光博客
AI
AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
GbyAI
GbyAI
L
Lohrmann on Cybersecurity
O
OpenAI News
Schneier on Security
Schneier on Security
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
L
LINUX DO - 最新话题
人人都是产品经理
人人都是产品经理
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
Arctic Wolf
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Vercel News
Vercel News
The Hacker News
The Hacker News
Y
Y Combinator Blog
Latest news
Latest news
SecWiki News
SecWiki News
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cisco Blogs
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店 GitHub - EdoardoBambini/Agent-Armor-Iaga: AI agents are getting tool access — shell, file system, databases, APIs, secrets. But **nobody is governing what they actually do with it**. Frameworks like LangChain, CrewAI, AutoGen, and Claude Code give agents the power to execute. Agent Armor gives you the power to control, audit, and approve every single action before it happens. HN Vibes — Week 15, Apr 7–13 2026 GitHub - chojs23/ec: Easy terminal-native 3-way git mergetool vim-like workflow GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - JakOb-dotcom/cloud-sandbox-security-analysis: Technical analysis and Proof of Concept (PoC) regarding environment variable exfiltration in containerized cloud sandboxes via side-channel data leaks. Springboards - Flint Alpha Show HN: A simpler coding agent harness GitHub - audiodude/sudomake-friends GitHub - 256thFission/mini-mythos: OSS clone of Anthropic’s Mythos harness to locate C/C++ memory vulnerabilities Show HN: OpenParallax: OS-level privilege separation for AI agent execution Hacker News Sorted - Chrome 应用商店 Show HN: How to Install Docker on Ubuntu 24.04 LTS: Complete 2026 Guide GitHub - himanshudongre/smriti GitHub - sverrirsig/claude-control: macOS desktop dashboard for monitoring and managing multiple Claude Code sessions GitHub - ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. Chiral - Chrome 应用商店 Show HN: Two Claudes collaborating through shared memory on a $100 mini-PC GitHub - pmichaillat/latex-cv: Minimalist LaTeX template for academic CVs GitHub - oguzbilgic/posse: A web UI for Anthropic Managed Agents. GitHub - sshiraz/depsly: Dependency risk analysis tool for npm packages ABI Add safari/agent-harness — Safari browser automation via safari-mcp by achiya-automation · Pull Request #212 · HKUDS/CLI-Anything GitHub - Halfblood-Prince/trustcheck: Verify PyPI package attestations and improve Python supply-chain security GitHub - oguzbilgic/kern-ai: Agents that do the work and show it. GitHub - bruits/satteri: High-performance Markdown and MDX processing for the JavaScript ecosystem GitHub - tylergibbs1/feedstock: High-performance web crawler and scraper for TypeScript, powered by Bun and Playwright GitHub - Grimm67123/grimmbot: The self-improving sandboxed and open-source AI agent. With persistent memory and scheduling. GitHub - whitevanillaskies/whitebloom: Local whiteboard that blooms. GitHub - hwdsl2/docker-whisper: Docker image for a self-hosted Whisper speech-to-text server with speaker diarization and OpenAI-compatible transcription and translation APIs. Powered by faster-whisper. Supports all Whisper models, NVIDIA GPU (CUDA) acceleration, JSON/SRT/VTT output, SSE streaming, offline mode, and multi-arch (amd64, arm64). GitHub - yisding/reviewwiggum GitHub - MarwanAlsoltany/serrors: Structured errors for Go: sentinel hierarchies, typed data, custom formatting, and slog integration. GitHub - soatok/age-php GitHub - Luthiraa/markitme GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits GitHub - tombedor/excalicharts GitHub - wh1le/excalidraw-edit: Open and edit .excalidraw files from the terminal. Offline, auto-saves to disk. MalExt Sentry - Malicious Extension Scanner - Chrome 应用商店 GitHub - syi0808/asciianimesvg: Generate animated ASCII art SVGs from text. CLI, Rust library, WASM, and web editor. GitHub - zaina-ml/ml_forge: A visual-based graph node editor for training computer vision models. GitHub - anakin87/llm-rl-environments-lil-course: 🌱 A little course on Reinforcement Learning Environments for evaluating and training Language Models GitHub - takaakit/superpowers-uml: Superpowers-UML modifies Superpowers to ensure a software development workflow in which AI agents design through UML modeling. AdriByte Studio - Sviluppo Web e Soluzioni Digitali GitHub - chouligi/angel-copilot: Your personalized Angel Investment Advisor Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 GitHub - agenteractai/lodmem: Level Of Detail Context Management for Agents GitHub - ostefani/subnetlens: A fast, concurrent network scanner with a TUI and plain-text CLI, built in Go. It discovers live hosts on your network, scans their open ports, resolves hostnames, and fingerprints operating systems—delivered. Cyber Pulse: Agentic Intel - Apps on Google Play Whisper API: Self-Hostable Speech to Text Transcription The Agent-Web Protocol Stack: A Research Thesis GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Show HN: Provepy – A Python decorator that proves your code using Lean and LLMs Show HN: Pardonned.com – A searchable database of US Pardons GitHub - patrickdappollonio/dux: Dux is a terminal UI that lets you run multiple AI coding agents side by side, each in its own git worktree, with full companion terminals, macros, commit generation, and a command palette that knows more tricks than you do. kMC Crystal Simulator Show HN: HyperFlow – A self-improving agent framework built on LangGraph GitHub - stef41/vibescore: 🎵 Grade your vibe-coded project. One command, instant letter grade across security, quality, dependencies, and testing. GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. imgur.com GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. GitHub - nowork-studio/toprank: Open-source Claude Code skills for SEO, SEM, Google Ads GitHub - tacomanator/sash: Lightweight macOS menu bar app for reliably cycling through windows of the current application. Appents | Social Media Management for Product-First Teams GitHub - pnhoang/youtube-spam-blocker: Automatically detects and hides spam messages in YouTube Live chat. Set rate limits, keyword filters, and block repeat offenders. GitHub - decisionnode/DecisionNode: CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. GitHub - AvaCodeSolutions/django-email-learning: An open source Django app for creating email-based learning platforms with IMAP integration and React frontend components. The $100K Gap in Kubernetes Security Tooling Function Calling Harness: From 6.75% to 100%
GitHub - alkait/WhatsKept: Agent-queryable WhatsApp history from an iOS backup — a single Go binary.
tenthead · 2026-05-25 · via Hacker News: Show HN

WhatsKept logo

WhatsKept

Agent-queryable WhatsApp history from an iOS backup, in Go.

A single self-contained binary. Drives iOS backups, decrypts WhatsApp's ChatStorage.sqlite, and (eventually) feeds it into a searchable SQLite + FTS5 workspace that an agent can query directly.

Contents

  • What you can ask
  • What this is (and what it isn't)
  • Screenshots
  • Pipeline
  • Download
  • How this was built
  • System requirements
  • Privacy
  • Build
  • Run

What you can ask

Once the workspace is built, point an LLM coding agent at the folder (Windsurf, Claude Code, Cursor, VS Code + Copilot,etc …) and ask. A few examples of what becomes possible:

Use case Example prompt
Find a photo or voice note you only vaguely remember "Find the photo Sara sent of a handwritten recipe — I think it had cardamom in it."
Recover decisions from a busy group chat "Pull every message in the House Reno group about the kitchen budget and tell me what we landed on."
Recall a specific fact someone sent you "What dosage did Dr. Patel say for the antibiotic, and how many days?"
Track receipts, orders, and tracking numbers "List every tracking number anyone sent me in the last 6 months and flag the ones I never confirmed."
Summarize a relationship or thread "Summarize what my brother and I have talked about this year — what's been on his mind?"
Reconstruct a timeline "Build a timeline of my 2023 — major events, trips, life changes — using only what's in WhatsApp."
Index recommendations friends have sent "List every restaurant, book, and movie friends have recommended in the last 2 years, grouped by category."
Find photos of a specific person (after tagging them in the People view) "Show me a random photo of my son Hasan" · "Photos with Hasan and Sara together from 2023."

What this is (and what it isn't)

WhatsKept is a data pipeline, not an AI assistant. Its entire job is to take an encrypted iOS backup and turn it into a clean, local, agent-friendly workspace on disk.

What it does

  • Drives iOS backups over USB via idevicebackup2 so you can refresh the source without leaving the app.
  • Decrypts the WhatsApp ChatStorage.sqlite and the media/voice blobs from the encrypted iOS backup, using your backup password.
  • Processes media locally: OCR + image classification through Apple's Vision framework, voice-note transcription through whisper.cpp with Metal, and PDF document text extraction through Apple PDFKit (with Vision OCR fallback for scanned pages).
  • Optional cloud image descriptions (opt-in): instead of the on-device Vision OCR, you can describe images with a cloud vision model through OpenRouter, using your own API key. This is the one feature that sends your data off the device — each described image is uploaded to OpenRouter. It is off by default, lives behind its own button, and is the only cloud alternative to the otherwise fully on-device pipeline. See Privacy.
  • Normalizes everything into a single SQLite database (with FTS5) alongside extracted media/, voice/, documents/, and profiles/ folders, joined against your macOS Contacts so chats are readable.
  • Writes an AGENTS.md and agent-ignore files so an LLM coding agent dropped into the workspace knows the schema and skips the heavy binary trees.

What it does not do

  • No built-in chat, no built-in agent runtime. WhatsKept never sends your messages, transcripts, or contacts to a cloud LLM, and it does not "summarize your chats" or answer questions on its own — that is the agent's job (see below). The one exception is the opt-in cloud image-description feature: if you turn it on and supply an OpenRouter API key, your images (and only your images) are uploaded to OpenRouter for OCR + captioning. It is off by default.

  • No cloud sync, no account, no telemetry. WhatsKept makes only these outbound requests, all to well-known hosts:

    • a version check against the GitHub Releases API when the app window opens (so it can offer an Update button) — carries none of your data;
    • only if you opt into voice transcription, a one-time HTTPS download of the whisper model from HuggingFace — carries none of your data;
    • only if you opt into cloud image descriptions, an API-key validation check and one chat-completion request per image to OpenRouter — these do carry image content from your backup.

    Nothing else leaves the machine. There is no account, no analytics, and no background sync.

  • No querying for you. Asking questions like "what did Alice say about the trip?" is the agent's job — you open the workspace in Windsurf / VS Code + Copilot / Claude Code / Cursor / etc. and let that tool read the SQLite database. WhatsKept's responsibility ends when the workspace is ready.

  • No modification of the source backup. The encrypted iOS backup under ~/Library/Application Support/MobileSync/Backup/ is read only; WhatsKept never writes to it.

Think of it as the plumbing between your iPhone and your AI agent: it turns a locked, encrypted iOS backup into a plain folder of readable text, searchable messages, and transcribed voice notes — then steps out of the way and lets the agent you already trust do the thinking.

Screenshots

Three tabs, in the order you walk through them:

1. Backups 2. Database 3. Agents
Backups tab Database tab Agents tab
Drive a fresh iOS backup over USB — no need to leave the app. Decrypt ChatStorage.sqlite, OCR images, transcribe voice notes, extract PDFs. Each stage is opt-in and resumable. Open the prepared workspace in Windsurf, VS Code, Cursor, Claude Code, or Terminal.

Pipeline

End-to-end data flow, from the encrypted backup on disk to a workspace your agent can MATCH against. The four side-car indexers (avatars/contacts, images, voice, documents) are all opt-in — each one lives behind its own button in the Database tab and can be skipped, re-run, or resumed independently. The default pipeline runs on-device; the only outbound call is the one-time whisper-model download from HuggingFace if you enable voice transcription. The lone exception is the opt-in cloud image descriptions path — if you enable it, images are uploaded to OpenRouter instead of being OCR'd locally by Apple Vision.

%%{init: {'flowchart': {'subGraphTitleMargin': {'top': 32, 'bottom': 32}}}}%%
flowchart TD
    classDef src    fill:#fff7ed,stroke:#fb923c,color:#7c2d12
    classDef proc   fill:#fef3c7,stroke:#f59e0b,color:#78350f
    classDef data   fill:#ecfdf5,stroke:#10b981,color:#064e3b
    classDef agent  fill:#f5f3ff,stroke:#8b5cf6,color:#4c1d95

    IP["iPhone / iPad"]:::src
    BK["Encrypted iOS backup"]:::src
    IP -->|USB| BK

    SYNC{{"Decrypt & extract chat history"}}:::proc
    BK -->|backup password| SYNC

    DB[("Chat database")]:::data
    SYNC --> DB

    subgraph SIDE["Optional on-device processors"]
        direction LR
        PS{{"Sync contacts & avatars"}}:::proc
        MI{{"Image OCR &amp; classification<br/>(on-device · or opt-in cloud)"}}:::proc
        VI{{"Voice-note transcription"}}:::proc
        XI{{"PDF text extraction"}}:::proc
    end

    DB -.-> PS
    DB -.-> MI
    DB -.-> VI
    DB -.-> XI

    PS --> AV[("Contacts &amp; avatars")]:::data
    MI --> IM[("Image text &amp; labels")]:::data
    VI --> VC[("Voice transcripts")]:::data
    XI --> DC[("Document text")]:::data

    FTS[("Unified search index")]:::data
    DB --> FTS
    IM --> FTS
    VC --> FTS
    DC --> FTS

    AGENT(["LLM coding agent<br/>(Windsurf · Cursor · Claude Code · Copilot)"]):::agent
    FTS --> AGENT
    AV  --> AGENT
Loading

Each on-device processor is opt-in — skip it, run it later, or re-run to resume where it left off. Re-running the top-level sync carries the already-processed work forward and prunes anything tied to messages you've since deleted on the phone.

People (face tagging)

The People step (Database tab → Image enrichment) groups the faces in your photos so you can find everyone who recurs. It runs entirely on your Mac: Apple Vision detects + aligns faces, an on-device face-recognition model embeds them, and they're clustered into people. Nothing is uploaded.

The model (AdaFace, MIT — see build/faces-helper/convert/) is not bundled; it's downloaded once on first use (~120 MB) to ~/Library/Application Support/whatskept/models/ and SHA-256 verified, the same way the Whisper speech model is.

You then name the people you care about in the grid (type a name; the same name on two groups merges them; ✕ a stray photo to remove it). Naming happens in the app; the tags are written into ChatStorage.sqlite (wa_person / wa_person_face / the v_person_photo view) and carried forward across re-syncs. Your agent reads them — "show me photos of hasan" resolves to the messages and opens the images. The app itself is only for tagging; querying is the agent's job.

Download

Pre-built macOS arm64 (Apple Silicon) binaries, ad-hoc signed.

Recommended — one Terminal command, zero Gatekeeper friction:

/bin/bash -c "$(curl -fsSL https://github.com/alkait/WhatsKept/releases/latest/download/install.sh)"

The script downloads the latest WhatsKept.app, verifies its SHA-256 against the release's SHA256SUMS, drops it into /Applications, and launches it. Re-run after every update.

Other ways to get it:

Prefer to build from source? See Build below.

How this was built

Built in a weekend with Claude Opus 4.7, burning ~$600 in tokens so you don't have to. Practically every line of code in this repo is AI-generated. I won't pretend I read it line by line — I didn't — but I stood behind every architecture decision: how the backup is decrypted, where secrets live, what crosses a network boundary, how the workspace is laid out, why the binary ships self-contained. The agent wrote the code; the design, the trade-offs, and the privacy posture are mine.

System requirements

  • macOS 13.0 Ventura or later on Apple Silicon (arm64) — the bundled Swift Vision helper is arm64-only, the embedded libimobiledevice dylibs come from /opt/homebrew/*, and the bundled whisper-cli is compiled with GGML_METAL=ON.
  • Full Disk Access for WhatsKept.app (or your Terminal, if you launched from a shell) — required to read ~/Library/Application Support/MobileSync/Backup/. Grant under System Settings → Privacy & Security → Full Disk Access.
  • An iOS backup of an iPhone/iPad with WhatsApp installed, plus its encryption password. The extractor reads $BACKUP_PASSWORD or a .env file in the workspace; it never prompts.
  • USB connection to the device if you want to drive a fresh backup from the Backups tab

Privacy

WhatsKept is designed to keep your WhatsApp history on your machine.

The good

  • No telemetry, no analytics, no accounts. By default WhatsKept sends none of your data anywhere. Its always-on outbound call is a version check to GitHub when the window opens; the whisper-model download and the cloud image-description feature are both opt-in (all three below). The version check and model download contact a well-known host and carry none of your WhatsApp data. The GUI's HTTP server binds to 127.0.0.1 only — it is not reachable from other devices on your network.
  • All processing is on-device. Image OCR + classification runs through Apple's Vision framework (whatskept-vision); voice transcription runs through whisper.cpp with Metal acceleration; face detection + recognition for the People feature run through Apple Vision + a local CoreML model (whatskept-faces). None of them talk to a cloud service — your photos and face data never leave the Mac.
  • Backup password is never transmitted. It's read from $BACKUP_PASSWORD or a .env file in the workspace, held in process memory for the lifetime of the app session, and cleared when you switch workspaces or quit. Not written anywhere by WhatsKept on its own.
  • Whisper model: one opt-in download. The first time you run voice transcription, the ~574 MB whisper model is downloaded from HuggingFace over HTTPS and SHA-256 verified. After that, that feature is fully offline.
  • Cloud image descriptions use your own key, held in RAM only. The opt-in OpenRouter feature (below) uses an API key you supply. It is validated against openrouter.ai, kept in process memory for the session, and never written to disk by WhatsKept; it is cleared when you switch workspaces or quit. WhatsKept sends no account or identifier of its own — just your key and the image being described.
  • Update check on launch. When the app window opens it asks the GitHub Releases API whether a newer version exists, so it can show the Update button in the header. It's a single unauthenticated GET to api.github.com — no account, no identifiers, none of your data. If GitHub is unreachable the app stays quiet and works normally offline. Clicking Update re-runs the official install.sh in Terminal (the same command in the install instructions above).

What to be cautious about

  • Cloud image descriptions send your images off the device. This is the one feature that breaks the on-device guarantee. When you enable it, each described image is uploaded to OpenRouter (https://openrouter.ai/api/v1/chat/completions) along with a fixed OCR + caption prompt; OpenRouter (and the upstream model provider it routes to) sees those image bytes, and they are subject to OpenRouter's data-retention policy, not WhatsKept's. Only images are sent — never your text messages, voice notes, or contacts — and only for the images you choose to run. The feature is off by default; if you never enter an API key and never start a cloud run, nothing is ever uploaded. Prefer the on-device Apple Vision OCR if you want zero data to leave the machine.
  • The workspace contains decrypted WhatsApp data. ChatStorage.sqlite, media/, voice/, documents/, and profiles/ are plaintext on disk, and the Messages sync also joins your macOS Contacts (names + phone numbers) into the database so chats are readable. Anyone with read access to that folder (other macOS users, Time Machine backups, cloud-sync folders like iCloud Drive / Dropbox / Google Drive) can read every message, contact, photo, and voice note. Pick a workspace path accordingly — ~/Documents is fine, ~/Dropbox is not.
  • The agent reads the text, but not the raw files. WhatsKept drops .windsurfignore, .copilotignore, and similar ignore files so agents stay out of the media/, voice/, documents/, and profiles/ folders — the actual photos, audio files, PDFs, and profile pictures are off-limits. What the agent does see is everything in the SQLite database: every message, every image's OCR'd text and classification labels, every voice-note transcript, and the contact names and numbers joined in. So when you ask a question, chunks of that chat history can be sent to the agent's LLM provider. Trust the agent's privacy story before pointing it at the workspace.
  • The .env file holds your backup password in plaintext. It lives inside the workspace directory; don't commit it to git, and don't ship the workspace folder anywhere.
  • Workspace deletion is permanent. The Delete button wipes the whole directory tree — there is no recycle bin, no undo. The encrypted iOS backup is untouched, so a fresh sync rebuilds, but any notes/state you kept in the workspace are gone.

Build

make build            # → dist/whatskept (always re-signs after build)

The Makefile invokes build/sign.sh after go build. This is not optional on Apple Silicon: post-link byte modifications by macOS tooling can silently invalidate the linker-emitted ad-hoc signature, producing a binary the kernel refuses to start (the process freezes with zero CPU time and cannot be killed). Re-signing fixes it unconditionally.

Run