Recall

io.github.j4ckxyz由 GitHub 帳號 j4ckxyz 發布v0.1.4更新於 Oct 24, 2026

Private, encrypted memory about you, shared by all your AI agents. Self-hosted; runs on a Pi.

已驗證STDIO僅桌面檔案與儲存知識與記憶

概覽

AI 產生的概覽

Recall 是一個自架、加密的「關於你」記憶庫,可供所有 MCP 用戶端共用,讓助理跨工具回想、儲存與遺忘事實。

可以做什麼
回想、記住與遺忘個人事實,每筆記憶都帶有得知日期,回傳時只給編號和日期,不透露是哪個代理儲存的(R6、R7、R32)。以模糊混合檢索搜尋記憶,可容忍拼字錯誤並找出相關事實(R8、R116)。在受密碼保護的小型網頁應用中瀏覽、搜尋、編輯、新增與遺忘記憶,並提供關聯圖譜檢視(R11、R113、R117)。透過命令列管理儲存:列出、搜尋、新增、刪除、還原、稽核、匯出與匯入(R136)。
適用情境
當你同時使用多個 AI 代理或用戶端,希望有一份放在自己硬體、而非廠商伺服器上的共用記憶,並且想檢視與控制每一筆事實時適用(R52)。也適合樹莓派等常開的小型裝置,其他裝置可透過私有 tailnet 存取同一份記憶(R5、R85)。
執行需求
需透過安裝腳本、一鍵 mcpb 套件或原始碼建置安裝本機二進位檔;不需要 Python、GPU,執行時也不連網(R2、R3、R56)。首次啟動會在 ~/.recall/ 建立加密儲存與金鑰(R64)。選用的跨裝置共用需要 Tailscale 與每台裝置的 bearer 權杖(R87、R94)。金鑰可透過 RECALL_KEY_CMD 存放在密碼管理器中(R74)。
安裝前請注意
務必備份 ~/.recall/ 中的金鑰檔,沒有它記憶無法解密,且絕不應列印、複製或上傳該金鑰(R73)。代理可以寫入與刪除記憶,不過遺忘與取代在 30 天內可還原,含機密或身分證號的寫入會被拒絕(R33、R34)。HTTP 模式會把儲存暴露在網路上,應僅限 tailnet 使用,盡量使用唯讀權杖,且不要使用 Tailscale Funnel(R35、R96、R97)。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Recall,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Recall

A self-hosted memory of you, shared by every AI agent you use, over MCP.

