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

推荐订阅源

Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
C
Cyber Attacks, Cyber Crime and Cyber Security
Security Latest
Security Latest
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
S
Schneier on Security
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
F
Full Disclosure
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Hacker News: Ask HN
Hacker News: Ask HN
G
Google Developers Blog
H
Heimdal Security Blog
O
OpenAI News
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LangChain Blog
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
IT之家
IT之家
Cyberwarzone
Cyberwarzone
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Know Your Adversary
Know Your Adversary
博客园 - 聂微东
The Cloudflare Blog
C
Check Point Blog
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
月光博客
月光博客
T
Tor Project blog
T
Threat Research - Cisco Blogs
T
Tailwind CSS Blog
P
Proofpoint News Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
A
About on SuperTechFans
小众软件
小众软件
Cloudbric
Cloudbric
A
Arctic Wolf

Show HN

GitHub - steveking-gh/firmion: Firmion is DSL and engine for firmware image generation. GitHub - villagesql/villagesql-skills: Agent skills for VillageSQL - gemini-cli-extension; claude-code-plugin GitHub - 0gsd/enough: a personal language system for planning, writing, and translation. GitHub - flightdeckhq/flightdeck: Observability and control plane for AI agents. CSP Radar GitHub - Light-Heart-Labs/DreamServer: Turn your PC, Mac, or Linux box into an AI server. LLM inference, chat UI, voice, agents, workflows, RAG, and image generation. GitHub - Diplomat-ai/diplomat-agent-ts: What can your TypeScript AI agent do to the real world? Scan your code. See which tool calls have zero checks Code Block Selector - Visual Studio Marketplace Prometheus dependency graph — interactive showcase | Riftmap Show HN: I made a vi-like modal keyboard plugin for Figma GitHub - run-llama/liteparse: A fast, helpful, and open-source document parser GitHub - dalemyers/Roar: A macOS CLI tool for notifications GitHub - district-solutions/open-agent-tools-coder: Enables small-to-large self-hosted ai models to use local source code when running tool-calling agentic workloads. We actively data mine 20,900+ (2+ TB) popular github repos using large and small ai models to create reuseable: json, markdown and parquet files for local-first tool-calling models. GitHub - progapandist/stripeek: A local TUI proxy for real-time Stripe API debugging, built for navigating complex payloads fast. GitHub - sir1st/hermes-desktop: All-in-one cross-platform desktop app for Hermes Agent — bundles Python + hermes-agent + hermes-web-ui GitHub - astefanutti/shaderbang: Shebang for Shaders Show HN: Generate Claude Code Workflows using Spec Driven Development approach GitHub - nixys/nxs-universal-chart: The Helm chart you can use to install any of your applications into Kubernetes/OpenShift Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap GitHub - noopolis/moltnet: Self-hostable chat network for AI agents. Pre-built bridges for Claude Code, Codex, and the Claws. Rooms, DMs, history. No Slack bots, no Matrix, no glue code. GitHub - tamerh/enju: Coordinating Humans, AI Agents, and Compute as Peers on a Shared Workflow Graph Show HN: Continuity-auth – Respect-weighted rate limits for the open web GitHub - luml-ai/luml: AI lifecycle platform where engineers and agents track experiments, train models, and ship to production. GitHub - mrdanielcasper/CoreTex: A UNIX-inspired, biomimetic, flat-file AI harness and knowledge engine. GitHub - clemg/pierre-github: Pierre's diffs.com and trees.software for Github GitHub - lyriks-io/unspaghettit: Behavior-driven AI development without prompt spaghetti. GitHub - sofumel/claude-handoff-revive: Resume Claude Code work after rate/usage/context limits without replaying the prior transcript. Auto-saves at 90%/95% usage. Plugin-installable, 10 languages. GitHub - dotexorg/saferpc: Typed, end-to-end encrypted RPC over any bidirectional channel. GitHub - BeeZeeAgent/beezee: Agent harness orchestration Legato Next.js Boilerplate for Internal Tools · CoreUI GitHub - clark-labs-inc/clark-hash: Clark Hash, 32x smaller searchable sketches for embeddings GitHub - ZeroPointRepo/youtube-mcp: The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free. Typing Mastery — climb toward 100+ WPM, deliberately GitHub - Andebugulin/Awareen GitHub - fayzan123/claude-workflow-composer: Visual desktop app for composing multi-agent coding workflows. Drag agents, attach skills and MCPs, wire handoffs, export to .claude/ GitHub - harshaneel/humanize: Best static AI text humanizer. Two research-grounded skills that work in any LLM (Claude, ChatGPT, Gemini, Codex): humanize beats perplexity-based detectors, ai-check produces forensic scoring with evidence-quoted flags. Nine levers, 50+ peer-reviewed sources, 2024-2026 detection literature. GitHub - StackOneHQ/stack-nudge GitHub - nodes-app/swift-markdown-engine: A native AppKit Markdown editor for macOS, built on TextKit 2 and bridged to SwiftUI. We hardened an LLM agent. Each defense we added made it more exploitable. GitHub - octelium/cordium: Open-source, general-purpose sandbox platform for devs and AI agents that provides identity-based secure access to infrastructure without credentials. WAR.GOV/UFO Microfilm5 GitHub - scosman/videowright: Build animated explainer videos with your coding agent GitHub - dipankar/dscode: The code editor you can take apart. GitHub - zoharbabin/web-researcher-mcp: MCP server (Go) for AI assistants: web search, content extraction, academic/patent/news research. Multi-provider routing, 4-tier scraping, search lenses. Works with Claude, Cursor, and any MCP client. GitHub - ruvnet/RuView: π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video. GitHub - scanaislop/aislop: Catch the slop AI coding agents leave in your code: narrative comments, swallowed exceptions, as-any casts, dead code, oversized functions. 50+ rules across 7 languages (TypeScript, JavaScript, Python, Go, Rust, Ruby, PHP). Sub-second, deterministic, no LLM at runtime. MIT-licensed. GitHub - kouhxp/cheap-im: CPU-only voice agent approximating Thinking Machines' Interaction Models demo GitHub - unprovable/OrchidMantis: Orchid Mantis — standalone framework for Zero-Knowledge Proofs of eXploit (ZKPoX). GitHub - MarcellM01/TinySearch: Shrink the web for your local LLMs! GitHub - TangibleResearch/Halgorithem: A Algo designed to detect AI Hallucitions GitHub - DO-SAY-GO/freelang: I love freelang GitHub - CarpseDeam/Aura-IDE: An AI coding harness that shaped itself - Planner/Worker agents, repo awareness, surgical edits, validation, recovery, and safe diff approvals. GitHub - chojs23/concord: A feature-rich TUI client for Discord GitHub - tommyjepsen/awesome-ux-skills: UX & AI Product designs skills you can use today in Claude Code GitHub - aerf-spec/aerf: Agent Evidence Receipt Format (AERF) — an open specification for tamper-evident, independently verifiable records of AI agent actions. GitHub - kklimuk/docx-cli: CLI for AI agents (Claude, Codex) to read, edit, and comment on .docx files with full format fidelity. GitHub - Jwrede/tokentoll: Catch LLM cost changes in code review. Infracost for LLM spend. GitHub - samchon/ttsc: A `typescript-go` toolchain for compiler-powered plugins and type-safe execution + 500x faster lint integrated into compiler GitHub - Higangssh/homebutler: 🏠 Manage your homelab from chat. Single binary, zero dependencies. GitHub - olalie/tapmap: See where your computer connects and what stands out on a live world map. GitHub - Diplomat-ai/diplomat-agent: What can your AI agent do to the real world? Scan your code. See which tool calls have zero checks GitHub - Bajusz15/beacon: Open-source agent for secure remote access, monitoring, and deploys across home-lab and self-hosted machines like Raspberry Pi, N100, or any Linux server. Open web based TTY or tunnel Home Assistant and other local services securely without opening ports. BigTech AI News - Chrome 应用商店 GitHub - vinhnx/VTCode: VT Code is an open-source coding agent with LLM-native code understanding and robust shell safety. Supports multiple LLM providers with automatic failover and efficient context management. GitHub - michaelaz774/decision-engine: A decision operating system for startup founders, powered by Claude Code. Synthesizes wisdom from 25+ legendary founders and investors into interactive AI-driven decision frameworks. GitHub - Chrilleweb/dotenv-diff: Validate environment variable usage in your codebase GitHub - Lumen-Labs/brainapi2: BrainAPI is a knowledge graph–powered AI memory layer that transforms unstructured data into structured knowledge, enabling intelligent search, recommendations, and contextual memory for AI agents and applications. GitHub - familiar-software/familiar: Let AI watch you work. Familiar lets your AI update its memory, skills, and knowledge by watching your screen. GitHub - skorotkiewicz/rudo: A small, elegant dock for Wayland GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. make sidebar/address bar rounded corner toggleable
GitHub - alkait/WhatsKept: Agent-queryable WhatsApp history from an iOS backup — a single Go binary.
tenthead · 2026-05-25 · via 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