Skip to content

tznthou/ccRewind

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

188 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ccRewind

License: GPL-3.0 TypeScript React Electron

English

搜尋、瀏覽、回放跟 Claude Code 的對話歷史。輕量、唯讀、離線優先——你的 ~/.claude/ 一個位元組都不會動。

ccRewind

ccRewind 應用程式預覽 ccRewind 品牌形象

三種佈景主題 × Context Budget 儀表板

一鍵切換三種視覺風格,搭配內建 Token 用量儀表板,對話考古也可以很有氛圍感。

📂 檔案室 Archive 🕐 時間線 Timeline 💻 終端回憶 Terminal
Archive 主題 — 暖色調檔案室風格,搭配 Context Budget 儀表板 Timeline 主題 — 冷色調時間線風格,搭配 Context Budget 儀表板 Terminal 主題 — 深色終端風格,搭配 Context Budget 儀表板

核心概念

ccRewind 讀取 ~/.claude/projects/ 下的 JSONL 對話紀錄,建立 SQLite + FTS5 索引,提供瀏覽、搜尋、匯出功能。

Session 摘要由結構化規則引擎產生(意圖提取 + 動作概要 + outcome 推斷),零 API 成本。標籤透過文字、路徑、工具模式三軌交叉推斷。ccRewind 屬 ccFamily 三件套,整體哲學是 rule-based + zero API cost,不規劃引入 LLM 路線;更深入的「跨 session ADR 推理」由規劃中的姊妹 plugin ccReason 承接(讀 ccRecall schema,獨立 npm 包)。

所有操作都是唯讀的。ccRewind 絕不修改 ~/.claude/ 下的任何檔案,你的對話紀錄、記憶檔案、設定檔,一個位元組都不會動。

Claude Code 刪除 Session 後,ccRewind 會自動封存該筆對話。所有訊息、標籤、摘要都留在 SQLite 裡,不會隨 JSONL 檔案消失。


為什麼用 ccRewind

不追功能廣度,專注把幾件事做深。

為什麼用 ccRewind — 檔案演進史、Subagent 獨立面板、多圖表深度儀表板、零寫入承諾


功能特色