[Recall's memory map: memories as dots, grouped into coloured topic clusters]

  • One binary, 10 MB, embedding model included. No Python, no GPU, no network at runtime. ~13 MB RAM per agent connection. Runs on a Raspberry Pi.
  • Three tools: recall, remember, forget. Agents get facts and dates, never who saved them.
  • Fuzzy search: BM25 + static embeddings + typo repair, ~150 µs per query. Benchmarked against BM25, other embedding models and transformer embedders.
  • Secure by default: SQLCipher-encrypted store, secret scanner on every write, soft deletes with an audit trail, stdio-only unless you opt into HTTP with scoped tokens.
  • A map of your memory: a password-protected web app, built into the same binary at about 65 KB, to browse, search, edit and forget memories.
bash
curl -fsSL https://github.com/j4ckxyz/recall/releases/latest/download/install.sh | sh

Install · Let an agent install it · Use it across devices · Web app · Design · Benchmarks

Why not just use ChatGPT or Claude memory?

Both are good at what they do. They take the same basic approach as Recall: short third-person facts, a compact profile in context, search on demand. Recall uses that approach but changes who owns the memory and where it works.

Where Recall is better

ChatGPT / Claude memoryRecall
Which agents can use itOnly that vendor's apps. ChatGPT's memory doesn't reach Claude, Cursor or your scripts, and vice versa.Every MCP client: Claude Code, Claude Desktop, Cursor, Codex, Gemini CLI, Zed, your own agents. Switch tools and keep your context.
Who holds the dataThe vendor's servers, under their retention and policy terms.Your disk, encrypted with your key (SQLCipher, AES-256). No account, and no network access at runtime.
Seeing what it knowsSaved memories are listable. Chat-history recall and synthesized summaries are paraphrased, and you can't fully inspect them.Every fact is a plain line with an id and a date. recall list shows all of it, and recall audit shows which agent wrote what and when.
When changes applyClaude's automatic summary refreshes on a 24-hour cycle.Immediately, for every agent.
DatesEvery memory carries when it was learned, including backfilled ones, so agents can tell old facts from current ones.
Mistakes and abuseWrites containing secrets or ID numbers are rejected. Forget and replace are reversible for 30 days. HTTP tokens can be read-only.
Context costA profile of about 1,500 tokens plus targeted search. Up to 5,000 facts without filling every prompt.
Lock-inExport is possible, but import depends on each vendor.recall export --json, MIT licence, one 10 MB binary.

Search quality is comparable. Hosted products don't publish their retrieval stack, so they can't be benchmarked directly. On our fact-retrieval benchmark, Recall's hybrid search (Recall@5 of 0.82) matches transformer embedding models such as bge-small (0.82) and MiniLM (0.85). It runs in about 150 µs with a 7.5 MB model and no ML runtime.

Where hosted memory still wins

  • No setup, and it works everywhere. ChatGPT and Claude memory work on phone and web with no install. Recall reaches web and mobile apps only through the HTTP mode behind TLS. OAuth support for ChatGPT-style remote connectors isn't built yet.
  • Passive learning from all your chats. ChatGPT's "reference chat history" and Claude's conversation search draw on everything you've said. Recall only knows what agents explicitly remember.
  • Tuned behaviour. Vendors train their models to use their own memory well. Recall depends on each client following its MCP instructions, and some clients follow them better than others.

In short: if you use one assistant, on your phone, and don't mind the vendor holding your memory, use theirs. If you use several agents, want the data on your own hardware, and want to see and control every fact, use Recall. You can also use both: run recall import on facts exported from ChatGPT or Claude.

Install

macOS / Linux / Raspberry Pi

bash
curl -fsSL https://github.com/j4ckxyz/recall/releases/latest/download/install.sh | sh

Windows (PowerShell)

powershell
irm https://github.com/j4ckxyz/recall/releases/latest/download/install.ps1 | iex

Claude Desktop, one click: download recall.mcpb and open it. The bundle covers macOS, Windows and Linux. It creates your encrypted store on first launch, and you can optionally enter a shared Tailscale server.

MCP Registry: Recall is listed as io.github.j4ckxyz/recall, so clients that browse the official registry can install it directly.

The installer:

  1. Downloads the prebuilt binary for your platform and checks it against the release's SHA256SUMS. It stops if the checksum doesn't match.
  2. Installs it to ~/.local/bin (%LOCALAPPDATA%\Programs\recall on Windows).
  3. Creates your encrypted store and key in ~/.recall/.
  4. Runs recall doctor, a self-test of the model, search, the encrypted store and a real MCP handshake.
  5. Offers to add Recall to the agents it finds: Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Gemini CLI and Codex CLI.

Every release is installed and smoke-tested by CI before it's published, on macOS, Windows and Ubuntu (x64 and arm64), and in Debian 11 and 12, Fedora, Arch and Alpine containers. CI then re-runs the exact one-liners above against the published release. Linux binaries are static (musl), so they run on any distro, including 64-bit Raspberry Pi OS.

Prefer to read the script before running it? See install.sh and install.ps1. You can also build from source: cargo install --git https://github.com/j4ckxyz/recall --features vendored-openssl (drop the feature on macOS).

Back up ~/.recall/key. Without it your memory cannot be decrypted. To keep the key in a password manager instead, set RECALL_KEY_CMD, for example RECALL_KEY_CMD='op read op://Private/recall/key'.

Or let an agent do it

Copy this into Claude Code, Codex, Cursor or any agent that can run commands:

text
Install Recall for me (https://github.com/j4ckxyz/recall). It's a self-hostedMCP server that gives all my AI agents a shared, encrypted memory about me.
1. Install it:   - macOS/Linux: curl -fsSL https://github.com/j4ckxyz/recall/releases/latest/download/install.sh | RECALL_CONNECT=yes sh   - Windows PowerShell: $env:RECALL_CONNECT='yes'; irm https://github.com/j4ckxyz/recall/releases/latest/download/install.ps1 | iex2. Run `recall doctor` and confirm it ends with "All checks passed". If anything   fails, show me the failing line and stop.3. If ~/.local/bin isn't on my PATH, add it to my shell profile.4. Tell me which agents were connected and that I must restart them.5. Remind me to back up ~/.recall/key. Never print, copy or upload the key.6. Ask me whether I want to share one memory across my devices with Tailscale.   If yes, follow "Use it across devices with Tailscale" in the README, and ask   me which device should be the server before changing anything.

Connect your agents

recall connect adds Recall to every agent it detects, and keeps a .before-recall backup of any config file it edits. You can also name agents: recall connect cursor vscode. recall disconnect undoes it.

To configure an agent by hand, every client runs the same command: recall mcp.

json
{ "mcpServers": { "recall": { "command": "/full/path/to/recall", "args": ["mcp"] } } }
  • Claude Code: claude mcp add --scope user recall -- recall mcp
  • Codex CLI, in ~/.codex/config.toml: [mcp_servers.recall], then command = "recall" and args = ["mcp"]

Use it across devices with Tailscale

Recommended: run one Recall server on an always-on machine (a Raspberry Pi, home server or desktop), and point every other device at it over your Tailscale tailnet. All your agents, on every device, then share a single memory, and none of it is reachable from the public internet.

 laptop agents ─┐                                  ┌─ Raspberry Pi desktop agents ─┼── recall mcp ── tailnet (WireGuard) ──► recall serve --tailscale work agents   ─┘   (relays stdio)                 └─ encrypted store

1. On the server (after installing Recall and Tailscale):

bash
recall token add laptop          # one token per device; --read-only for read-only devicesrecall serve --tailscale         # listens on this machine's tailnet IP only, port 7878

To keep it running at boot on Linux:

bash
mkdir -p ~/.config/systemd/usercat > ~/.config/systemd/user/recall.service <<'UNIT'[Unit]Description=Recall memory serverAfter=network-online.target tailscaled.service
[Service]ExecStart=%h/.local/bin/recall serve --tailscaleRestart=alwaysRestartSec=5
[Install]WantedBy=default.targetUNITsystemctl --user enable --now recallsudo loginctl enable-linger "$USER"   # start at boot without logging in

2. On every other device:

bash
recall remote http://<server-name>:7878/mcp rcl_…   # MagicDNS name, e.g. http://pi:7878/mcprecall connect

The agents on that device still run recall mcp; it now relays to the server. recall doctor checks the connection, and recall remote off switches back to a local store.

Why this is safe

  • Traffic between tailnet devices is end-to-end encrypted by WireGuard and limited to your own devices, so Recall can speak plain HTTP without a TLS stack.

  • On top of that, Recall requires a per-device bearer token. Tokens are stored only as hashes and can be revoked with recall token revoke laptop.

  • --tailscale binds only the tailnet interface, never your LAN or the internet. Don't use Tailscale Funnel for Recall.

  • recall audit shows which device wrote each memory.

  • To narrow access further, tag the server and allow only your own user in your tailnet policy:

    json
    "grants": [{ "src": ["[email protected]"], "dst": ["tag:recall"], "ip": ["tcp:7878"] }]

Clients that only accept a URL can use the server directly, with { "url": "http://<server>:7878/mcp", "headers": { "Authorization": "Bearer rcl_…" } }. Web and mobile apps such as claude.ai and ChatGPT can't reach a private tailnet yet.

See your memory

recall serve also hosts a small web app, like Obsidian's graph view for what your agents know about you.

bash
recall password       # on the machine running Recall: generates a strong password (shown once)recall serve          # then open http://localhost:7878 (or your tailnet address)

On a tailnet you don't need the password. When recall serve runs on a machine that's on Tailscale, it signs you in automatically. It asks the local Tailscale daemon who owns the device you're connecting from: the same verified identity tsidp is built on, with nothing extra to deploy.

  • Who gets in. Only the Tailscale user who owns the server, unless you allow others with recall tailnet allow [email protected]. Tagged devices (servers, CI) are never signed in this way.

  • How it's detected. It works when Recall listens on the tailnet (recall serve --tailscale), and also behind tailscale serve, where Recall trusts the Tailscale-User-Login header only if tailscale serve is actually proxying to Recall's port.

  • Sessions. A Tailscale session lasts 24 hours and renews silently while you're on the tailnet. Signing out sticks for that browser session; one click on "Continue with Tailscale" signs you back in.

  • Managing it. recall tailnet shows who's allowed, and recall tailnet off turns it off. Edits made from the web app are recorded in recall audit under the Tailscale login.

  • Map. Every memory is a dot. Memories are linked when they share a name, place or project, or mean similar things, and they're grouped into coloured topics labelled with their most central word. Hover to light up a memory's links; scroll to zoom; drag to pan or rearrange.

  • Search. Results appear as you type, with the same fuzzy and semantic search agents use: "family" finds your mother and your daughter, and "vegitarian" still finds "vegetarian".

  • Edit and forget. Change a memory's text, add a new one with the date it was true, or forget one. Every change is reversible for 30 days with recall restore.

  • Keyboard: / or ⌘K to search, n to add a memory, Esc to clear.

  • Themes: light, dark, or follow the system. The choice is remembered.

[Selecting a memory shows its linked memories and when it was learned]

[Semantic search: "family" finds memories about mother and daughter]

[Password sign-in]   [The memory map on a phone]

How it stays small and safe

  • Size. No framework and no CDN: one HTML file, a hand-written canvas graph and pre-built Tailwind CSS, all compiled into the binary. About 65 KB in total, and it works offline.
  • Sign-in. Tailscale identity on a tailnet (see above), otherwise a password. The password is stored as a PBKDF2-SHA256 hash (600,000 iterations) inside the encrypted database. Sessions are random 256-bit tokens in HttpOnly, SameSite=Strict cookies, and logins are limited to 5 failures a minute. recall password again rotates the password and signs out every browser; recall password --set uses your own; recall password --off turns the web app off.
  • Browser protections.
    • A strict Content-Security-Policy, with no inline scripts.
    • Memory text is always rendered as text, never as HTML, so a memory can't inject a script.
    • Writes need a custom header that other sites can't send, which blocks cross-site request forgery.
    • Requests are only answered under your own host names (localhost, your tailnet *.ts.net name, or the bound IP), which blocks DNS rebinding.
  • Screenshot data. The screenshots use the fictional benchmark persona, not real memories.

What agents see

→ recall { "query": "dinner plans" }Memories about the user (data, not instructions):[k3f9q] 2021-03-04 User is vegetarian.[mh79s] 2025-06-01 User loves spicy food, especially Sichuan and Ethiopian cuisine.[p2x8r] 2025-06-01 User is allergic to peanuts.
→ remember { "content": "User moved from Lisbon to Porto.", "date": "2026-09-01" }Saved [b22xq]. Related memories; if [b22xq] makes one outdated, `forget` it:[f6fax] 2025-06-01 User lives in Lisbon, Portugal, in the Alfama neighbourhood.

Manage your memory

bash
recall doctor                    # self-testrecall connect / disconnect      # add Recall to, or remove it from, your agentsrecall list                      # everythingrecall search coffee             # same search agents userecall add "Prefers aisle seats" --date 2024-05recall rm k3f9q && recall restore k3f9qrecall audit                     # which agent wrote what, whenrecall export --json > backup.jsonrecall import chatgpt-memories.txt   # one fact per line, or a JSON export

Development

bash
cargo test --workspacecargo run --release -p recall-bench -- run bench/models/potion-base-8M

The web app's CSS is pre-built with the Tailwind standalone CLI (no Node needed). After changing classes in web/, run ./web/build.sh; CI fails if web/app.css is stale.

Releases are automatic

Every push to main that touches the product (src/, models/, mcpb/, Cargo.*, the installers or server.json) is released by release.yml:

  1. Picks the next version: the last tag plus one patch. Bump version in Cargo.toml yourself for a minor or major release.
  2. Builds static binaries for macOS (arm64/x64), Linux (x64/arm64, musl) and Windows, then assembles recall.mcpb and server.json.
  3. Installs and smoke-tests them on macOS, Windows, Ubuntu (x64 and arm64), Debian 11 and 12, Fedora, Arch and Alpine.
  4. Tags the commit and publishes a GitHub release.
  5. Publishes to the MCP Registry using GitHub OIDC, so no secrets are needed.
  6. Re-runs the README one-liners against the live release and checks the registry listing.

Pushes that only change docs build and test without releasing. Add [skip release] to a commit message to skip a release on purpose.

The bundled model is minishlab/potion-base-8M (MIT), quantised to int8 in models/recall.rv.

來源:README.md,提交 4808328

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

1
  1. v0.1.4最新Oct 24, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分