Recall
An instrument for unfinished thought

Never lose
the thread.

Recall reconstructs what you were working on — the tabs, the files, the half-finished chat — and hands it back the moment you return. One keystroke. 100% on your machine.

no cloud · no telemetry · plain files you can read and delete

memory graph~/.recall · deterministic
reconnect.rs · left mid-editissue #88wb-1751 · 47-min block
recovery = f(events, gaps, returns) — no weights, no guessing
· principles
  • 01Local-firstnothing leaves your machine
  • 02Deterministicsame events in, same memory out
  • 03Inspectableplain files — cat, grep, rm
  • 04Budgetedspeed enforced by the test suite
  • 05Calmno badges, no feed, no noise
[ live ]Try the launcher

Type a word. Watch it find the work.

This is the real launcher, driving itself over a demo memory — the same panel ⌃Space summons over any app. Click in and search; every keystroke filters your reconstructed sessions in under 100 ms.

spacesummons it anywhere
Continue where you left off
WebSocket reconnect bug
3 tabs · 2 files · left mid-implementation
↵ resume
Seed deck — narrative pass
yesterday 4:12pm · 6 events
Rust async runtime research
research → implementation · 3 days
↑↓ move↵ openesc close
to recall your work
<100ms
smoke-tested budget
engine layers
7
strictly composing upward
bytes to any cloud
0
loopback is the boundary
folder holds it all
1
~/.recall — yours to delete
[01]A day, in twenty-two seconds

Watch the thread break, then come back.

Not a video — the interface itself, acting it out. Your scroll is the playhead.

9:41 AM

You're deep in it.

Three tabs, a file half-written, one good question in a chat. The shape of the thing is finally forming.

11:00 AM

Then the day happens.

A standup. A customer call. Someone's quick question that wasn't. The windows close, one by one.

3:12 PM

You come back to nothing.

Clean desk, empty head. The work is somewhere — in history, in downloads, in a chat you can't name. The thread is gone.

3:13 PM

One keystroke. All of it, back.

⌃ space. The file opens, the chat returns, the tabs line up in the order you need them. Recall kept the thread.

recall — demo workspace9:41 AM
socket.rs — ~/dev/relay
browser
chatgpt.com
Calendar
Standup — now
Six hours later.
+space
Continue where you left off
WebSocket reconnect bug
1 file · 1 chat · 2 tabs · left mid-implementation
↵ resume
↑↓ move↵ resumeesc close
1 · files2 · chats3 · tabs
Restored — 1 file · 1 chat · 2 tabs
Never lose
the thread.
recall — capturing
00:00 / 00:22
[02]Capabilities

Everything you need. Nothing watching you.

Recall captures the shape of your work — never the content of your screen — and turns it into something you can return to.

browser_visitstripe.com/docs/webhooks19:42
browser_focusdwell 4m 12s · wb-175119:46
chat_sessionclaude.ai — retry logic19:51
open~/dev/api/webhooks.py19:58

Capture that reads like a logbook

Visits, searches, chats, file opens, attention. Plain JSONL on your disk — auditable with cat, deletable with rm.

linkedin.comnever captured
bank-of-anything.comnever captured
+ the site you were just on

Private sites stay private

One click excludes a domain forever. Pause everything for an hour from the toolbar.

9:14 researchbreak10:02 implementation

Work-blocks, not clock windows

Dwell and focus group your day behaviourally — the way it actually happened.

1 files2 chats3 tabs, by domain4 searches

Restore is choreographed

Enter doesn't explode ten tabs at you. Work reopens in order, staggered, so you re-enter the room the way you left it.

⌕ rlhf reading notes
rlhf-notes.md~/Documents/research0.81
reward-shaping.pdf~/Documents/papers0.74

Search memory and disk together

One query spans what you saw and what you saved — episodic memory plus semantic file search over folders you choose.

+space

One keystroke away

Summon it over any app. Re-record the hotkey live in settings — it can never end up unreachable.

[03]Architecture

One engine, every surface.

Everything you do flows into one deterministic engine on loopback — through seven layers, and back out to every surface you summon.

stripe.comreconnect.rs⌥ 4m 12sgit commit↵ resume88 todayGET /v1/searchChrome · Edge · ArcVS CodeDesktop focusGit · CLIRECALL ENGINE127.0.0.1:4545 · local onlyevents → sessions → contexts → resurfacing → threads →evolution → recoveryLauncher — ⌃spaceExtension popupConsole · API
$ everything stays in ~/.recall/ — delete the folder, it never happened
budgets, enforced by the test suite: writes <2 ms · search <60 ms · resurfacing <25 ms · recovery <80 ms
[04]The browser extension

A quiet witness,
with a perfect memory.

The extension is how Recall sees your browsing — and it is deliberately small. It reads the URL and title of pages you visit, recognises searches and AI conversations, and hands them to the daemon on your machine. It cannot read page contents, and it cannot talk to any other server.

Recalldaemon ok
Continue
WebSocket reconnect bug
1 file · 1 chat · 2 tabs · resume
open →
Active threads
Seed deck — narrative pass
yesterday · 6 events
Hiring — staff designer
2 weeks · 11 events
Today
14:12chatWebSocket reconnect strategy
14:03searchexponential backoff jitter
13:41visitdocs.rs/tokio — time::interval
local onlyno cloud0 uploadsdaemon ok3 queued
Any page you visit→ visit · url + title
Google, DuckDuckGo, Bing, Kagi, Perplexity→ search · the query
ChatGPT, Claude, Gemini, Copilot, Grok…→ chat · conversation title
Single-page apps changing routes→ captured · no reload needed
  • Never page contents — the DOM is never read.
  • Never incognito windows, ever.
  • Never sites on your exclude list.
  • Never any server except 127.0.0.1:4545 — the browser physically refuses.
