@clauderecallhq/cli 0.12.0 → 0.12.1

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.
Files changed (3) hide show
  1. package/README.md +468 -413
  2. package/package.json +3 -3
  3. package/README.public.md +0 -523
package/README.md CHANGED
@@ -1,230 +1,273 @@
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%A522-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.
24
48
 
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.
49
+ You built that context pyramid once. Now you're building it again.
26
50
 
27
- ## Why Claude Recall
51
+ </td>
52
+ <td width="33%" valign="top">
28
53
 
29
- Claude Code is magic until the conversation ends. Then you're back to the same three problems.
54
+ ### Cost Blindness
30
55
 
31
- ### 1. Context amnesia
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?
32
57
 
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.
58
+ You're guessing.
34
59
 
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.
60
+ </td>
61
+ <td width="33%" valign="top">
62
+
63
+ ### Session Sprawl
64
+
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
36
76
 
37
77
  ```bash
38
- recall context abc12345 | claude # moat: past session → new conversation
39
- recall context abc12345 --prelude "continue this" | claude
78
+ npm install -g @clauderecallhq/cli
79
+ recall start
80
+ recall open
40
81
  ```
41
82
 
42
- ### 2. Cost anxiety
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:
84
+
85
+ ```bash
86
+ # The moat: past session -> new conversation
87
+ recall context abc12345 | claude
88
+ ```
43
89
 
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.
90
+ Claude picks up where you left off instead of asking you to explain it again.
45
91
 
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.
92
+ <br />
93
+
94
+ ---
95
+
96
+ <br />
97
+
98
+ ## Features
99
+
100
+ <table>
101
+ <tr>
102
+ <td width="50%" valign="top">
103
+
104
+ ### Search Everything
105
+ Full-text search across 100,000+ messages in milliseconds. BM25 ranking, highlighted snippets, inline `#tag` filters.
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 search "zod schema"
109
+ recall search "auth #auth-fix"
52
110
  ```
53
111
 
54
- ### 3. Org sprawl
55
-
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.
112
+ </td>
113
+ <td width="50%" valign="top">
57
114
 
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.
115
+ ### Context Re-injection
116
+ The core feature. Pipe any past session into a new Claude Code conversation as condensed markdown. Runs locally, never touches the network.
59
117
 
60
118
  ```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
119
+ recall context <id> | claude
120
+ recall context <id> --prelude "continue this" | claude
64
121
  ```
65
122
 
66
- All local. All offline. All invisible enough for vibe coders and powerful enough for engineers.
123
+ </td>
124
+ </tr>
125
+ <tr>
126
+ <td width="50%" valign="top">
67
127
 
68
- ## Install (dev)
128
+ ### Cost Analytics
129
+ Per-session and per-project token + dollar totals. Daily sparkline. Top-10 heaviest sessions. Know exactly where your Anthropic bill is going.
69
130
 
70
131
  ```bash
71
- # 1. Install deps
72
- npm install
132
+ recall stats <id>
133
+ recall stats --project Tools
134
+ recall stats --days 7
135
+ ```
73
136
 
74
- # 2. Build
75
- npm run build
137
+ </td>
138
+ <td width="50%" valign="top">
76
139
 
77
- # 3. Make `recall` globally available
78
- npm link
140
+ ### Git Correlation
141
+ 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.
79
142
 
80
- # 4. Start the background daemon (watcher + HTTP server)
81
- recall start
143
+ ```bash
144
+ recall correlate
145
+ recall blame <sha>
146
+ ```
82
147
 
83
- # 5. Open the web UI in your browser
84
- recall open
148
+ </td>
149
+ </tr>
150
+ <tr>
151
+ <td width="50%" valign="top">
152
+
153
+ ### Semantic Search
154
+ Conceptual search powered by your local `claude` CLI. Find "the session where I debugged the worker memory leak" without remembering exact words.
155
+
156
+ ```bash
157
+ recall semantic on
158
+ recall semantic backfill
85
159
  ```
86
160
 
87
- ## Usage
161
+ </td>
162
+ <td width="50%" valign="top">
88
163
 
89
- ### Terminal
164
+ ### MCP Server
165
+ Expose Recall to Claude Desktop, Claude Code, or any MCP client as native tools. Read-only by default, opt-in write tools with rate limiting and audit logging.
90
166
 
91
167
  ```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
