@clauderecallhq/cli 0.12.0 → 0.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,230 +1,316 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="marketing/logos/wordmark-dark.svg">
5
- <source media="(prefers-color-scheme: light)" srcset="marketing/logos/wordmark-light.svg">
6
- <img src="marketing/logos/wordmark-dark.svg" alt="Claude Recall" width="360">
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/wordmark-dark.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/wordmark-light.svg">
6
+ <img src="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/wordmark-dark.svg" alt="Claude Recall" width="400">
7
7
  </picture>
8
8
 
9
- ### The memory layer for the agent you're steering.
9
+ <br />
10
+ <br />
10
11
 
11
- [![site-ci](https://github.com/clauderecallhq/clauderecall/actions/workflows/site-ci.yml/badge.svg)](https://github.com/clauderecallhq/clauderecall/actions/workflows/site-ci.yml)
12
- [![deploy-site](https://github.com/clauderecallhq/clauderecall/actions/workflows/deploy-site.yml/badge.svg)](https://github.com/clauderecallhq/clauderecall/actions/workflows/deploy-site.yml)
13
- [![Node](https://img.shields.io/badge/node-%E2%89%A522-43853d?logo=node.js&logoColor=white)](https://nodejs.org)
14
- [![TypeScript](https://img.shields.io/badge/typescript-strict-3178c6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
15
- [![Local-first](https://img.shields.io/badge/local--first-127.0.0.1%20only-0b0c0f)](#the-never-delete-data-invariant)
16
- [![Site](https://img.shields.io/badge/site-clauderecall.com-f97316)](https://clauderecall.com)
12
+ **Stop re-explaining your project to Claude every morning.**
13
+
14
+ Claude Recall indexes every Claude Code session you've ever run, surfaces what matters,<br />and pipes the right context back in with one command.
15
+
16
+ <br />
17
+
18
+ [![npm](https://img.shields.io/npm/v/@clauderecallhq/cli?style=flat-square&color=f97316&label=npm)](https://www.npmjs.com/package/@clauderecallhq/cli)
19
+ [![Node](https://img.shields.io/badge/node-%E2%89%A520-43853d?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org)
20
+ [![TypeScript](https://img.shields.io/badge/typescript-strict-3178c6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
21
+ [![Local-first](https://img.shields.io/badge/local--first-127.0.0.1%20only-0b0c0f?style=flat-square)](#privacy--security)
22
+ [![License](https://img.shields.io/badge/license-proprietary-1a1a2e?style=flat-square)](#license)
23
+ [![Site](https://img.shields.io/badge/clauderecall.com-f97316?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIiIHkxPSIxMiIgeDI9IjIyIiB5Mj0iMTIiLz48cGF0aCBkPSJNMTIgMmExNS4zIDE1LjMgMCAwIDEgNCAxMCAxNS4zIDE1LjMgMCAwIDEtNCA4IDEwIi8+PC9zdmc+)](https://clauderecall.com)
24
+
25
+ <br />
26
+
27
+ <sub>100% local. No cloud. No account. No telemetry. Your conversations never leave your machine.</sub>
17
28
 
18
29
  </div>
19
30
 
31
+ <br />
32
+
20
33
  ---
21
34
 
22
- > **Stop re-explaining your project to Claude every morning.**
23
- > Claude Recall indexes every session, surfaces what matters, and pipes the right context back in with one command.
35
+ <br />
36
+
37
+ ## The Problem
38
+
39
+ Claude Code is incredible until the conversation ends. Then you hit three walls:
40
+
41
+ <table>
42
+ <tr>
43
+ <td width="33%" valign="top">
44
+
45
+ ### Context Amnesia
46
+
47
+ Every new `claude` invocation starts from zero. You re-explain the architecture, re-paste the key files, re-describe the bug you already fixed yesterday.
48
+
49
+ You built that context pyramid once. Now you're building it again.
50
+
51
+ </td>
52
+ <td width="33%" valign="top">
24
53
 
25
- 100% local-first. The daemon binds to `127.0.0.1`, your conversations never leave your machine, and the only outbound call Recall will ever make is a one-time license check when you activate a Pro key (v0.6). No cloud, no account, no telemetry.
54
+ ### Cost Blindness
26
55
 
27
- ## Why Claude Recall
56
+ Claude Code tells you nothing about spend after a session ends. Which session burned through tokens? Which project is quietly eating half your Anthropic bill?
28
57
 
29
- Claude Code is magic until the conversation ends. Then you're back to the same three problems.
58
+ You're guessing.
30
59
 
31
- ### 1. Context amnesia
60
+ </td>
61
+ <td width="33%" valign="top">
32
62
 
33
- Every new `claude` invocation starts from zero. You re-explain the project layout, re-paste the key files, re-describe the bug you already fixed yesterday. You built that context pyramid once — now you're building it again.
63
+ ### Session Sprawl
34
64
 
35
- **Fixed by `recall context <id> | claude`** pipe any past session into a new conversation as condensed markdown. Claude picks up where you left off instead of asking you to explain it again. Runs locally, never touches the network.
65
+ Claude Code scatters conversations into `~/.claude/projects/**/*.jsonl`. No titles. No search. No way to find the session where you finally got the auth flow right.
66
+
67
+ Dozens of projects. Hundreds of sessions. Zero discoverability.
68
+
69
+ </td>
70
+ </tr>
71
+ </table>
72
+
73
+ <br />
74
+
75
+ ## The Fix
76
+
77
+ ```bash
78
+ npm install -g @clauderecallhq/cli
79
+ recall start
80
+ recall open
81
+ ```
82
+
83
+ That's it. Recall indexes every past and future Claude Code session into a searchable local database, gives you a beautiful web UI to explore them, and lets you pipe any session back into a new conversation:
36
84
 
37
85
  ```bash
38
- recall context abc12345 | claude # moat: past session new conversation
39
- recall context abc12345 --prelude "continue this" | claude
86
+ # The moat: past session -> new conversation
87
+ recall context abc12345 | claude
40
88
  ```
41
89
 
42
- ### 2. Cost anxiety
90
+ Claude picks up where you left off instead of asking you to explain it again.
91
+
92
+ <br />
43
93
 
44
- Claude Code tells you nothing about spend after a session ends. Which session was the expensive one? Which project is quietly burning half your Anthropic bill? You're guessing.
94
+ ---
45
95
 
46
- **Fixed by the stats dashboard** (v0.10a) — tokens, dollars, primary model, a daily sparkline, and the top-10 heaviest sessions. There's a 📊 pill in every transcript header and a `recall stats` subcommand if you prefer the terminal.
96
+ <br />
97
+
98
+ ## Features
99
+
100
+ <table>
101
+ <tr>
102
+ <td width="50%" valign="top">
103
+
104
+ ### Context Re-injection &nbsp;<sub>← the moat</sub>
105
+ Pipe any past session straight into a new Claude Code conversation as condensed markdown. Claude picks up where you left off instead of asking you to re-explain it. **Nothing else in this category has it.**
47
106
 
48
107
  ```bash
49
- recall stats abc12345 # one session
50
- recall stats --project Tools # one project
51
- recall stats --days 7 # last week across everything
108
+ recall context <id> | claude
109
+ recall context <id> --prelude "continue this" | claude
110
+ recall context <id> --since 2h | claude
52
111
  ```
53
112
 
54
- ### 3. Org sprawl
113
+ </td>
114
+ <td width="50%" valign="top">
115
+
116
+ ### Threads &nbsp;<sub>NEW · v0.15a</sub>
117
+ Group related sessions into a DAG you can see, rename, and walk. Drag-to-reparent in the graph view. Right-click rename. Bulk-generate coherent titles across an entire thread with one click.
118
+
119
+ ```bash
120
+ recall thread list
121
+ recall thread create "auth-refactor"
122
+ recall thread add <thread> <session>
123
+ ```
55
124
 
56
- Claude Code scatters every conversation into `~/.claude/projects/**/*.jsonl` — a write-only log with no titles, no search, no way to find the session where you finally got the auth flow right. Dozens of projects × hundreds of sessions × zero hope of finding anything manually.
125
+ </td>
126
+ </tr>
127
+ <tr>
128
+ <td width="50%" valign="top">
57
129
 
58
- **Fixed by search, tags, collections, and semantic recall** — full-text search with highlighted snippets in milliseconds, conceptual search for "the session where I debugged the worker memory leak," human-readable aliases, `#tag` tokens in the search box, hand-curated collections that cut across projects, and `Cmd+K` to jump to anything.
130
+ ### Full-Text Search
131
+ FTS5 BM25 ranking across every message, every session, in milliseconds. Highlighted snippets, inline `#tag` filters, project + date scoping.
59
132
 
60
133
  ```bash
61
- recall search "zod schema" # full-text across every message
62
- recall search "auth #auth-fix" # combine text + tag filter
63
- recall semantic on # enable conceptual search
134
+ recall search "zod schema"
135
+ recall search "auth #auth-fix" -p Pest-Control
64
136
  ```
65
137
 
66
- All local. All offline. All invisible enough for vibe coders and powerful enough for engineers.
138
+ </td>
139
+ <td width="50%" valign="top">
67
140
 
68
- ## Install (dev)
141
+ ### On-Device Vector Search &nbsp;<sub>Pro</sub>
142
+ Local **768-dimension embeddings** via `bge-base-en-v1.5` ONNX. Three-lane RRF fusion (BM25 + summary + vectors) finds sessions by *meaning*, not keywords. Your code never leaves your laptop.
69
143
 
70
144
  ```bash
71
- # 1. Install deps
72
- npm install
145
+ recall semantic install
146
+ recall similar <session-id>
147
+ ```
73
148
 
74
- # 2. Build
75
- npm run build
149
+ </td>
150
+ </tr>
151
+ <tr>
152
+ <td width="50%" valign="top">
76
153
 
77
- # 3. Make `recall` globally available
78
- npm link
154
+ ### Cost Analytics
155
+ Per-session and per-project token + dollar totals. Daily sparkline. Top-10 heaviest sessions. Know exactly where your Anthropic bill is going.
79
156
 
80
- # 4. Start the background daemon (watcher + HTTP server)
81
- recall start
157
+ ```bash
158
+ recall stats <id>
159
+ recall stats --project Tools --days 7
160
+ ```
82
161
 
83
- # 5. Open the web UI in your browser
84
- recall open
162
+ </td>
163
+ <td width="50%" valign="top">
164
+
165
+ ### Git Correlation
166
+ Every session links to commits authored in its working directory during its time window. Reverse-map any commit back to the session that produced it.
167
+
168
+ ```bash
169
+ recall correlate
170
+ recall blame <sha>
85
171
  ```
86
172
 
87
- ## Usage
173
+ </td>
174
+ </tr>
175
+ <tr>
176
+ <td width="50%" valign="top">
177
+
178
+ ### Auto-Tagging
179
+ Let Claude label your sessions automatically. Two modes: **MCP mode** (zero-setup, runs through your existing Claude Code subscription at no extra cost) or **BYOK** (paste your own Anthropic API key). Off by default, fully opt-in.
88
180
 
89
- ### Terminal
181
+ </td>
182
+ <td width="50%" valign="top">
183
+
184
+ ### MCP Server &nbsp;<sub>31 tools</sub>
185
+ Expose Recall to Claude Desktop, Claude Code, or any MCP client as native tools. **13 read tools always on**, **18 write tools** opt-in with rate limiting and append-only audit logging.
90
186
 
91
187
  ```bash
92
- # lifecycle
93
- recall start # start daemon (watcher + local HTTP)
94
- recall stop # stop daemon
95
- recall open # open web UI (starts daemon if needed)
96
- recall status # db + daemon health
188
+ recall mcp
189
+ recall mcp --allow-writes
190
+ ```
97
191
 
98
- # indexing (daemon auto-indexes; manual is a fallback)
99
- recall index # scan for new/changed session files
100
- recall index --force # reindex everything
101
- recall index -v # verbose
192
+ </td>
193
+ </tr>
194
+ <tr>
195
+ <td width="50%" valign="top">
102
196
 
103
- # explore
104
- recall projects # list projects with session counts
105
- recall list # 30 most-recent sessions
106
- recall list -p Tools # filter by project substring
107
- recall list -n 100 # higher limit
197
+ ### Collections, Tags & Notes
198
+ Hand-curated hierarchical collections that cut across projects. Flat tags. Markdown notes per session. Aliases. Pins. Cross-session diff. Every write is reversible -- three-layer durability with plain-text mirrors on disk.
108
199
 
109
- # read
110
- recall show <id> # pretty transcript, auto-pages through `less` if long
111
- recall show <id> --raw # raw JSONL
112
- recall show <id> --no-pager # dump to stdout
200
+ </td>
201
+ <td width="50%" valign="top">
113
202
 
114
- # search (full-text over every message)
115
- recall search "zod schema"
116
- recall search "auth" -p Pest-Control
117
- recall search bug -n 50
203
+ ### Web UI
204
+ Dark-mode three-pane layout. **Virtualized transcript** (10,000-message sessions open instantly). `Cmd+K` command palette. Cross-session diff. First-60-seconds onboarding tour. Export to markdown, HTML, or print-ready PDF.
205
+
206
+ </td>
207
+ </tr>
208
+ <tr>
209
+ <td width="50%" valign="top">
210
+
211
+ ### Rediscovery &nbsp;<sub>"For you"</sub>
212
+ Three rotating cards in the left pane surface forgotten sessions worth revisiting: a 60+-day-old session that overlaps with what you've been working on, your top-cost session this week, and the session that authored your current `HEAD`.
118
213
 
119
- # context re-injection (the moat)
120
- recall context <id> # condensed markdown to stdout
121
- recall context <id> | pbcopy # to clipboard (macOS)
122
- recall context <id> | claude # pipe into a new Claude Code session
123
- recall context <id> --full # full transcript (bigger)
124
- recall context <id> --since 2h # only last 2 hours
125
- recall context <id> --prelude "continue this" # prepend an instruction
126
- recall context <id> --subagents # include subagent messages
127
-
128
- # stats (v0.10a)
129
- recall stats <id> # tokens + dollars for one session
130
- recall stats --project Tools # per-project rollup
131
- recall stats --days 7 # 7-day overview
132
- recall stats --backfill # one-shot usage backfill for older messages
133
-
134
- # git correlation (v0.10b)
135
- recall correlate # link sessions to commits in their cwd
136
- recall blame <sha> # reverse lookup: commit → session
137
-
138
- # semantic search (v0.11)
139
- recall semantic on # enable conceptual search
140
- recall semantic off # disable
141
- recall semantic status # backfill progress
142
- recall semantic backfill # run now
143
- recall semantic pause # pause background worker
144
- recall semantic resume # resume worker
145
- recall semantic install # download the local embedding model
146
- recall semantic uninstall # remove the local model
147
- recall semantic reindex # regenerate all summaries
148
-
149
- # similar sessions (Pro, requires vector model)
150
- recall similar <id> # sessions related to this one
151
- recall similar <id> -n 5 # top 5 results
152
-
153
- # clipboard archiving (opt-in)
154
- recall paste # archive clipboard contents
155
- recall paste --label "zod fix" # attach a short description
156
- recall paste --dry-run # preview without writing
157
- recall paste --pipe # echo content to stdout after archiving
158
- recall paste --force # skip secret-scan confirmation
159
- recall paste --list # list archived pastes
160
- recall paste --purge <id> # permanently delete one paste
161
-
162
- # security scanning
163
- recall audit-secrets # scan db for leaked secrets (read-only)
164
- recall audit-secrets --redact # scrub hits in place (source JSONLs untouched)
165
- recall audit-secrets -v # verbose per-session output
166
-
167
- # rediscovery ("For you" picks)
168
- recall digest # today's picks (rediscovered session, costliest, HEAD author)
169
- recall digest --json # machine-readable output
170
-
171
- # VS Code / Cursor / Windsurf extension sideloading
172
- recall install-extension # install into all detected editors
173
- recall install-extension --editor cursor # target one editor
174
- recall install-extension --print-path # print .vsix path and exit
175
-
176
- # memory health scores
177
- recall health # all projects, worst health first
178
- recall health "My Project" # single-project breakdown
179
- recall health --json # machine-readable output
180
-
181
- # verification badges (opt-in preview)
182
- recall verify # show current status (default)
183
- recall verify on # enable
184
- recall verify off # disable
185
-
186
- # Pro licensing
187
- recall activate <license-key> # activate a Pro license (one-time)
188
- recall license # show current tier (default: status)
189
- recall license status # same as above
190
- recall license deactivate # remove license from this machine
191
-
192
- # threads (v0.15a) - intent-grouped session clusters
193
- recall thread list # list threads (most recent first)
194
- recall thread list --archived # include archived threads
195
- recall thread show <id> # thread header + session tree
196
- recall thread new "Auth refactor" # create a thread
197
- recall thread new "Auth" --origin <sid> # create with an origin session
198
- recall thread new "Auth" --summary "..." # create with a summary
199
- recall thread link <sid> --thread <tid> # link a session into a thread
200
- recall thread link <sid> --thread <tid> --parent <pid> # link as child of another session
201
- recall thread unlink <sid> --thread <tid> # remove session from thread
202
- recall thread set-parent <sid> --thread <tid> --parent <pid> # re-parent within thread
203
- recall thread set-parent <sid> --thread <tid> --parent none # promote to origin
204
- recall thread rename <id> "New name" # rename a thread
205
- recall thread close <id> # mark work complete
206
- recall thread reopen <id> # reopen a closed thread
207
- recall thread archive <id> # soft-delete (hidden from list, never hard-deleted)
208
- recall thread merge <source> --into <dest> # merge two threads
209
- recall thread split <id> --sessions s1,s2 --name "New thread" # split sessions into new thread
214
+ ```bash
215
+ recall digest
210
216
  ```
211
217
 
212
- ### MCP server (v0.9, bidirectional v0.13)
218
+ </td>
219
+ <td width="50%" valign="top">
213
220
 
214
- Point any Model Context Protocol client — Claude Desktop, Claude Code, or your own — at the `claude-recall-mcp` binary and the model calls Recall as native tools.
221
+ ### IDE Extension
222
+ **VS Code · Cursor · Windsurf · VS Code Insiders.** Tag terminal tabs from inside your editor -- terminal names sync to Recall so sessions get meaningful aliases with zero CLI ceremony, live as you rename tabs.
215
223
 
216
224
  ```bash
217
- # Runs over stdio, never touches the network
218
- claude-recall-mcp
225
+ recall install-extension
226
+ ```
219
227
 
220
- # Or via the CLI shim
221
- recall mcp
228
+ </td>
229
+ </tr>
230
+ </table>
222
231
 
223
- # Opt in to write tools (tag, alias, note, collection) — off by default
224
- recall mcp --allow-writes
232
+ <br />
233
+
234
+ <details>
235
+ <summary><strong>More: secrets redaction, memory health, audit log, keyboard shortcuts...</strong></summary>
236
+
237
+ <br />
238
+
239
+ - **Secrets redaction** -- API keys, auth tokens, passwords, private-key blobs are detected by pattern and replaced with placeholders **before** text lands in the searchable index or any export. Original JSONLs untouched.
240
+ - **Memory health scores** -- every session gets a freshness score; surfaces stale data so you know when to re-run a backfill.
241
+ - **MCP audit log** -- every write tool call lands in `mcp_audit_events` with status (ok / error / rate_limited). Pure local, no telemetry.
242
+ - **First-60-seconds onboarding** -- 3-step modal demos the moat (`recall context <id> | claude`) the moment you open the web UI.
243
+ - **Cmd+K command palette** -- jump to any session, action, or setting in one keystroke.
244
+ - **Multi-select sessions** -- `Cmd+Click` toggle, `Shift+Click` range, right-click to copy IDs.
245
+ - **Three-layer durability** -- every write goes to SQLite + an append-only history column + a plain-text mirror on disk. Source JSONLs at `~/.claude/projects/` are strictly read-only.
246
+
247
+ #### Keyboard Shortcuts
248
+
249
+ | Key | Action |
250
+ |---|---|
251
+ | `/` | Focus search |
252
+ | `?` | Open Command Center |
253
+ | `Cmd+K` / `Ctrl+K` | Command palette |
254
+ | `Esc` | Close / clear / dismiss |
255
+ | `n` / `p` | Next / previous search match |
256
+ | `c` | New collection |
257
+ | `Cmd+Shift+A` | Add session to collection |
258
+ | `Cmd+Enter` | Save note |
259
+
260
+ </details>
261
+
262
+ <br />
263
+
264
+ ---
265
+
266
+ <br />
267
+
268
+ ## Quick Start
269
+
270
+ ### Install
271
+
272
+ ```bash
273
+ npm install -g @clauderecallhq/cli
274
+ ```
275
+
276
+ ### Start
277
+
278
+ ```bash
279
+ # Start the background daemon (file watcher + local HTTP server)
280
+ recall start
281
+
282
+ # Open the web UI
283
+ recall open
225
284
  ```
226
285
 
227
- Minimal Claude Code / Claude Desktop config:
286
+ The daemon watches `~/.claude/projects/` for new and changed session files, indexes them into a local SQLite database at `~/.recall/db.sqlite`, and serves the web UI on a random `127.0.0.1` port.
287
+
288
+ ### Explore
289
+
290
+ ```bash
291
+ recall projects # list projects with session counts
292
+ recall list # 30 most-recent sessions
293
+ recall list -p Tools # filter by project
294
+ recall show <id> # pretty-printed transcript
295
+ recall search "auth bug" # full-text search
296
+ ```
297
+
298
+ ### The Moat
299
+
300
+ ```bash
301
+ # Pipe a past session into a new Claude Code conversation
302
+ recall context abc12345 | claude
303
+
304
+ # With a custom instruction
305
+ recall context abc12345 --prelude "continue where we left off" | claude
306
+
307
+ # Just the last 2 hours
308
+ recall context abc12345 --since 2h | claude
309
+ ```
310
+
311
+ ### MCP Server
312
+
313
+ Point any MCP client at Recall and the model calls it as native tools:
228
314
 
229
315
  ```json
230
316
  {
@@ -236,310 +322,401 @@ Minimal Claude Code / Claude Desktop config:
236
322
  }
237
323
  ```
238
324
 
239
- 13 read-only tools (always available):
325
+ <details>
326
+ <summary><strong>Available MCP tools (31 total)</strong></summary>
327
+
328
+ <br />
329
+
330
+ **Read tools (13 -- always available):**
240
331
 
241
332
  | Tool | Purpose |
242
333
  |---|---|
243
334
  | `list_projects` | Every indexed project with session/message counts |
244
- | `list_sessions` | Recent sessions, filterable by project / tag / date range |
335
+ | `list_sessions` | Recent sessions; filters: project, tag, date range |
245
336
  | `list_tags` | Tag cloud with counts, most popular first |
246
- | `list_sessions_to_tag` | Sessions formatted for an agent to propose tags (auto-tag must be enabled) |
247
- | `apply_tags` | Merge-add tags to a session (auto-tag must be enabled) |
248
- | `search` | Full-text search; supports inline `#tag-name` tokens; fuses with vector lane when available |
249
- | `find_similar_sessions` | Vector-similarity search for related sessions (Pro) |
250
- | `semantic_status` | Health snapshot of the semantic vector tier (Pro) |
251
- | `get_session` | Full transcript with metadata and tags (accepts 8+-char id prefix) |
252
- | `context_for_session` | Condensed-markdown export - the moat, callable as a tool |
253
- | `thread_list` | All threads, newest first (excludes archived by default) |
337
+ | `list_sessions_to_tag` | Surface untagged sessions for review |
338
+ | `apply_tags` | Add tags to a session (merge-mode) |
339
+ | `search` | Full-text search with `#tag` support; BM25 + optional vector fusion |
340
+ | `find_similar_sessions` | Semantic similarity via vector embeddings (Pro) |
341
+ | `semantic_status` | Health snapshot: model, worker, queue depth (Pro) |
342
+ | `get_session` | Full transcript (accepts 8+ char id prefix) |
343
+ | `context_for_session` | Condensed markdown export, ready to inject |
344
+ | `thread_list` | All threads, newest first; can exclude archived |
254
345
  | `thread_get` | Full thread detail with every session edge |
255
- | `thread_for_session` | Threads containing a given session |
346
+ | `thread_for_session` | Non-archived threads referencing a session |
256
347
 
257
- 18 write tools (v0.13+, require `--allow-writes`):
348
+ **Write tools (18 -- opt-in via `--allow-writes`):**
258
349
 
259
350
  | Tool | Purpose |
260
351
  |---|---|
261
- | `add_tag` / `remove_tag` | Organize sessions from inside Claude |
262
- | `set_alias` | Rename a session (archives previous name) |
263
- | `append_note` | Append to a session's markdown note |
264
- | `create_collection` | Make a new collection, optionally under a parent |
265
- | `add_session_to_collection` / `remove_session_from_collection` | Curate collection memberships |
266
- | `thread_create` | Create a new thread, optionally seeded with an origin session |
267
- | `thread_add_session` | Attach a session to a thread (origin or child) |
268
- | `thread_set_parent` | Change a session's parent within a thread (null to promote) |
269
- | `thread_remove_session` | Detach a session from a thread |
352
+ | `add_tag` / `remove_tag` | Tag management; removals logged in append-only log |
353
+ | `set_alias` | Human-friendly session name; previous alias archived |
354
+ | `append_note` | Add markdown to session note; separated by `---` |
355
+ | `create_collection` | New collection; optional parent, icon, color |
356
+ | `add_session_to_collection` | Idempotent collection membership |
357
+ | `remove_session_from_collection` | Remove session; logged in append-only log |
358
+ | `thread_create` | Create thread, optionally seed with origin session |
359
+ | `thread_add_session` | Attach session; role=origin or child |
360
+ | `thread_set_parent` | Change parent within thread; null clears parent |
361
+ | `thread_remove_session` | Detach session from thread |
270
362
  | `thread_rename` | Change thread display name |
271
- | `thread_close` / `thread_reopen` | Mark work complete or reopen |
272
- | `thread_archive` | Soft-delete a thread (hidden, never hard-deleted) |
273
- | `thread_merge` | Dissolve one thread into another |
274
- | `thread_split` | Peel sessions into a new thread |
275
- | `generate_thread_titles` | Walk the thread DAG and generate coherent titles for each session |
363
+ | `thread_close` / `thread_reopen` | Mark thread as closed or reopen |
364
+ | `thread_archive` | Soft-delete thread; hidden by default |
365
+ | `thread_merge` | Move all edges from source to dest, delete source |
366
+ | `thread_split` | Peel sessions into new thread |
367
+ | `generate_thread_titles` | Generate coherent titles for sessions in thread DAG |
276
368
 
277
- Every write is rate-limited (default 60/min), zod-validated, audited to `mcp_audit_events`, and scoped to Recall's own metadata layer - session content is never mutated and no file paths are accepted as input.
369
+ All writes are rate-limited (default 60/min), zod-validated, and audited to `~/.recall/audit/`.
278
370
 
279
- ### Web UI
371
+ </details>
372
+
373
+ <br />
280
374
 
281
- Press **`?`** anywhere to open the Command Center — full docs with sections for Quickstart, Web UI tour, CLI commands, Keyboard shortcuts, Collections, Your data, Exporting, Security, Pro tips, MCP server, VS Code extension, Pricing, FAQ, and Troubleshooting.
375
+ ---
282
376
 
283
- Keyboard shortcuts:
377
+ <br />
284
378
 
285
- | Key | Action |
379
+ ## How It Works
380
+
381
+ ```
382
+ ~/.claude/projects/**/*.jsonl <-- Claude Code's session files (read-only to Recall)
383
+ |
384
+ v chokidar file watcher
385
+ ~/.recall/db.sqlite <-- indexed database (FTS5 + sqlite-vec 768d)
386
+ |
387
+ +-- background embedding worker (idle-aware, transactional)
388
+ +-- git correlator (read-only `git log` scoped to session cwd)
389
+ +-- semantic / auto-tag scanner (opt-in, off by default)
390
+ |
391
+ +-----+-----+
392
+ | |
393
+ CLI HTTP server (Hono, 127.0.0.1 only)
394
+ | |
395
+ recall ... Web UI (React + Tailwind SPA, Vite-bundled)
396
+ MCP server (stdio, 31 tools, opt-in writes)
397
+ ```
398
+
399
+ ### Data stays local
400
+
401
+ | Path | What |
286
402
  |---|---|
287
- | `/` | Focus the search box |
288
- | `?` | Open Command Center |
289
- | `Cmd+K` / `Ctrl+K` | Open the command palette (jump to any session, action, or setting) |
290
- | `Esc` | Close/clear/dismiss |
291
- | `n` / `p` | Next / previous match (during search) |
292
- | `c` | New collection |
293
- | `Cmd+Shift+A` | Add current session to a collection |
294
- | `Cmd+Enter` | Save note |
295
- | `Cmd+Click` / `Ctrl+Click` (sessions list) | Toggle row in a multi-selection |
296
- | `Shift+Click` (sessions list) | Extend the multi-selection as a range |
403
+ | `~/.recall/db.sqlite` | Indexed database (projects, sessions, messages, FTS5, vectors, aliases, notes, tags, collections, threads, semantic summaries, commit links, usage rollups, audit logs) |
404
+ | `~/.recall/aliases.json` | Plain-text mirror of every alias with full edit history |
405
+ | `~/.recall/notes/<session>.md` | One markdown file per session note |
406
+ | `~/.recall/tags.json` | Current tag state + append-only event log |
407
+ | `~/.recall/collections.json` | Current tree state + append-only event log |
408
+ | `~/.recall/semantic/<id>.json` | Per-session summary + keywords (semantic mode) |
409
+ | `~/.recall/license.jwt` | Activated Pro license (offline-validatable, dead-man clause) |
297
410
 
298
- ## Features
411
+ <br />
299
412
 
300
- Everything the CLI and UI surface — demoted to reference material because the three pains above are the actual reason you'd install this.
413
+ ---
301
414
 
302
- - **Indexes every past session** into SQLite + FTS5 at `~/.recall/db.sqlite`
303
- - **Full-text search** across 100,000+ messages in milliseconds with `bm25()` ranking and highlighted snippets
304
- - **Semantic search** (v0.11) — 3-sentence summary + ~15 keywords per session via your local `claude` CLI; off by default
305
- - **Context re-injection** (v0.4) — `recall context <id> | claude`. The moat
306
- - **Cost analytics** (v0.10a) — per-session and per-project token + dollar totals, daily sparkline, top-10 heaviest sessions
307
- - **Git correlation** (v0.10b) — every session links to commits authored in its `cwd` during its time window; `recall blame <sha>` reverse-maps
308
- - **MCP server** (v0.9, bidirectional v0.13) — expose Recall to Claude Desktop / Claude Code as native tools
309
- - **Collections** (v0.8) — hand-picked hierarchical groupings of sessions that cut across projects
310
- - **Aliases, tags, notes, pins** — every metadata layer keeps history; UUIDs stay the immutable primary key
311
- - **Auto-tagging** (v0.9, off by default) — propose tags via your Anthropic API key or your local `claude` CLI through MCP (zero extra cost)
312
- - **Cmd+K command palette** (v0.12a) — jump to any session, action, or setting in one keystroke
313
- - **Multi-select sessions** — `Cmd+Click` to toggle, `Shift+Click` for a range, then right-click for a copy-IDs menu (newline / space / comma separated) or use the inline "copy IDs" button — paste straight into a new Claude prompt
314
- - **Cross-session diff** (v0.4.4) — split view of two transcripts with shareable `cmp=` URL
315
- - **VS Code / Cursor / Windsurf extension** (v0.7) — auto-name sessions using the terminal tab name via process-tree matching
316
- - **First-run onboarding** (v0.14a) — a 3-step tour that demos the moat in the first 60 seconds
317
- - **Beautiful dark-mode web UI** — three-pane layout with virtualized transcript (10,000-message sessions open instantly)
318
- - **Export** — condensed markdown, full markdown, self-contained dark-mode HTML, print-ready PDF
415
+ <br />
319
416
 
320
- ## Architecture
417
+ ## Privacy & Security
321
418
 
322
- ### Two surfaces don't confuse them
419
+ Claude Recall is **local-first by design**, not as an afterthought.
323
420
 
324
- Claude Recall spans two independent frontends that share the `clauderecall.com` brand:
421
+ - **The daemon binds to `127.0.0.1` only.** Never `0.0.0.0`, never a public interface.
422
+ - **No telemetry. No analytics. No background phone-home.** The daemon, file watcher, indexer, and web UI never make outbound network calls. Your session content never leaves your machine.
423
+ - **The only outbound calls are user-initiated**, never automatic, and never transmit your session data:
325
424
 
326
- | Surface | Stack | Lives at | Purpose |
327
- |---|---|---|---|
328
- | **Local product** (this repo, `src/web/`) | Vite 8 + React 19 + Tailwind, served by the Hono daemon | `http://127.0.0.1:<random-port>` on the user's machine | The actual `recall` experience the UI the user opens when they type `recall open` |
329
- | **Marketing / docs site** (separate deploy) | Next.js | `clauderecall.com` | Public landing, SEO, MDX docs, AI-search citability, checkout (v0.6) |
425
+ | Command | Endpoint | What it sends | What it gets |
426
+ |---|---|---|---|
427
+ | `recall activate <key>` | `clauderecall.com` | The license key only | A signed JWT for offline validation |
428
+ | `recall semantic install` | `huggingface.co` | Nothing about you | The `bge-base-en-v1.5` ONNX model file |
330
429
 
331
- **Why Vite for the local product**: the UI is embedded in an offline CLI. No SEO, no public traffic, no SSR a small static bundle the daemon serves from `dist/web/` is the right shape, and keeps the packaged `@clauderecallhq/cli` footprint lean.
430
+ Both are optional and not required for core indexing, search, or context re-injection. Skip them and Recall is fully air-gapped.
431
+ - **No cloud. No account.** Your data lives at `~/.recall/` and nowhere else.
432
+ - **Source sessions are never modified.** Claude Code's JSONL files at `~/.claude/projects/` are strictly read-only to Recall.
433
+ - **Never-delete-data invariant.** Every write enforces three independent durability layers: SQLite with history columns, plain-text mirror on disk, and source JSONLs untouched. Renaming, clearing, or removing anything is always additive -- the prior value is archived, never destroyed.
332
434
 
333
- **Why Next.js for the public site**: SEO, social previews, SSG/MDX, edge hosting — Next.js's sweet spot. It gets its own repo (or at minimum a separate `site/` directory with its own `package.json`) so the CLI install never pulls in a Next.js runtime.
435
+ <br />
334
436
 
335
- ### Local product internals
437
+ ---
336
438
 
337
- ```
338
- ~/.claude/projects/**/*.jsonl ← Claude Code's own output (read-only to us)
339
-
340
- ▼ chokidar file watcher
341
- ~/.recall/db.sqlite ← our indexed database
342
-
343
- ┌─────┴─────┐
344
- │ │
345
- CLI HTTP server (Hono, on random localhost port)
346
- │ │
347
- recall … http://127.0.0.1:<port>
348
-
349
-
350
- React + Tailwind SPA (Vite build, served from dist/web/)
439
+ <br />
440
+
441
+ ## Full CLI Reference
442
+
443
+ <details>
444
+ <summary><strong>Click to expand</strong></summary>
445
+
446
+ <br />
447
+
448
+ ```bash
449
+ # Lifecycle
450
+ recall start # start daemon (watcher + local HTTP)
451
+ recall stop # stop daemon
452
+ recall open # open web UI (starts daemon if needed)
453
+ recall status # db + daemon health
454
+
455
+ # Indexing
456
+ recall index # scan for new/changed session files
457
+ recall index --force # reindex everything
458
+
459
+ # Explore
460
+ recall projects # list projects with session counts
461
+ recall list # 30 most-recent sessions
462
+ recall list -p Tools # filter by project substring
463
+ recall list -n 100 # higher limit
464
+
465
+ # Read
466
+ recall show <id> # pretty transcript, auto-paged
467
+ recall show <id> --raw # raw JSONL
468
+ recall show <id> --no-pager
469
+
470
+ # Search
471
+ recall search "zod schema"
472
+ recall search "auth" -p Pest-Control
473
+ recall search bug -n 50
474
+
475
+ # Context re-injection
476
+ recall context <id> # condensed markdown
477
+ recall context <id> | pbcopy # to clipboard (macOS)
478
+ recall context <id> | claude # into new Claude session
479
+ recall context <id> --full # full transcript
480
+ recall context <id> --since 2h # last 2 hours only
481
+ recall context <id> --prelude "continue this" # prepend instruction
482
+ recall context <id> --subagents # include subagent messages
483
+
484
+ # Stats
485
+ recall stats <id> # tokens + dollars for one session
486
+ recall stats --project Tools # per-project rollup
487
+ recall stats --days 7 # 7-day overview
488
+ recall stats --backfill # one-shot usage backfill
489
+
490
+ # Git correlation
491
+ recall correlate # link sessions to commits
492
+ recall blame <sha> # commit -> session reverse lookup
493
+
494
+ # Semantic / vector search (Pro)
495
+ recall semantic install # download on-device embedding model
496
+ recall semantic status # model + backfill progress
497
+ recall semantic reindex # re-embed everything
498
+ recall similar <id> # cosine kNN over session chunks
499
+
500
+ # Threads (v0.15a)
501
+ recall thread list # all threads, newest first
502
+ recall thread create <name> # new thread
503
+ recall thread add <t> <s> # attach session to thread
504
+
505
+ # Rediscovery
506
+ recall digest # today's "For you" picks
507
+ recall digest --json # machine-readable
508
+
509
+ # MCP server
510
+ recall mcp # stdio, read-only
511
+ recall mcp --allow-writes # opt-in write tools
512
+
513
+ # Pro license
514
+ recall activate <key> # one-time activation, offline forever
515
+ recall license # show license status
516
+
517
+ # IDE extension
518
+ recall install-extension # auto-install for VS Code / Cursor / Windsurf
519
+
520
+ # Maintenance
521
+ recall health # memory health scores per project
522
+ recall paste # archive clipboard content into Recall (opt-in)
523
+ recall audit-secrets # scan index for residual secrets
351
524
  ```
352
525
 
353
- ### Data layout (all under `~/.recall/`)
526
+ </details>
354
527
 
355
- | Path | What |
528
+ <br />
529
+
530
+ ---
531
+
532
+ <br />
533
+
534
+ ## Tech Stack
535
+
536
+ | Layer | Technology |
356
537
  |---|---|
357
- | `db.sqlite` | The indexed database (projects, sessions, messages, FTS5, aliases, notes, tags, collections, semantic summaries, commit links, usage rollups, audit logs) |
358
- | `aliases.json` | Plain-text mirror of every alias with full edit history |
359
- | `notes/<session>.md` | One markdown file per session note |
360
- | `tags.json` | Current tag state + append-only event log of every add/remove |
361
- | `collections.json` | Current tree state + append-only event log of every mutation |
362
- | `semantic/<session>.json` | Per-session summary + keywords (only when semantic mode is on) |
363
- | `daemon.pid` | Running daemon metadata |
364
- | `daemon.port` | Port the daemon picked |
365
- | `daemon.log` | Daemon logs |
366
-
367
- ## The "never delete data" invariant
368
-
369
- Every user-created write feature enforces **three independent durability layers**:
370
-
371
- 1. **SQLite** — primary storage with history columns (`previous_aliases`, `previous_versions`, `tag_events`, `collection_events`)
372
- 2. **Plain-text mirror on disk** — JSON or markdown files so the data is greppable, editable, and recoverable if the database is wiped
373
- 3. **Source JSONLs are never modified** — Claude Code's own files at `~/.claude/projects/` are strictly read-only to Recall
374
-
375
- Renaming, clearing, or removing anything is always additive — the prior value is archived, never destroyed.
376
-
377
- ## Tech stack
378
-
379
- ### CLI + daemon (Node, ESM)
380
- - **TypeScript 5** strict mode, compiled with `tsc` to `dist/`
381
- - **better-sqlite3** — synchronous SQLite with FTS5 full-text search
382
- - **Hono** + **@hono/node-server** — HTTP server on a random ephemeral port (never a well-known dev port)
383
- - **chokidar** — filesystem watcher
384
- - **commander** — CLI parsing
385
- - **@modelcontextprotocol/sdk** — MCP stdio server (v0.9 read-only, v0.13 bidirectional)
386
- - **zod** — schema validation on every MCP write
387
- - **chalk**, **cli-table3**, **date-fns** — terminal formatting
388
-
389
- ### Web UI (bundled into daemon)
390
- - **Vite 8** + **React 19** + **TypeScript**
391
- - **Tailwind CSS 3** — dark palette matching the app brand (`#0b0c0f` / `#f97316` accent)
392
- - **@tanstack/react-query** — data fetching with caching
393
- - **@tanstack/react-virtual** — virtualized message list (handles 10k+ message sessions)
394
- - **marked** + **highlight.js** + **DOMPurify** — markdown rendering with syntax highlighting and XSS hardening
395
- - **clsx** — conditional class names
396
- - Inter + JetBrains Mono fonts from Google Fonts
397
-
398
- ### Storage
399
- - SQLite with FTS5 porter/unicode61 tokenization
400
- - `~/.recall/` as the root for everything user-generated
401
- - `~/.claude/projects/` as the external read-only source of truth
402
-
403
- ## Auto-tagging (v0.9)
404
-
405
- Propose tags for your sessions with an LLM, then review before anything is written. Two backends: your Anthropic API key OR your Claude Code agent via MCP (zero extra cost). Off by default.
406
-
407
- See [`docs/auto-tagging.md`](./docs/auto-tagging.md) for setup.
538
+ | CLI + daemon | TypeScript (strict), Node 20+, ESM |
539
+ | HTTP server | Hono + @hono/node-server |
540
+ | Database | better-sqlite3 with FTS5 full-text search |
541
+ | Vector store | sqlite-vec (768d, on-device) |
542
+ | Embeddings | @huggingface/transformers (`bge-base-en-v1.5` ONNX) |
543
+ | File watcher | chokidar |
544
+ | CLI parsing | commander |
545
+ | MCP server | @modelcontextprotocol/sdk (stdio) |
546
+ | Validation | zod |
547
+ | Auth | jose (offline-validatable signed JWT licenses) |
548
+ | Web UI | Vite 8 + React 19 + Tailwind CSS |
549
+ | Data fetching | @tanstack/react-query |
550
+ | Virtualization | @tanstack/react-virtual |
551
+ | Markdown | marked + highlight.js + DOMPurify |
552
+
553
+ <br />
408
554
 
409
- ## Roadmap
555
+ ---
410
556
 
411
- See [ROADMAP.md](./ROADMAP.md) for the full plan. Shipped so far:
557
+ <br />
412
558
 
413
- - ✅ v0.1–v0.5 — CLI, daemon, web UI, context re-injection (the moat), aliases, notes, tags, cross-session diff, MCP read-only server
414
- - ✅ v0.7 — VS Code / Cursor / Windsurf extension (process-tree tab correlation)
415
- - ✅ v0.8 — Collections (hand-curated hierarchical groupings across projects)
416
- - ✅ v0.9 — Auto-tagging (API key or MCP backend, off by default)
417
- - ✅ v0.10a — Cost / token analytics (dashboard + `recall stats`)
418
- - ✅ v0.10b — Git correlation (session ↔ commit, `recall blame`)
419
- - ✅ v0.11 — Semantic search via local `claude` CLI
420
- - ✅ v0.12a — `Cmd+K` command palette
421
- - ✅ v0.13 — Bidirectional MCP write tools (opt-in, rate-limited, audited)
422
- - ✅ v0.14a — First-60-seconds onboarding flow
423
- - ✅ **v0.14c — Positioning rewrite (this pass)**
424
- - ⬜ v0.6 — Commercialize: Next.js landing at `clauderecall.com` + LemonSqueezy license flow
559
+ ## Distribution
425
560
 
426
- ## Production deployment & CI/CD
561
+ Claude Recall ships on every surface a developer already works in.
427
562
 
428
- The marketing / docs site at [clauderecall.com](https://clauderecall.com) is the only piece of Claude Recall with a remote deploy — the local CLI ships through npm. The deploy is fully automated through GitHub Actions and lands on a dedicated isolated user on a DigitalOcean droplet behind a Cloudflare Tunnel.
563
+ | Surface | Identity | Install |
564
+ |---|---|---|
565
+ | **npm** (CLI + MCP) | [`@clauderecallhq/cli`](https://www.npmjs.com/package/@clauderecallhq/cli) | `npm i -g @clauderecallhq/cli` |
566
+ | **VS Code Marketplace** | [`clauderecallhq.clauderecall-vscode`](https://marketplace.visualstudio.com/items?itemName=clauderecallhq.clauderecall-vscode) | Search "Claude Recall" in Extensions |
567
+ | **MCP Registry** | [`io.github.clauderecallhq/recall`](https://registry.modelcontextprotocol.io/) | Auto-discovered by MCP clients |
568
+ | **Claude Code Plugin Hub** | `claude-recall` | `/plugin install claude-recall` in Claude Code |
569
+ | **Website** | [clauderecall.com](https://clauderecall.com) | -- |
429
570
 
430
- ### Pipeline
571
+ The npm package ships **the CLI and the MCP server**. The VS Code extension is a thin companion that talks to the local daemon over `127.0.0.1`. The MCP Registry and Claude Code Plugin Hub both point back to the npm package -- one source of truth, one update pipeline.
431
572
 
432
- ```
433
- push to main (touching site/** | site-ci.yml | src/web/components/HelpView.tsx)
434
-
435
-
436
- site-ci typecheck → lint → sync:docs → unit tests → e2e (Playwright)
437
- → build → Lighthouse → bundle size ~3 min
438
-
439
- ▼ workflow_run on success only
440
- deploy-site setup Node 22 → npm ci → next build → load deploy SSH key
441
- → ssh-keyscan droplet → rsync .next/ + public/ + manifests
442
- → npm install --omit=dev on droplet → pm2 restart
443
- → curl 5 routes for 200 → cleanup SSH key ~1 min
444
-
445
-
446
- clauderecall.com is live
447
- ```
573
+ <br />
448
574
 
449
- `site-ci` and `deploy-site` are decoupled — `site-ci` always runs on PRs and on `main`; `deploy-site` only runs after `site-ci` succeeds on `main` (via `workflow_run`), so a red test gate blocks the deploy automatically.
575
+ ---
450
576
 
451
- ### Manual triggers
577
+ <br />
452
578
 
453
- ```bash
454
- # Re-run the full test suite against main (e.g. after rotating a secret).
455
- gh workflow run site-ci --ref main
579
+ ## Pricing
456
580
 
457
- # Bypass site-ci and re-deploy main as-is (useful after editing
458
- # /opt/clauderecall/.env.production on the droplet without a code change).
459
- gh workflow run deploy-site --ref main
581
+ One tier is free forever. One tier is a **one-time** purchase that works offline for life, even if we disappear. One tier is a conversation.
582
+
583
+ <table>
584
+ <tr>
585
+ <td width="33%" valign="top">
586
+
587
+ ### Free
588
+
589
+ **$0**
590
+ Forever. No signup. No credit card.
591
+
592
+ - Full indexing of every `~/.claude/projects/` JSON-L
593
+ - CLI: `list`, `show`, `projects`, `status`
594
+ - Web UI: browse projects, read transcripts, copy code
595
+ - Three-layer durability
596
+
597
+ ```bash
598
+ npm install -g @clauderecallhq/cli
460
599
  ```
461
600
 
462
- You can also trigger both from the Actions tab in the GitHub UI ("Run workflow" button).
601
+ </td>
602
+ <td width="33%" valign="top">
463
603
 
464
- ### Droplet topology
604
+ ### Pro &nbsp;<sub>← daily driver</sub>
465
605
 
466
- The droplet is multi-tenant, with each app fully isolated:
606
+ **$29.69 one-time**
607
+ Pay once. Offline forever. Dead-man clause included.
608
+ *Less than two coffees a year out.*
467
609
 
468
- | Concern | Boundary |
610
+ - Full-text search (FTS5 BM25)
611
+ - On-device semantic vector search (768d, RRF fusion)
612
+ - `recall context` re-injection -- **the moat**
613
+ - MCP server (Claude Desktop / Claude Code native tools)
614
+ - VS Code / Cursor / Windsurf extension
615
+ - Aliases, tags, markdown notes, pins, date filters, cross-session diff
616
+ - Export: clean markdown, self-contained dark-mode HTML, print-ready
617
+ - Virtualized transcript (10k+ message sessions open instantly)
618
+ - Auto-tagging (API-key + MCP modes)
619
+ - Secrets redaction (client-side scrub of keys, tokens, passwords pre-index)
620
+ - **Every future personal-use feature.** One price, lifetime updates.
621
+
622
+ [**Buy Pro for $29.69 →**](https://clauderecall.com/pricing)
623
+
624
+ </td>
625
+ <td width="33%" valign="top">
626
+
627
+ ### Enterprise
628
+
629
+ **Contact us**
630
+ Priced per deal.
631
+
632
+ - Shared session library with end-to-end encrypted team sync
633
+ - Team-wide tag conventions
634
+ - Local audit log (compliance-grade, not surveillance)
635
+ - SSO + per-project access control
636
+ - Priority support, named engineer
637
+ - Optional on-prem deployment
638
+
639
+ [hello@clauderecall.com](mailto:hello@clauderecall.com)
640
+
641
+ </td>
642
+ </tr>
643
+ </table>
644
+
645
+ <br />
646
+
647
+ ### How it compares to what you already pay
648
+
649
+ | Tool | Price |
469
650
  |---|---|
470
- | **Linux user** | Dedicated `clauderecall` user (uid 1004). No sudo, no extra groups. |
471
- | **App path** | `/opt/clauderecall/` owned by `clauderecall:clauderecall`. |
472
- | **Logs** | `/var/log/clauderecall/{out,error}.log`. |
473
- | **License DB** | `/var/lib/clauderecall/licenses.db` SQLite, owned by `clauderecall`. |
474
- | **Network** | Next.js bound to `127.0.0.1:3010` only. No public port; reached exclusively through the Cloudflare Tunnel. |
475
- | **Cloudflare Tunnel** | Dedicated tunnel `clauderecall` (its own systemd unit `cloudflared-clauderecall.service`), independent of every other tenant on the box. |
476
- | **SSH** | `clauderecall-prod` host alias backed by a dedicated ed25519 key. CI uses a separate ed25519 key (rotatable without disturbing local deploys). Key-only auth — `PasswordAuthentication no` droplet-wide. |
477
- | **Secrets** | `.env.production` lives only on the droplet (`0600`, never in git, never in CI artifacts). Rotate via `site/scripts/admin/swap-env-var.sh`. |
651
+ | **Claude Recall** | **$29.69 one-time** |
652
+ | Claude Code | $20 / mo |
653
+ | Cursor | $20 / mo |
654
+ | Raycast Pro | $8–$16 / mo |
655
+ | GitHub Copilot | $10 / mo |
478
656
 
479
- ### Local deploy (escape hatch)
657
+ <sub>Prices as of April 2026.</sub>
480
658
 
481
- When CI is the wrong tool — emergency hotfix while CI is down, swapping live keys, etc. — the same script CI uses runs from a Mac:
659
+ <br />
482
660
 
483
- ```bash
484
- cd site
485
- bash scripts/deploy/deploy-to-production.sh # full deploy
486
- bash scripts/deploy/deploy-to-production.sh --dry-run # show plan only
487
- bash scripts/deploy/deploy-to-production.sh --skip-build # reuse current .next/
488
- ```
661
+ ### The dead-man clause
489
662
 
490
- Pre-reqs: the `clauderecall-prod` SSH alias in `~/.ssh/config` and the matching ed25519 key in `~/.ssh/clauderecall_deploy`.
663
+ Your Pro license validates against our server exactly once, at activation. After that, Recall works **offline forever**. If `clauderecall.com` ever disappears, every existing license stays valid -- we'll publish the validation secret if we ever shut down, so you're never stranded.
491
664
 
492
- ### Swapping a single env var on the droplet
665
+ Full pricing FAQ: **[clauderecall.com/pricing](https://clauderecall.com/pricing)**
493
666
 
494
- ```bash
495
- # Reads value from stdin, never argv → never lands in shell history.
496
- echo -n 'sk_live_...' | bash site/scripts/admin/swap-env-var.sh STRIPE_SECRET_KEY
667
+ <br />
497
668
 
498
- # Or interactive (hidden prompt).
499
- bash site/scripts/admin/swap-env-var.sh STRIPE_SECRET_KEY
500
- ```
669
+ ---
501
670
 
502
- The script edits the file atomically on the droplet via Python, restarts PM2 with `--update-env` so the new value takes effect, and prints a `[set, N chars]` confirmation that never reveals the value.
671
+ <br />
503
672
 
504
- ## Contributing / local development
673
+ ## Roadmap
505
674
 
506
- ```bash
507
- # Develop CLI
508
- npm run dev # tsx runs src/cli.ts
675
+ - [x] CLI, daemon, web UI, full-text search
676
+ - [x] Context re-injection (the moat)
677
+ - [x] Aliases, notes, tags, pins
678
+ - [x] Cross-session diff
679
+ - [x] VS Code / Cursor / Windsurf extension
680
+ - [x] MCP server (read-only)
681
+ - [x] Collections (hierarchical, cross-project)
682
+ - [x] Auto-tagging (MCP + BYOK modes)
683
+ - [x] Cost / token analytics
684
+ - [x] Git correlation
685
+ - [x] Cmd+K command palette
686
+ - [x] Bidirectional MCP write tools (rate-limited + audited)
687
+ - [x] First-60-seconds onboarding
688
+ - [x] Rediscovery surface ("For you" cards)
689
+ - [x] **On-device vector search** (768d ONNX embeddings, RRF fusion)
690
+ - [x] **Threads** -- DAG view, drag-to-reparent, bulk title generation
691
+ - [x] **Pro license + dead-man clause** (offline-validatable JWT)
692
+ - [x] Memory health scores
693
+ - [x] Claude Code plugin manifest
694
+ - [ ] Public launch at clauderecall.com
695
+ - [ ] Team features (E2E-encrypted sync, SSO, audit log)
696
+ - [ ] Enterprise tier (on-prem, named-engineer support)
697
+
698
+ <br />
699
+
700
+ ---
509
701
 
510
- # Develop web UI with hot reload
511
- recall start # keep daemon running on port X
512
- RECALL_DAEMON_PORT=X npm run dev:web # vite dev server on 5174, proxies /api → daemon
702
+ <br />
513
703
 
514
- # Typecheck
515
- npm run typecheck
704
+ <div align="center">
516
705
 
517
- # Full build
518
- npm run build # tsc + vite
519
- ```
706
+ <picture>
707
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/mark-scrollback-dark.svg">
708
+ <img src="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/mark-scrollback-dark.svg" alt="Claude Recall" width="48">
709
+ </picture>
520
710
 
521
- Key files:
522
- - `src/cli.ts` — CLI entry (commander)
523
- - `src/daemon/` — background server + file watcher
524
- - `src/db/schema.ts` — SQL schema (single source of truth, `IF NOT EXISTS` migrations)
525
- - `src/parser/jsonl.ts` — JSONL → structured records (tool_use captured as markdown, ANSI stripped, usage counters extracted, secrets auto-redacted at ingest)
526
- - `src/context/formatter.ts` — shared markdown formatter used by `recall context` CLI + `/api/sessions/:id/context` HTTP + MCP
527
- - `src/utils/aliases.ts`, `notes.ts`, `tags.ts`, `collections.ts` — write features with three-layer durability
528
- - `src/utils/pricing.ts` — static ¢/Mtok pricing table (derived, not persisted)
529
- - `src/semantic/pipeline.ts` — Claude-CLI-backed semantic summaries
530
- - `src/mcp/` — MCP stdio server (read-only tools + opt-in write tools + audit + rate limiter)
531
- - `src/commands/*.ts` — individual CLI subcommands
532
- - `src/web/App.tsx` — root React component
533
- - `src/web/commands/` — command palette registry + built-ins
534
- - `src/web/components/` — each pane and feature
535
- - `src/web/hooks/` — `useHashRoute`, `usePinned`, `useAlias`, `useNotes`, `useTags`, `useOnboarding`, `useDebounced`
711
+ <br />
712
+ <br />
536
713
 
537
- ## Brand, registries, and identities
714
+ **Claude Recall** -- the memory layer for the agent you're steering.
538
715
 
539
- See [`BRAND.md`](./BRAND.md) for the complete inventory of npm packages, VS Code / Open VSX extension listings, domain names, and social handles that make up the official Claude Recall presence — plus the outstanding defensive work and the 2026-04-23 npm-squatter incident that triggered the scoped-package pivot.
716
+ [Website](https://clauderecall.com) &nbsp;&middot;&nbsp; [Install](https://www.npmjs.com/package/@clauderecallhq/cli) &nbsp;&middot;&nbsp; [Issues](https://github.com/clauderecallhq/.github/issues)
540
717
 
541
- Short version: official CLI ships as **`@clauderecallhq/cli`** on npm, the canonical VS Code extension is **`clauderecallhq.clauderecall-vscode`**, and the product site lives at **[clauderecall.com](https://clauderecall.com)**. Anything else using the Claude Recall name is not us.
718
+ <br />
542
719
 
543
- ## License
720
+ <sub>Built by <a href="https://github.com/clauderecallhq">@clauderecallhq</a></sub>
544
721
 
545
- UNLICENSED, private until v0.6 launch.
722
+ </div>