tabs · SPA routes · chats → normalizedurable outbox → batched POST /v1/events/batch → engine daemon asleep or laptop offline? events wait in the outbox and sync the moment it returns — nothing is lost.
01

Install the app

Download Recall for macOS or Windows — the daemon starts with your machine and holds your memory.

02

Add the extension

Chrome, Edge, Brave or Arc — one click, two permissions, one loopback origin.

03

Forget about it

The toolbar icon is a glance surface: your strongest thread, today's trail, and proof that everything stayed local.

And the browser is only the first source. Memory has one door — a loopback API — so anything you work in can feed it.

Browser — visits, searches, AI chatsbuilt in
VS Code — the files you settle on and savecompanion extension
Git — commits and branch switchesone-line hook
Anything else — scripts, notebooks, window managersPOST /v1/events/batch
[ install ]

Three steps, no build.

It ships pre-built — no Node, no compiler. Download the ZIP, unzip it, load it unpacked. Chrome, Edge, Brave or Arc.

Download the extension
  1. 01Unzip the folder somewhere you'll keep it — moving it later uninstalls the extension.
  2. 02Open chrome://extensions and turn on Developer mode.
  3. 03Hit Load unpacked, pick the folder — the icon lights up once Recall is running.
works where you work
Chrome Edge Brave Arc VS Code macOS git hooks curl · API Gmail Claude ChatGPT GitHub
[05]The surfaces

One memory, every screen.

The console reads straight from the daemon on loopback — every engine layer, today’s rhythm, the threads you’re carrying, and the live tail. Your own browser, 127.0.0.1:4545, zero proxying.

The Recall console — engine layers, today's 24-hour rhythm, continue, active threads, on-your-radar and the live tailThe Recall console in ink night
Consoleon your desk — the full operator viewPopupin your toolbar — glance and act, ⌘KLauncherover everything — ⌃space, one keystroke
[06]Local-first is the point

It stays on your machine.

Nothing leaves

No cloud, no sync, no remote inference. The only outbound call is a one-time model download on first run.

Everything readable

Every memory is plain JSONL on disk. Open it, grep it, diff it — there is no opaque database.

Delete is a full reset

All state lives in one folder. Remove it and Recall forgets completely, with nothing left on a server.

~/.recall/ ├── events/2026-06-25.jsonl # every captured moment, one per line ├── threads.json # topic identity — safe to delete, re-derives └── config.json # your folders and toggles

Built, deliberately

  • Deterministic engine — same events in, same memory out
  • Plain-text artifacts you can open, grep and diff
  • Performance budgets enforced in tests, per endpoint
  • A durable capture queue — offline means delayed, never lost
  • One keystroke from anywhere — ⌃Space

Refused, deliberately

  • No cloud sync, no accounts, no telemetry
  • No notifications, badges or streaks
  • No recommendation feed
  • No LLM chat over your files
  • No learned weights guessing what you meant
[07]The honest table

Total recall, without the surveillance.

The other way to remember everything is to record everything and upload it. We think that's the wrong trade.

RecallCloud recall appsBrowser history
Where your data livesyour disk — ~/.recall, plain texttheir serversyour disk
What gets capturedtitles, URLs, attention — never contentcontinuous screen recordingsURLs only, no context
Can it resume your work?one keystroke, in ordersearch, then reopen by handscroll and guess
Works with the daemon offcapture queues, nothing lostneeds their uptimeyes
Cost + sourcefree · open sourcesubscription · closedfree · built in
every claim above is checkable — the code is public and the files are yours
Built in the open.

Every layer, every budget, every decision — public. Read the code, run the smoke tests, file the issue.

github.com/kunalKumar-13/Recall-me ↗
launcher · ⌃space resume browser + editor + desktop capture attention signal (work-blocks) semantic file search macOS .dmg notarized public release behavioural session engine windows + linux
[08]Questions, answered plainly

Everything you'd want to ask.

Can it read what's on a page?

No. The extension uses the browser's tabs API — URL and title only. There are no content scripts and the DOM is never touched. You can read the whole capture worker in a few minutes; it's plain JavaScript in the repo.

Where does my data live?

In one folder — ~/.recall/ — as plain JSONL text files. Open them in any editor. Deleting the folder is a complete, immediate reset. Nothing exists anywhere else.

What if the app isn't running?

The extension keeps capturing into a durable queue inside the browser and delivers everything the moment the daemon is back. A "queued" pill in the popup tells you exactly how many events are waiting. Nothing is dropped.

Is this AI? Does it learn about me?

No models make decisions about your memory. The engine is deterministic heuristics — the same events always produce the same threads. The only model on your machine is a small local embedding model for file search, downloaded once.

Does it slow anything down?

Capture writes take under 2 milliseconds. Recalling your work is budgeted under 100 milliseconds — the budgets are enforced by the test suite, and a miss is treated as a bug.

Which browsers work?

Chrome, Edge, Brave, Arc — anything Chromium with Manifest V3. Incognito is never captured, and you can exclude any domain in settings.

[09]Get Recall

Your mind, rethreaded.

Install once, leave it running for years. Plain files, one folder, zero cloud — and one keystroke back to the work.

Alpha · Apple Silicon · macOS 11+ · unsigned — on first open, right-click Recall → Open once.

step 01Open the .dmgDrag Recall to Applications, then right-click → Open once (unsigned during alpha). It lives in the menu bar and starts the local engine.
step 02Add the extensionUnzip it, then Load unpacked in Chrome, Edge, Brave or Arc — no build step. Capture starts quietly, with an exclusion list you control.
step 03Press ⌃SpaceWork normally. Next interruption, one keystroke hands the thread back.