168
+ recall mcp
169
+ recall mcp --allow-writes
170
+ ```
97
171
 
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
172
+ </td>
173
+ </tr>
174
+ <tr>
175
+ <td width="50%" valign="top">
102
176
 
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
177
+ ### Collections & Tags
178
+ Hand-curated hierarchical groupings of sessions that cut across projects. Human-readable aliases. Auto-tagging via your Anthropic API key or Claude CLI (zero extra cost).
108
179
 
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
180
+ </td>
181
+ <td width="50%" valign="top">
113
182
 
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
183
+ ### Web UI
184
+ Beautiful dark-mode three-pane layout. Virtualized transcript rendering (10,000-message sessions open instantly). `Cmd+K` command palette. Multi-select. Export to markdown, HTML, or PDF.
185
+
186
+ </td>
187
+ </tr>
188
+ </table>
189
+
190
+ <br />
191
+
192
+ <details>
193
+ <summary><strong>More: VS Code extension, cross-session diff, onboarding, keyboard shortcuts...</strong></summary>
194
+
195
+ <br />
196
+
197
+ - **VS Code / Cursor / Windsurf extension** -- auto-names sessions using terminal tab names via process-tree matching
198
+ - **Cross-session diff** -- split view of two transcripts with shareable `cmp=` URL
199
+ - **First-run onboarding** -- a 3-step tour that demos the moat in the first 60 seconds
200
+ - **Multi-select sessions** -- `Cmd+Click` to toggle, `Shift+Click` for range, right-click to copy IDs
201
+ - **Export** -- condensed markdown, full markdown, self-contained dark-mode HTML, print-ready PDF
202
+ - **Cmd+K command palette** -- jump to any session, action, or setting in one keystroke
203
+
204
+ #### Keyboard Shortcuts
205
+
206
+ | Key | Action |
207
+ |---|---|
208
+ | `/` | Focus search |
209
+ | `?` | Open Command Center |
210
+ | `Cmd+K` / `Ctrl+K` | Command palette |
211
+ | `Esc` | Close / clear / dismiss |
212
+ | `n` / `p` | Next / previous search match |
213
+ | `c` | New collection |
214
+ | `Cmd+Shift+A` | Add session to collection |
215
+ | `Cmd+Enter` | Save note |
216
+
217
+ </details>
218
+
219
+ <br />
220
+
221
+ ---
222
+
223
+ <br />
224
+
225
+ ## Quick Start
118
226
 
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
227
+ ### Install
228
+
229
+ ```bash
230
+ npm install -g @clauderecallhq/cli
231
+ ```
232
+
233
+ ### Start
234
+
235
+ ```bash
236
+ # Start the background daemon (file watcher + local HTTP server)
237
+ recall start
238
+
239
+ # Open the web UI
240
+ recall open
210
241
  ```
211
242
 
212
- ### MCP server (v0.9, bidirectional v0.13)
243
+ 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.
213
244
 
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.
245
+ ### Explore
215
246
 
216
247
  ```bash
217
- # Runs over stdio, never touches the network
218
- claude-recall-mcp
248
+ recall projects # list projects with session counts
249
+ recall list # 30 most-recent sessions
250
+ recall list -p Tools # filter by project
251
+ recall show <id> # pretty-printed transcript
252
+ recall search "auth bug" # full-text search
253
+ ```
219
254
 
220
- # Or via the CLI shim
221
- recall mcp
255
+ ### The Moat
222
256
 
223
- # Opt in to write tools (tag, alias, note, collection) — off by default
224
- recall mcp --allow-writes
257
+ ```bash
258
+ # Pipe a past session into a new Claude Code conversation
259
+ recall context abc12345 | claude
260
+
261
+ # With a custom instruction
262
+ recall context abc12345 --prelude "continue where we left off" | claude
263
+
264
+ # Just the last 2 hours
265
+ recall context abc12345 --since 2h | claude
225
266
  ```
226
267
 
227
- Minimal Claude Code / Claude Desktop config:
268
+ ### MCP Server
269
+
270
+ Point any MCP client at Recall and the model calls it as native tools:
228
271
 
229
272
  ```json