對話瀏覽與搜尋
功能 說明
對話瀏覽 user/assistant 氣泡介面,Markdown 渲染 + 程式碼語法高亮
Tool 摺疊 tool_use / tool_result 預設摺疊,點擊展開查看完整內容
Markdown 匯出 一鍵將 Session 匯出為 .md 檔案,含 Metadata 表格 + Tool 摺疊
全文搜尋 FTS5 索引,分頁載入,結果按 Session 分組,支援「對話」與「標籤/檔案」兩種搜尋模式,可依日期範圍過濾(7天/30天/90天)、切換相關性或時間排序
搜尋上下文預覽 搜尋結果可展開顯示前後 2 則訊息,不用跳轉就能快速判斷相關性。結果顯示 Session 日期與 outcome 狀態 badge
Token 與 Context
功能 說明
Context Budget 視覺化 Token 用量追蹤:堆疊面積圖、圓餅圖、熱力條,一眼看出每個 Session 燒了多少 token、cache 命中率多高
Token Insights 自動解讀圖表:偵測 context spike 並歸因、評估 cache 效率、標記 output 熱點、分析成長趨勢,讓圖表不只好看還能看懂
Token 熱力指示 Assistant 訊息左側色碼條(綠=cache 命中佳、紅=高成本),Session 列表顯示 token 總量並可依 token 排序
精確 Token 統計 自動偵測同一 API response 被拆成多個 JSONL entries 的情況,透過 requestId 去重避免 token 重複計算(修正 ~2.3x 膨脹)
統計與考古
功能 說明
統計儀表板 跨 session 分析:使用趨勢(雙軸面積圖)、效率趨勢(tokens/turn)、浪費偵測(高 token 低產出 session 一鍵跳轉)、專案健康度(outcome 堆疊條 + 趨勢箭頭)、工具/標籤分佈、工作模式熱力圖
跨 Session 考古 檔案歷史抽屜(點檔案看它在哪些 session 出現過)、相關 Session 推薦(Jaccard 相似度)、可展開 File Chips
檔案反向索引 每個 session 操作了哪些檔案、什麼操作(read/edit/write),可點擊檔案追蹤跨 session 歷史
Session 自動摘要 結構化摘要引擎:意圖提取(跳過 greeting)、動作概要(Edit×8, 5 files)、outcome 推斷(committed/tested/in-progress)、20+ 條多信號標籤
Subagent 瀏覽 自動掃描 subagents/*.jsonl 並建立索引。有 subagent 的 Session 顯示可點擊 chips(agent type + 訊息數),點擊進入後以 breadcrumb 導覽回 parent session
Tasks Panel 自動掃描 ~/.claude/tasks/{sessionId}/*.json 並在 ChatView 顯示任務快照——subject、三態 status 徽章、blockedBy chips,讓你看清楚 AI 在這段對話裡規劃了哪些步驟、哪幾條卡住。append-mode (session_id, task_id) PK 與 session reindex 解耦,刪掉 session 重建時不會把任務歷史一起洗掉
資料與儲存
功能 說明
資料保全 JSONL 被刪除時自動封存對話,不丟失任何歷史紀錄
儲存管理 檢視索引資料庫佔用(DB 大小、Session/Message 數、專案佔比視覺化 bar),以排除規則釋放空間——一鍵排除整個專案、依日期範圍排除,或從規則清單移除;所有刪除走統一雙重確認(checkbox + >50% 紅色警告 banner),IPC 層 apply-token handshake 防 renderer 繞過
DB 壓縮 Storage 頁顯示可回收空間(freelist × page_size,PRAGMA 即時讀取),一鍵 VACUUM 釋放 SQLite DELETE 留下的 free pages,確認對話框明確標示僅重組檔案結構不刪資料
增量索引 首次啟動掃描所有 JSONL,後續僅處理新增/修改的檔案。Resumed session 自動 UUID 去重,不產生重複訊息
DB 自動遷移 schema 變更時自動升級,大型資料庫無痛升版
介面與互動
功能 說明
三主題切換 檔案室(Archive)、時間線(Timeline)、終端回憶(Terminal),一鍵切換
Active Time Session 時長優先顯示活動時間(排除 >5 分鐘閒置),括號附註掛鐘時間。儀表板平均時長同步使用 active time
更新通知 啟動時自動偵測 GitHub 新版本,一鍵開啟下載頁面
虛擬捲動 大量 Session 不卡頓(@tanstack/react-virtual)
多語介面 繁體中文與英文 UI 切換,所有文字走 type-safe MessageKey 目錄(zh-TW 預設),localStorage 持久化
字級縮放 三檔字級切換(一般 1.0× / 大 1.1× / 特大 1.25×),透過 --font-scale CSS 變數驅動,boot-time 載入避免 FOUC
Sync 狀態提示 視窗 focus 自動重新索引(in-flight Promise 合併防 thrashing)+「立即同步」按鈕 +「上次索引 Xs 前」狀態標籤
Sidebar 鍵盤導覽 專案、Session、訊息搜尋、Session 搜尋四個列表皆支援 ↑↓ 導覽,搜尋框 ↓ 鍵交棒給結果第一筆;虛擬化列表使用 aria-activedescendant 模式,捲動時不丟焦點
無障礙 WCAG 2.1 AA 對比度、ARIA 標籤(含 radio 鍵盤模式)、焦點管理

使用說明

  • 第一次使用 → docs/GETTING-STARTED.md(5 分鐘上手:安裝、索引、第一次瀏覽與搜尋)
  • 各功能詳細使用方式 → docs/USER-GUIDE.md(Session 摘要與標籤、搜尋、Context Budget、統計儀表板、跨 Session 考古、儲存管理)

系統架構

graph TB
    subgraph Main Process
        FS[檔案掃描器<br>~/.claude/projects/] --> JP[JSONL Parser]
        JP --> SM[摘要引擎<br>意圖+outcome+標籤]
        JP --> DB[(SQLite + FTS5<br>+ session_files<br>+ exclusion_rules)]
        SM --> DB
        DB --> IPC[IPC Handlers<br>sessions · search · stats · files<br>related · export · storage]
        EX[Markdown 匯出器] --> IPC
        AT[Apply-Token Handshake<br>one-time UUID · 60s TTL] --> IPC
    end

    subgraph Renderer Process
        SB[Sidebar<br>專案選擇 + Session 清單 + 搜尋]
        CV[ChatView<br>對話閱讀器 + Token Budget<br>+ File Chips + Related Sessions]
        DB_UI[Dashboard<br>使用/效率趨勢 · 專案健康度 · 浪費偵測<br>工具分佈 · 標籤分佈 · 工作模式熱力圖]
        FH[FileHistoryDrawer<br>跨 Session 檔案歷史時間軸]
        SP[StoragePage<br>總覽卡 · 專案佔用 bar<br>排除規則 · 統一 Confirm Dialog]
    end

    IPC <-->|invoke / handle| SB
    IPC <-->|invoke / handle| CV
    IPC <-->|invoke / handle| DB_UI
    IPC <-->|invoke / handle| FH
    IPC <-->|invoke / handle| SP
Loading

技術棧

技術 用途 備註
Electron 33 桌面應用框架 macOS hiddenInset title bar
React 19 UI 框架 函式元件 + hooks
TypeScript 5.7 型別安全 strict mode
better-sqlite3 11 SQLite binding 含 FTS5 全文搜尋
recharts 3 圖表庫 面積圖、圓餅圖、甜甜圈圖(Context Budget + Dashboard)
electron-vite 5 建構工具 main + preload + renderer 三路建構
Vitest 3 測試框架 445 個測試,透過 Electron 執行

下載安裝

Releases 頁下載對應平台的預編譯版:

  • macOS(arm64):DMG 拖曳到 Applications,或 ZIP 解壓後直接執行
  • Windows(x64):NSIS installer 或 ZIP

系統需求:macOS 11+ / Windows 10+

首次啟動警告

ccRewind 尚未取得 Apple Developer ID / Microsoft 程式碼簽章,首次執行時作業系統會顯示未簽章應用的警告,這是正常行為:

  • macOS:出現「無法驗證開發者」時,開啟「系統設定 → 隱私與安全性」,找到 ccRewind 並點擊「仍要打開」
  • Windows:SmartScreen 顯示「Windows 已保護您的電腦」時,點擊「其他資訊」→「仍要執行」

快速開始

環境需求

  • Node.js >= 20, < 23
  • pnpm >= 9

安裝與啟動

git clone https://github.com/tznthou/ccRewind.git
cd ccRewind
pnpm install
pnpm dev

建構發布

pnpm build
pnpm dist

其他指令

pnpm test        # 執行測試(透過 Electron 跑 Vitest)
pnpm typecheck   # TypeScript 型別檢查
pnpm lint        # ESLint 修正

專案結構

展開查看完整目錄樹
ccRewind/
├── src/
│   ├── main/                  # Electron main process
│   │   ├── index.ts           # 應用程式入口
│   │   ├── scanner.ts         # 專案 / Session 檔案掃描
│   │   ├── parser.ts          # JSONL 解析器
│   │   ├── database.ts        # SQLite + FTS5 管理(含 sessions_fts + session_files + 統計查詢 + Jaccard)
│   │   ├── indexer.ts         # 增量索引器
│   │   ├── summarizer.ts      # 結構化摘要引擎(意圖提取 + outcome 推斷 + 多信號標籤 + session_files)
│   │   ├── exporter.ts        # Markdown 匯出
│   │   ├── updater.ts         # GitHub Release 更新偵測
│   │   └── ipc-handlers.ts    # IPC 通訊處理
│   ├── preload/               # contextBridge 安全橋接
│   │   └── index.ts
│   ├── renderer/              # React 前端
│   │   ├── App.tsx            # 根元件
│   │   ├── components/
│   │   │   ├── Sidebar/       # 專案選擇 + Session 清單 + 搜尋
│   │   │   ├── ChatView/      # 對話閱讀器 + Token 熱力指示 + File Chips + Subagent 導覽 + Tasks Panel + 匯出
│   │   │   ├── Dashboard/     # 統計儀表板:使用/效率趨勢、專案健康度、浪費偵測、工具/標籤分佈、工作模式
│   │   │   ├── Archaeology/   # 跨 Session 考古:FileHistoryDrawer、RelatedSessionsPanel
│   │   │   ├── Storage/       # 儲存管理:總覽卡、專案佔用 bar、排除規則、統一 Confirm Dialog
│   │   │   ├── TokenBudget/   # Context Budget 面板:面積圖、圓餅圖、熱力條、Insights
│   │   │   ├── ThemeSwitcher/ # 三主題切換按鈕
│   │   │   ├── FontScaleSwitcher/ # 三檔字級縮放(含 ARIA radio 鍵盤模式)
│   │   │   └── UpdateBanner/  # 更新通知橫幅
│   │   ├── hooks/             # useSession, useSessions, useProjects, useIndexerStatus, useListboxKeyNav
│   │   ├── i18n/              # LanguageSwitcher + 訊息目錄 + useI18n(zh-TW + en)
│   │   ├── utils/             # formatTokens, formatTime, formatDuration, pathDisplay, renderSnippet
│   │   └── context/           # AppContext + ThemeContext + FontScaleContext(語言/主題/字級皆 localStorage 持久化)
│   └── shared/
│       └── types.ts           # 主程序與渲染程序共用型別
├── tests/                     # Vitest 測試(445 個)
├── docs/                      # PRD / SPEC / PLAN
├── electron-builder.yml
└── package.json

隨想

為什麼做這個

跟 Claude Code 協作的對話散落在 ~/.claude/projects/ 底下,每個 Session 是一個 JSONL 檔案。想回頭看三天前的設計決策?你得記得是哪個 Session、手動 cat JSONL、在密密麻麻的 JSON 裡面找到那段對話。

現有的方案要嘛太重(RAG、向量搜尋),要嘛方向不對(記憶注入、Context 管理)。我只是想安靜地回顧過去的對話,像翻閱考古現場的筆記本。

所以 ccRewind 就是這個:一本有索引的考古筆記本。

Non-goals

ccRewind 刻意不做這些事:

  • 不做 Context Injection:不干預未來的對話,只回顧過去的
  • 不做雲端同步:所有資料來自本地 ~/.claude/,不上傳任何東西
  • 不修改任何檔案:純唯讀應用,連 ~/.claude/ 的 mtime 都不會動
  • 不做即時監控:不是 tail -f,是考古學
  • 不引入 LLM 路線:ccFamily 三件套堅持 rule-based + zero API cost;需要 ADR 推理層的場景由規劃中的 ccReason plugin 承接

如果你需要的是「讓 Claude 記住之前說過什麼」,去看 claude-mem 之類的記憶系統。ccRewind 解決的是不同的問題:讓人類回顧與 AI 的協作歷史。

Roadmap

詳見 docs/ROADMAP.md

Phase 狀態 主題
1 ✅ 完成 基礎建設:表拆分、資料保全、分頁、分組
2 ✅ 完成 Session 摘要(規則式)、搜尋上下文預覽、Scope 擴展
2.5 ✅ 完成 Context Budget 視覺化:token 用量追蹤、面積圖、圓餅圖、熱力條、排序
2.6 ✅ 完成 Token Insights Engine:自動解讀圖表(spike 偵測、cache 評估、熱點標記、趨勢分析)
3 ✅ 完成 摘要品質升級 + 檔案反向索引(跨 Session 考古地基)
3.5 ✅ 完成 統計儀表板 + 跨 Session 考古 UI(護城河版本)
4 ✅ 完成 Dashboard 進階功能:效率趨勢、浪費偵測、專案健康度
4.5 ✅ 完成 搜尋體驗強化:日期過濾、排序切換、intent_text 搜尋、結果日期與 outcome badge
5 ✅ 完成 Active Time 計算 + Subagent 索引 + requestId Token 去重
5.5 ✅ 完成 Subagent 前端 UI:chips 導覽 + breadcrumb 返回
6 ✅ 完成 儲存管理:exclusion_rules + 總覽頁 + 專案佔用 + 日期範圍排除 + IPC apply-token handshake + indexer skip(v1.9.0)
7 ✅ 完成 i18n + 全面 a11y 升級:繁中/英雙語、鍵盤導覽、aria-live announcements、字級縮放、sync UX(v1.10.0)
7.5 ✅ 完成 a11y polish 收尾 + License relicense(AGPL-3.0 → GPL-3.0-or-later)+ README 雙版重組(v1.11.0)
7.6 ✅ 完成 Dashboard readability:7 cards 完整 i18n + a11y data exposure(SR 聽得到 chart 數值)+ ProjectHealth visible legend + outcome inference v2(NULL 53%→15.3%)(v1.12.0)
7.7 ✅ 完成 Token Budget 子系統 i18n 補完(engine 改 discriminated-union InsightData、43 keys lockstep)+ 1M plan 偵測修正(226K 不再被誤報「113% of 200K」)+ panel 錯誤訊息 fail-close(v1.12.1)
7.8 ✅ 完成 UTF-16 lone surrogate normalization:parser 出口加 toWellFormed() 防爆,下游 pipeline 不再被破損的 unicode 卡住(v1.12.2)
8 ✅ 完成 Tasks Panel:掃描 ~/.claude/tasks/ 在 ChatView 顯示 TODO 歷史快照(migration v18 新增 session_tasks 表、append-mode PK 解耦 session reindex)(v1.13.0)
📋 遠期 資料壓縮功能(保留可還原,補 exclusion 硬刪的絕對性)
📋 遠期 In-App 自動更新(待 Apple Developer ID code signing)

授權

本專案採用 GPL-3.0-or-later 授權。


作者

子超 (tznthou) / tznthou.com

About

Claude Code 對話回放與考古工具 — Replay & search your Claude Code conversations. Lightweight, read-only, offline-first.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages