
chat-recall
io.github.munhq由 GitHub 帳號 munhq 發布v0.7.31更新於 Nov 3, 2026
One searchable history across every AI coding tool, with secret scanning and a shared task board.
概覽
把各種 AI 程式開發工具的對話紀錄彙整成可搜尋的記憶庫,並提供金鑰掃描、程式碼改善建議與共用任務板,共 68 個 MCP 工具。
- 可以做什麼
- 跨 Claude Code、Codex、OpenCode、Cursor 等工具搜尋、重播與比對歷史工作階段,包含子代理紀錄、計畫與任務
- 讀寫共用記憶:決策紀錄、知識圖譜三元組、鍵值狀態與代理日誌
- 列出排序後的程式碼改善建議與 CLAUDE.md/技能建議,並可據此建立團隊任務
- 標記過去工作階段中貼上的憑證,並追蹤到輪替或忽略為止
- 啟動其他代理工作階段並傳送訊息,以及刪除工作階段或將其排除於同步之外
- 適用情境
- 適合同時使用多個 AI 程式開發代理、希望它們共用同一份歷史,讓代理在重做之前先確認過去做過什麼、決定過什麼。也適合需要外洩金鑰告警,以及由代理發現驅動的任務板的團隊。
- 執行需求
- npm 套件需要 Node.js 22 以上版本,透過 npx 執行 chat-recall-mcp。需要託管服務 chatrecall.dev(OAuth 登入,7 天試用後為付費訂閱),或自行架設伺服器(Docker Compose 加 Postgres)。受支援的 AI 工具必須已在標準路徑寫入工作階段紀錄。安裝、索引與搜尋不需要 API 金鑰;AI 摘要是選用功能,需要 Ollama、已登入的 CLI、OpenAI 相容端點或 ANTHROPIC_API_KEY。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 chat-recall,將其新增到工作區。
- 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
- 為需要使用其工具的對話啟用該服務。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
交給代理程式安裝
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/io.github.munhq%2Fchat-recall/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。其他 MCP 客戶端
把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。
{
"mcpServers": {
"chat-recall": {
"type": "http",
"url": "https://chatrecall.dev/mcp"
}
}
}README
[npm] [npm downloads] [MCP registry] [Smithery] [Glama]
[Install in Cursor] [Install in VS Code]
chatrecall.dev · How it works · MCP tools · Pricing · Self-host · Security
Turn what your AI coding tools already write into shared team knowledge, leaked-secret alerts, ranked code findings and tracked tasks.
Your agents wrote it all down. Nobody read it.
Every coding agent you run keeps a full transcript of its work: the decisions, the
reasoning, the keys somebody pasted, the problems it found and never filed. Each one
writes to its own directory in its own format, none can read another's, and nothing
reads any of them. chat-recall does, through 68 MCP tools.
Underneath all four is one index of every session your tools already wrote, and 28 more tools to search, replay and diff it. That index is the mechanism. It is not the pitch, and it is not why anyone buys this.
The cross-tool part is what makes it work. A single tool's built-in history stops at its own boundary. This does not, and neither does your team.
See it work
Every screen below is real output against a real server, captured from the demo account. Nothing is mocked, replayed or re-timed.
One index, every tool. Search finds a session by what was discussed in it,
not by its filename, and memory status shows every source type in one place —
sessions beside the skills, MCPs, commands, subagents and hooks that produced
them.
Or just ask in plain English — no tool names, no session ids. The agent picks the call itself:
[Claude Code answering a question about a past session by calling chat-recall itself]
It also finds the credentials you pasted, and checks which ones still work. A dead key is hygiene. A live one is an incident, and only live ones raise an alert.
Install
That indexes the transcripts already on your disk, detects which AI tools you have, and registers the MCP server in each of their configs:
It only touches a config whose tool is on this machine, it never overwrites an entry you curated by hand, and chat-recall doctor prints one line per tool so a missing registration is visible. Inside Claude Code you can install the skills and the MCP server together instead:
Any other MCP client (Claude Desktop, Windsurf, Zed, Cline, or a tool init does
not know) takes the same server as a JSON entry. The bin is chat-recall-mcp,
which is why the package name alone is not enough — npx -y chat-recall starts
the CLI, not the server:
The same command as one line, for a claude mcp add-style client: npx -y -p chat-recall chat-recall-mcp.
Then:
By default this syncs to the hosted server at chatrecall.dev, which starts with a 7-day trial that needs no card and is a paid subscription after that — see pricing. To keep everything on your own machine instead, run the server yourself: that is free for one person, forever, with every feature and no licence key — the task board and Toolkit included — and a licence only buys collaboration: a second member, shared history, assigning work. See Self-host below. Either way the CLI is the same binary and the same commands; only the server URL differs.
No API keys are required. Search is Postgres full-text search. AI summaries are an optional upgrade, not a prerequisite.
What never leaves your machine
It indexes every AI session on this disk, so init shows you what would upload — count, tools, and the projects by name — and waits for a yes before the first sync. (--yes, or no TTY, prints the same summary and proceeds; --skip-sync holds the upload back entirely.) Secrets are masked client-side and project paths are sent as hashes; on top of that you choose what is in scope at all:
Some tools file transcripts under a hash rather than a project folder, so those sessions have no path for a path rule to match; exclude tool is the control that covers them, and init prints that count. A retention window deletes from the server on a timer. retention set prints how many sessions it would remove and makes you confirm the number. It is undoable only where the original transcript is still on a machine you have — widen the window and chat-recall sync --full re-ships what it admits. For a laptop you no longer own, history your AI tool rotated, or files you deleted, our copy is the only copy. Export first if you want one.
Exclusions live on the machine that holds the data, so the CLI owns them; they apply from the next sync, and rows already synced stay until deleted. The dashboard's Sync rules panel adds rules across every device — unioned with the local ones, so it can only ever add protection. Full model, limits included: Security.
Four things it actually does
- Cross-tool unified memory. One index, one search, one UI over Claude Code (
~/.claude/projects/), Codex (~/.codex/), OpenCode (~/.local/share/opencode/), Antigravity (~/.gemini/antigravity-cli/), Cursor (~/.cursor/for the CLI,~/.config/Cursor/for the IDE), Hermes Agent (~/.hermes/) and Pi (~/.pi/agent/). Sessions, plans, tasks, CLAUDE.md files, paste cache, shell history and agent diaries all share one pluggableMemorySourceinterface. - The agent recalls itself. 68 MCP tools, so Claude Code can
recall_smart_resume,recall_search(withlike_sessionto find similar work),recall_edits_timeline,recall_subagent_searchandrecall_redundant_filesrather than asking you what happened last time. It writes back too, viarecall_decision_record,recall_kg_addandrecall_set. - Warns before you redo work. A
UserPromptSubmithook searches for similar past sessions on every prompt and injects a short "you have done this before, in session X" note into the agent's context. - Temporal knowledge graph. Decisions and tool mentions become entity-relationship triples with
valid_from/valid_towindows, so you can ask what was decided in March and whether it still holds.
Add your own AI tool
A new backend is one file and one line — no changes to the engine. If a tool you use writes transcripts to disk, it can be indexed here, and a pull request is the fastest way to make that happen.
Optional: web dashboard
The React dashboard is part of the server (SaaS or self-host docker compose) — the CLI itself has no UI. For dashboard development:
Self-host the server (docker compose)
Everything on your own machine, no account, nothing sent anywhere:
Then mint a device token and connect a machine — the full sequence, with troubleshooting, is in docs/SELF_HOSTING.md.
Two containers: the server plus a bundled pgvector/pgvector Postgres, so a
plain docker compose up is self-contained. Bring-your-own-Postgres is
supported too (it is how the hosted service runs): set DATABASE_URL to an
external Postgres 16+.
Keep the index live (+ optional server sync)
You do not need a daemon. Claude Code spawns the MCP server, and that process syncs every 3 minutes on its own — the binary is the daemon. For a headless box with no assistant running, opt in to a background service:
init does not install it, on purpose. Both paths push through the same
syncIncremental() under the same cross-platform index lock, so one writer
touches the ledger at a time — see docs/SYNC.md before changing
any of it. Secrets are masked client-side before anything leaves the machine.
chat-recall sync does the same push once, on demand.
Hook it up to Claude Code
chat-recall init does this for you. Manual equivalent in ~/.mcp.json:
chat-recall-mcp is a relay, not the server. It finds the background daemon for
your tool profile, starts one if there is none, and passes bytes to it. Every
session on a machine therefore shares one loaded engine instead of carrying its
own: a session costs about 50 MB rather than 87 MB, against a single shared
daemon, and background sync runs in one process instead of racing a lock in all
of them. The daemon exits 15 minutes after the last session closes.
Two knobs, both optional:
If the daemon cannot be reached for any reason, the session loads the server itself and works exactly as it did before — slower, never broken.
chat-recall init installs the Claude Code hooks in every profile's
settings.json. If you added only the MCP server, from a marketplace button or
by hand, the MCP server installs them when it starts. You run nothing else.
To choose which hooks run, or to remove them:
After --uninstall the MCP server does not put them back.
The other AI tools get the message hook too, so their sessions can send and receive messages. The installer writes it only for a tool that is installed:
Claude Code, opencode and pi wake an idle session. In Codex, Antigravity and Cursor, an
idle session reads its messages when its user types next. chat-recall doctor shows the
hook of each tool.
Sessions that work together
One session can start others and direct them. In Claude Code, ask for it in plain words: "start two workers, one on the API and one on the web form, and tell me when both are done".
recall_session_spawnstarts a child as a Claude Code background session, linked to its parent.claude attach <id>opens it.recall_message_sendsends to a session by id or name, or toparent,childrenorgroup. The message wakes the recipient within about a second, also when it waits for input.recall_session_statuslists the sessions: what each works on, its board cards, and whether it is working, idle, waiting for a permission prompt, or ended.- Decisions, facts and shared state go in the memory every session reads:
recall_decision_record,recall_kg_add,recall_set.
A message from another session is not a message from you. A child acts on its parent's messages because its parent started it with that instruction. Any other session treats a message as information and checks with you first.
The decision guard
A decision nobody reads is a suggestion. chat-recall guard runs before a tool
call and says so when the call reaches for something already ruled out:
It fires on installs, imports and manifest edits — npm install auth0, a new
import line, a name added to package.json. Never on prose: "we could use
Auth0" in a sentence must not stop anything, or the guard becomes something
people switch off.
It warns; it does not block. A wrong block costs the user a turn and gets the
guard uninstalled; a wrong warning costs a line of context. Set
CHAT_RECALL_GUARD_ENFORCE=1 to block instead, per machine. CHAT_RECALL_GUARD=0
turns it off.
chat-recall init registers it in all five tools. Each one keeps its
pre-execution hook in its own file, so the installer writes five shapes and
skips any tool that is not on the machine (--no-guard to skip all of them):
Codex needs one more step. It runs a hook only after you trust it — open
Codex and run /hooks once. chat-recall doctor reports the registration for
each tool.
Two of those are not full coverage, and the docs say so rather than implying
otherwise. Cursor exposes beforeShellExecution but only afterFileEdit, so
an import added in an edit is reported after the write, not prevented.
OpenCode's plugin hooks do not fire for subagent tool calls
(#5894), so an agent that
delegates routes around it.
Companion: codeindex (auto-detected)
There's a separate MCP server called codeindex (Zig binary, ~56 MB) by munhq that gives the agent code-level lookup. The two compose:
- chat-recall = session memory. What have I worked on? What did we decide?
- codeindex = code memory. Where is this symbol? Who calls it? What breaks if I change it?
Together the agent can answer "have I built this before?" and "does it already exist in this codebase?" before redoing work.
How chat-recall handles it: chat-recall init detects whether codeindex is on your PATH (or at ~/.local/bin/codeindex). If yes, it registers it as an MCP server in ~/.mcp.json automatically — no download, no surprise. If no, it prints a one-line hint about how to get it.
codeindex is open source (MIT) at github.com/munhq/codeindex. The install is optional — chat-recall works entirely without it; you just don't get the code-level tools.
What gets indexed
MCP tools (68, including 4 code-intelligence tools that register when the companion binary is installed)
Search & retrieve — recall_search, recall_memory_search, recall_recent, recall_show, recall_context, recall_summary, recall_smart_resume, recall_project_context, recall_weekly_digest, recall_analytics_summary, recall_wake_up.
Pattern detection — recall_search with like_session: <id> (find work similar to a given session), recall_redundant_files (warn when a new filename overlaps prior work), recall_diff with files_only: true (what files session X actually touched), recall_edits_timeline with group_by: "session" (which sessions edited auth.rs).
Subagents & filters — recall_subagent_search (search inside hidden Explore/aside/compact transcripts), recall_user_prompts (only what the human typed, banner-stripped).
Findings, ranked — recall_claude_suggestions (every finding that becomes an agent-instruction change: the CLAUDE.md rules and skill installs, merged across account scope and every indexed project) and recall_improvements (everything else, ranked most urgent first, with create_tasks: true to open one team task per item). They partition the same recommendation engines, so an item never appears in both.
Knowledge graph — recall_kg_query, recall_kg_add, recall_kg_invalidate, recall_kg_timeline, recall_kg_stats. Plus recall_decision_record to write a decision as both a triple and a diary entry in one call.
KV state — recall_set, recall_get (no key = list the scope). Small persistent values keyed by namespaced strings: "current PR url", "branch I'm working on", user prefs.
Diary & status — recall_diary_write, recall_diary_read, recall_status (includes memory breakdown), recall_index. Plans/tasks: search via recall_memory_search(source_types:['plan','task']), read via recall_show.
Removing things — recall_forget deletes one conversation from the server permanently, tombstoned so no later sync restores it (your own transcript file is untouched); recall_exclude_path stops a path syncing, on this machine and on your account. They exist as tools because "forget that conversation" and "stop syncing this repo" are things people say mid-conversation, not things they open a dashboard for. Both require confirm: true, both are annotated destructive, and neither is auto-approved — your client asks every time. The boundary is one-way on purpose: an agent can narrow what is stored and there is no tool that widens it again (no un-exclude, no allowlist, no retention). Widening is yours: chat-recall exclude remove, or the dashboard.
When the codeindex companion is installed, the agent also gets 16 code-level tools (find_symbol, find_callers, get_imports, plan_change, get_change_impact, analyze, etc.) from a separate MCP server. They compose: chat-recall finds what you've done; codeindex tells you what currently exists.
Search architecture
Search runs on the server, and it is Postgres full-text search: keyword
matching with ranking, plus pg_trgm typo tolerance. It needs no embedder, no
API key and no extra service.
The CLI ships redacted chunks to the server, which indexes them.
Cost tracking
Cost in USD is computed from token usage when at least one model in the session has a rate the server knows. For every other model — anything local, anything self-hosted, anything newer than the rate table — the dashboard shows — instead of fabricating a number. The summary surfaces a sessionsWithoutPricing counter, so you can see how much of the total the figure actually covers.
Wake-up context
Builds a small bundle for an AI session: optional identity blurb, the top 10 chunks the classifier flagged as decisions/preferences/milestones at importance ≥ 4, and a snapshot of currently-valid knowledge-graph facts. No magic compression — just the highest-signal items the indexer already tags.
Data locations
The CLI keeps almost nothing locally — just what it needs to reach the server:
All indexed content — chunks, FTS, vectors, knowledge graph, secret findings, diary — lives on the server (Postgres for self-host and SaaS). Reset it by wiping the server's Postgres data, not anything under ~/.chat-recall.
Privacy
Your sessions sync to a chat-recall server — either one you self-host (your own box, your own Postgres) or the SaaS. Before anything leaves the CLI it is redacted: secrets are masked client-side, so the server never receives raw credentials. Self-hosting keeps all data on infrastructure you control; the SaaS is the hosted alternative.
No telemetry. Your data lives in your server's Postgres — back that up however you like. On the SaaS it lives in the hosted Postgres; self-host if you'd rather keep it entirely on your own infrastructure.
Architecture
Two extension points, both registry-driven:
- Adding a new content type (e.g. another file format to index) — implement
MemorySource(discover→parse→extractLinks) and register it in theSourceRegistry. - Adding a new AI tool (a seventh backend alongside Claude/OpenCode/Codex/Antigravity/Cursor/Hermes) — implement
ToolBackend(paths, ID handling,readEvents,fileToolMap,extractEditDelta) and register it inpackages/engine/src/core/backends/index.ts. All paths are env-overridable viaCHAT_RECALL_{CLAUDE,CODEX,AGY,CURSOR,CURSOR_IDE,HERMES}_HOME/CHAT_RECALL_OPENCODE_DB.
Requirements
- Node.js 22 or later. The Docker image and CI run 24.
- Sessions written by a supported tool, in its standard location:
~/.claude/,~/.codex/,~/.local/share/opencode/,~/.gemini/antigravity-cli/.
That is the whole list. No API key is needed to install, index or search.
One feature is opt-in, and it needs a back end that you choose:
Without it, sessions carry no generated summary. Everything else works the same.
License
Elastic License 2.0 for the whole repository.
In plain terms: use it, modify it, run it for yourself or inside your company, free and without asking. The one thing you may not do is offer it to third parties as a hosted or managed service — that is the product. You also may not strip the licence-key checks or the copyright notices.
It is source-available, not OSI open source, and this README will not pretend otherwise. It replaced a split where the CLI and engine were MIT and the server was BSL 1.1, which answered "may I use this?" three different ways inside one repository.
來源:README.md,提交 7be7539
工具
0版本歷史
17- v0.7.31最新Nov 3, 2026
- v0.7.26Nov 1, 2026
- v0.7.25Oct 30, 2026
- v0.7.23Oct 30, 2026
- v0.7.21Oct 29, 2026
- v0.7.19Oct 6, 2026
- v0.7.18Oct 3, 2026
- v0.7.17Oct 2, 2026
- v0.7.12Sep 30, 2026
- v0.7.11Sep 30, 2026
- v0.7.9Sep 28, 2026
- v0.7.7Sep 27, 2026
- v0.7.6Sep 25, 2026
- v0.7.5Sep 25, 2026
- v0.7.3Sep 24, 2026
- v0.7.0Sep 16, 2026
- v0.6.9Sep 16, 2026
評分
已滿足適用檢查項的 75%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通必需25 分
- 已宣告認證方式必需10 分
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。