230
273
  {
@@ -236,310 +279,322 @@ Minimal Claude Code / Claude Desktop config:
236
279
  }
237
280
  ```
238
281
 
239
- 13 read-only tools (always available):
282
+ <details>
283
+ <summary><strong>Available MCP tools (31 total)</strong></summary>
284
+
285
+ <br />
286
+
287
+ **Read tools (13 -- always available):**
240
288
 
241
289
  | Tool | Purpose |
242
290
  |---|---|
243
291
  | `list_projects` | Every indexed project with session/message counts |
244
- | `list_sessions` | Recent sessions, filterable by project / tag / date range |
292
+ | `list_sessions` | Recent sessions; filters: project, tag, date range |
245
293
  | `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) |
294
+ | `list_sessions_to_tag` | Surface untagged sessions for review |
295
+ | `apply_tags` | Add tags to a session (merge-mode) |
296
+ | `search` | Full-text search with `#tag` support; BM25 + optional vector fusion |
297
+ | `find_similar_sessions` | Semantic similarity via vector embeddings (Pro) |
298
+ | `semantic_status` | Health snapshot: model, worker, queue depth (Pro) |
299
+ | `get_session` | Full transcript (accepts 8+ char id prefix) |
300
+ | `context_for_session` | Condensed markdown export, ready to inject |
301
+ | `thread_list` | All threads, newest first; can exclude archived |
254
302
  | `thread_get` | Full thread detail with every session edge |
255
- | `thread_for_session` | Threads containing a given session |
303
+ | `thread_for_session` | Non-archived threads referencing a session |
256
304
 
257
- 18 write tools (v0.13+, require `--allow-writes`):
305
+ **Write tools (18 -- opt-in via `--allow-writes`):**
258
306
 
259
307
  | Tool | Purpose |
260
308
  |---|---|
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 |
309
+ | `add_tag` / `remove_tag` | Tag management; removals logged in append-only log |
310
+ | `set_alias` | Human-friendly session name; previous alias archived |
311
+ | `append_note` | Add markdown to session note; separated by `---` |
312
+ | `create_collection` | New collection; optional parent, icon, color |
313
+ | `add_session_to_collection` | Idempotent collection membership |
314
+ | `remove_session_from_collection` | Remove session; logged in append-only log |
315
+ | `thread_create` | Create thread, optionally seed with origin session |
316
+ | `thread_add_session` | Attach session; role=origin or child |
317
+ | `thread_set_parent` | Change parent within thread; null clears parent |
318
+ | `thread_remove_session` | Detach session from thread |
270
319
  | `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 |
320
+ | `thread_close` / `thread_reopen` | Mark thread as closed or reopen |
321
+ | `thread_archive` | Soft-delete thread; hidden by default |
322
+ | `thread_merge` | Move all edges from source to dest, delete source |
323
+ | `thread_split` | Peel sessions into new thread |
324
+ | `generate_thread_titles` | Generate coherent titles for sessions in thread DAG |
276
325
 
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.
326
+ All writes are rate-limited (default 60/min), zod-validated, and audited to `~/.recall/audit/`.
278
327
 
279
- ### Web UI
280
-
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.
282
-
283
- Keyboard shortcuts:
284
-
285
- | Key | Action |
286
- |---|---|
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 |
297
-
298
- ## Features
328
+ </details>
299
329
 
300
- Everything the CLI and UI surface — demoted to reference material because the three pains above are the actual reason you'd install this.
301
-
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
319
-
320
- ## Architecture
321
-
322
- ### Two surfaces — don't confuse them
323
-
324
- Claude Recall spans two independent frontends that share the `clauderecall.com` brand:
325
-
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) |
330
+ <br />
330
331
 
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.
332
+ ---
332
333
 
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.
334
+ <br />
334
335
 
335
- ### Local product internals
336
+ ## How It Works
336
337
 
337
338
  ```
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/)
339
+ ~/.claude/projects/**/*.jsonl <-- Claude Code's session files (read-only)
340
+ |
341
+ v chokidar file watcher
342
+ ~/.recall/db.sqlite <-- indexed database (FTS5 full-text search)
343
+ |
344
+ +-----+-----+
345
+ | |
346
+ CLI HTTP server (Hono, 127.0.0.1 only)
347
+ | |
348
+ recall ... Web UI (React + Tailwind SPA)
351
349
  ```
352
350
 
353
- ### Data layout (all under `~/.recall/`)
351
+ ### Data stays local
354
352
 
355
353
  | Path | What |
356
354
  |---|---|
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.
355
+ | `~/.recall/db.sqlite` | Indexed database (projects, sessions, messages, FTS5, aliases, notes, tags, collections, semantic summaries, commit links, usage rollups, audit logs) |
356
+ | `~/.recall/aliases.json` | Plain-text mirror of every alias with full edit history |
357
+ | `~/.recall/notes/<session>.md` | One markdown file per session note |
358
+ | `~/.recall/tags.json` | Current tag state + append-only event log |
359
+ | `~/.recall/collections.json` | Current tree state + append-only event log |
408
360
 
409
- ## Roadmap
361
+ <br />
410
362
 
411
- See [ROADMAP.md](./ROADMAP.md) for the full plan. Shipped so far:
363
+ ---
412
364
 
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
365
+ <br />
425
366
 
426
- ## Production deployment & CI/CD
367
+ ## Privacy & Security
427
368
 
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.
369
+ Claude Recall is **local-first by design**, not as an afterthought.
429
370
 
430
- ### Pipeline
371
+ - The daemon binds to **`127.0.0.1` only**. Never `0.0.0.0`, never a public interface.
372
+ - **No telemetry.** No analytics. No outbound network calls. The only exception is a one-time license check when you activate a Pro key.
373
+ - **No cloud. No account.** Your data lives at `~/.recall/` and nowhere else.
374
+ - **Source sessions are never modified.** Claude Code's JSONL files at `~/.claude/projects/` are strictly read-only to Recall.
375
+ - **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.
431
376
 
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
- ```
377
+ <br />
448
378
 
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.
379
+ ---
380
+
381
+ <br />
382
+
383
+ ## Full CLI Reference
450
384
 
