你的 Claude Code 每次開新對話都是一張白紙。前兩週決定的架構、修過的坑、定過的慣例——全忘。
於是你變成了 AI 的長期記憶,每次都得再講一遍。
那些對話沒有消失——它們躺在 ~/.claude/projects/ 的 JSONL 裡,只是沒人去讀。ccFamily 是兩個去讀它的本機工具:一個讀給 AI,一個讀給你。
npm install -g @tznthou/ccrecall
同一份 JSONL,兩種讀法。ccRecall 把它煉成餵給 AI 的記憶,ccRewind 把它攤成給人看的歷史。兩個各自獨立,裝一個或兩個都行。
讓 AI 記得 · CLI · APACHE-2.0
session 結束後把對話煉成結構化記憶,下次開新對話自動帶回最多 5 筆。你不用再重講一次「我們之前決定用 X 不用 Y」。 ~/.ccrecall/
看 ccRecall 怎麼運作 →讓你回頭查 · 桌面 APP · GPL-3.0
把散落的 JSONL 攤成一本有索引的考古筆記本:搜得到、看得懂分支、算得出 token 花在哪。 ~/.ccrewind/
看 ccRewind 怎麼運作 →想讓 Claude 記得上週為什麼選了 SQLite
想翻出三天前那段對話最後是怎麼結論的
開新 session 不想再重講一次專案脈絡
想知道這個月 token 到底花在哪些對話上
不是 pipeline、不是中央 daemon——而是兩個對等的基礎產品(獨立安裝、獨立升級、獨立刪除),加一個讀共用 schema 的擴展 plugin。
DESIGN NOTE
ccReason(ADR 推理)獨立 npm 包但讀 ccRecall 共用 schema——是 plugin,不是 subcommand 也不是 peer。
原因:ccReason 的核心動作是「讀 ccRecall 的 memories + knowledge_map 表推 ADR」——讀寫都依賴 ccRecall 的 SQLite schema。獨立成 peer 等於要重新發明 storage、做成 subcommand 又會污染 ccRecall codebase。plugin 模式(獨立 npm + 共用 schema)兩邊優勢都拿到。
// 對 V2 ADR CLI 路線是補充,不是顛覆。仍是 CLI、仍是 ADR markdown、仍 Apache-2.0。
// PLUGIN (READS SHARED SCHEMA) · 尚未動工
EXTENSION · ADR CLI · INDEPENDENT NPM · SHARED SCHEMA
獨立 npm 包但架構上是 ccRecall 的 extension,讀 ccRecall 的 memories + knowledge_map 表推 ADR markdown,可 commit 進 docs/adr/。
ccreason adr "why did we switch to NATS"
ASSERT #04
每個 peer 產品可獨立安裝、獨立升級、獨立刪除。卸載 ccRecall 不影響 ccRewind,反之亦然。ccReason plugin 是 opt-in。
ASSERT #05
共用 DB 永遠在本機 ~/.ccfamily/,沒有 cloud sync 計畫。合規派可丟進公司 backup policy。
ASSERT #06
Schema migration 提供可逆路徑與文件(forward + rollback SQL)。整合採用者保有退出空間。
// INVARIANTS: LOCAL-FIRST · OPEN-SOURCE · CLAUDE-CODE-NATIVE · INDEPENDENT-INSTALL · REVERSIBLE-MIGRATION