451
- ### Manual triggers
385
+ <details>
386
+ <summary><strong>Click to expand</strong></summary>
387
+
388
+ <br />
452
389
 
453
390
  ```bash
454
- # Re-run the full test suite against main (e.g. after rotating a secret).
455
- gh workflow run site-ci --ref main
391
+ # Lifecycle
392
+ recall start # start daemon (watcher + local HTTP)
393
+ recall stop # stop daemon
394
+ recall open # open web UI (starts daemon if needed)
395
+ recall status # db + daemon health
396
+
397
+ # Indexing
398
+ recall index # scan for new/changed session files
399
+ recall index --force # reindex everything
400
+
401
+ # Explore
402
+ recall projects # list projects with session counts
403
+ recall list # 30 most-recent sessions
404
+ recall list -p Tools # filter by project substring
405
+ recall list -n 100 # higher limit
406
+
407
+ # Read
408
+ recall show <id> # pretty transcript, auto-paged
409
+ recall show <id> --raw # raw JSONL
410
+ recall show <id> --no-pager
456
411
 
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
412
+ # Search
413
+ recall search "zod schema"
414
+ recall search "auth" -p Pest-Control
415
+ recall search bug -n 50
416
+
417
+ # Context re-injection
418
+ recall context <id> # condensed markdown
419
+ recall context <id> | pbcopy # to clipboard (macOS)
420
+ recall context <id> | claude # into new Claude session
421
+ recall context <id> --full # full transcript
422
+ recall context <id> --since 2h # last 2 hours only
423
+ recall context <id> --prelude "continue this" # prepend instruction
424
+ recall context <id> --subagents # include subagent messages
425
+
426
+ # Stats
427
+ recall stats <id> # tokens + dollars for one session
428
+ recall stats --project Tools # per-project rollup
429
+ recall stats --days 7 # 7-day overview
430
+ recall stats --backfill # one-shot usage backfill
431
+
432
+ # Git correlation
433
+ recall correlate # link sessions to commits
434
+ recall blame <sha> # commit -> session reverse lookup
435
+
436
+ # Semantic search
437
+ recall semantic on # enable conceptual search
438
+ recall semantic status # backfill progress
439
+ recall semantic backfill # run now
440
+
441
+ # MCP server
442
+ recall mcp # stdio, read-only
443
+ recall mcp --allow-writes # opt-in write tools
460
444
  ```
461
445
 
462
- You can also trigger both from the Actions tab in the GitHub UI ("Run workflow" button).
446
+ </details>
447
+
448
+ <br />
463
449
 
464
- ### Droplet topology
450
+ ---
465
451
 
466
- The droplet is multi-tenant, with each app fully isolated:
452
+ <br />
467
453
 
468
- | Concern | Boundary |
454
+ ## Tech Stack
455
+
456
+ | Layer | Technology |
469
457
  |---|---|
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`. |
458
+ | CLI + daemon | TypeScript 5 (strict), Node 22+, ESM |
459
+ | HTTP server | Hono + @hono/node-server |
460
+ | Database | better-sqlite3 with FTS5 full-text search |
461
+ | File watcher | chokidar |
462
+ | CLI parsing | commander |
463
+ | MCP server | @modelcontextprotocol/sdk (stdio) |
464
+ | Validation | zod |
465
+ | Web UI | Vite 8 + React 19 + Tailwind CSS |
466
+ | Data fetching | @tanstack/react-query |
467
+ | Virtualization | @tanstack/react-virtual |
468
+ | Markdown | marked + highlight.js + DOMPurify |
469
+
470
+ <br />
478
471
 
479
- ### Local deploy (escape hatch)
472
+ ---
480
473
 
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:
474
+ <br />
475
+
476
+ ## Distribution
477
+
478
+ Claude Recall ships on every surface a developer already works in.
479
+
480
+ | Surface | Identity | Version | Install |
481
+ |---|---|---|---|
482
+ | **npm** (CLI + MCP) | [`@clauderecallhq/cli`](https://www.npmjs.com/package/@clauderecallhq/cli) | v0.12.0 | `npm i -g @clauderecallhq/cli` |
483
+ | **VS Code Marketplace** | [`clauderecallhq.clauderecall-vscode`](https://marketplace.visualstudio.com/items?itemName=clauderecallhq.clauderecall-vscode) | v0.8.3 | Search "Claude Recall" in Extensions |
484
+ | **MCP Registry** | [`io.github.clauderecallhq/recall`](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.clauderecallhq%2Frecall/versions/0.12.0) | v0.12.0 | Auto-discovered by MCP clients |
485
+ | **Plugin Hub** | `claude-recall` | -- | `/plugin install claude-recall` in Claude Code |
486
+ | **Website** | [clauderecall.com](https://clauderecall.com) | v0.4.0 | -- |
487
+
488
+ ### How the pieces connect
489
+
490
+ ```
491
+ npm package (@clauderecallhq/cli)
492
+ |
493
+ +-- CLI binary: `recall`
494
+ +-- MCP server: `recall mcp` (stdio transport)
495
+ |
496
+ +-- MCP Registry points here via npx
497
+ +-- Plugin Hub points here via npx
498
+ |
499
+ VS Code extension (independent)
500
+ +-- Talks to daemon over HTTP (127.0.0.1)
501
+ +-- Does NOT run MCP tools
502
+ |
503
+ Website (clauderecall.com)
504
+ +-- Auto-deploys on push via GitHub Actions
505
+ +-- Marketing, docs, /metrics dashboard
506
+ ```
507
+
508
+ ### Tracking installs
482
509
 
483
510
  ```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/
511
+ recall installs # npm downloads + VS Code installs in one view
512
+ recall installs --json # machine-readable output
488
513
  ```
489
514
 
490
- Pre-reqs: the `clauderecall-prod` SSH alias in `~/.ssh/config` and the matching ed25519 key in `~/.ssh/clauderecall_deploy`.
515
+ Live dashboard: [clauderecall.com/metrics](https://clauderecall.com/metrics)
491
516
 
492
- ### Swapping a single env var on the droplet
517
+ ### Publishing checklist (for maintainers)
493
518
 
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
519
+ 1. **npm**: `npm publish --access public` (2FA required, bin entries show warning but work via `npx -p @clauderecallhq/cli recall`)
520
+ 2. **VS Code**: Build .vsix in `extensions/vscode/`, upload at [marketplace.visualstudio.com/manage](https://marketplace.visualstudio.com/manage/publishers/clauderecallhq)
521
+ 3. **MCP Registry**: `cd plugin && mcp-publisher publish` (requires GitHub OAuth, org membership must be Public)
522
+ 4. **Plugin Hub**: Web form at `claude.ai/settings/plugins/submit`
523
+ 5. **Website**: Push to `main` -- auto-deploys
497
524
 
498
- # Or interactive (hidden prompt).
499
- bash site/scripts/admin/swap-env-var.sh STRIPE_SECRET_KEY
500
- ```
525
+ ### Known issue: npx scoped bin resolution
501
526
 
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.
527
+ `npx -y @clauderecallhq/cli mcp` fails because npx looks for a bin named `cli` (the unscoped package name). Workaround: `npx -p @clauderecallhq/cli recall mcp`. The MCP config in docs uses the workaround syntax.
503
528
 
504
- ## Contributing / local development
529
+ <br />
505
530
 
506
- ```bash
507
- # Develop CLI
508
- npm run dev # tsx runs src/cli.ts
531
+ ---
509
532
 
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
533
+ <br />
513
534
 
514
- # Typecheck
515
- npm run typecheck
535
+ ## Pricing
516
536
 
517
- # Full build
518
- npm run build # tsc + vite
519
- ```
537
+ | | Free | Pro |
538
+ |---|---|---|
539
+ | **Search** | Unlimited | Unlimited |
540
+ | **Context re-injection** | Unlimited | Unlimited |
541
+ | **Sessions indexed** | Unlimited | Unlimited |
542
+ | **Cost analytics** | Unlimited | Unlimited |
543
+ | **Git correlation** | Unlimited | Unlimited |
544
+ | **MCP server** | Read-only | Read + Write |
545
+ | **Semantic search** | -- | Included |
546
+ | **Auto-tagging** | -- | Included |
547
+ | **Price** | $0 | **$29.69 one-time** |
520
548
 
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`
549
+ No subscriptions. No recurring fees. Pay once, own it forever.
536
550
 
537
- ## Brand, registries, and identities
551
+ <br />
538
552
 
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.
553
+ ---
540
554
 
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.
555
+ <br />
542
556
 
543
- ## License
557
+ ## Roadmap
544
558
 
545
- UNLICENSED, private until v0.6 launch.
559
+ - [x] CLI, daemon, web UI, full-text search
560
+ - [x] Context re-injection (the moat)
561
+ - [x] Aliases, notes, tags, pins
562
+ - [x] Cross-session diff
563
+ - [x] VS Code / Cursor / Windsurf extension
564
+ - [x] MCP server (read-only)
565
+ - [x] Collections (hierarchical, cross-project)
566
+ - [x] Auto-tagging
567
+ - [x] Cost / token analytics
568
+ - [x] Git correlation
569
+ - [x] Semantic search
570
+ - [x] Cmd+K command palette
571
+ - [x] Bidirectional MCP write tools
572
+ - [x] First-run onboarding
573
+ - [ ] Public launch at clauderecall.com
574
+ - [ ] Team features
575
+
576
+ <br />
577
+
578
+ ---
579
+
580
+ <br />
581
+
582
+ <div align="center">
583
+
584
+ <picture>
585
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/mark-scrollback-dark.svg">
586
+ <img src="https://raw.githubusercontent.com/clauderecallhq/.github/main/profile/assets/mark-scrollback-dark.svg" alt="Claude Recall" width="48">
587
+ </picture>
588
+
589
+ <br />
590
+ <br />
591
+
592
+ **Claude Recall** -- the memory layer for the agent you're steering.
593
+
594
+ [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)
595
+
596
+ <br />
597
+
598
+ <sub>Built by <a href="https://github.com/clauderecallhq">@clauderecallhq</a></sub>
599
+
600
+ </div>