English | 中文
A local, offline, zero-dependency (Python standard library only) tool to read — and continue — your Claude Code conversations right in your browser. It reads the conversation logs already on your disk under ~/.claude/projects and renders them as a clean, searchable single page. Everything runs on 127.0.0.1; nothing is ever uploaded, and the tool never phones home.
The suite ships in three tiers, from a pure read-only viewer up to a full chat-and-approve console with phone notifications. Pick the smallest tier that does what you need.
🧭 New here? Just download everything and try it. Click the green
< > Code→ Download ZIP (the whole repo is tiny and all three tiers come bundled), unzip, and open the folder you want — then double-click its.bat:
- Just want to read past sessions? →
ClaudeReader- Want to chat & branch in the browser? →
ClaudeDeck- Want phone push + remote approval too? →
ClaudeDeck-ProMaxNot sure? Start with
ClaudeDeck-ProMax— it includes everything, and push / remote approval stay off until you switch them on, so out of the box it behaves exactly likeClaudeDeck.
| Tier | What it is | Pros | Cons |
|---|---|---|---|
Claude Reader (./ClaudeReader) |
Pure read-only viewer of ~/.claude/projects JSONL |
No in-page command execution — read-only; the only actions are user-clicked (open a terminal, or send a file to the Recycle Bin); simplest; closest to cross-platform; safe to share | View only — no chat, branch, approval, or push |
ClaudeDeck (./ClaudeDeck) |
Reader + in-page chat + 分支对话 branch dialogue + capability-based smart approval, fully local | Chat & branch off any session in-browser; safe read-only ops auto-approve; no network/push surface | Windows + Edge + Claude Code CLI required; approval is static-scan, not a sandbox; single machine |
ClaudeDeck Pro Max (./ClaudeDeck-ProMax) |
Everything + phone push (WxPusher) + remote approval | Get notified on your phone; approve commands remotely while away — something a plain terminal Claude Code session can't do | Largest surface; needs WxPusher setup; remote approval runs shell commands — localhost + shared-secret only |
⚠️ In-page (browser) chat is not a full terminal. It runsclaude -pheadless and CANNOT use: Workflow / multi-agent orchestration, theultracode/max-effort multi-agent paths, ToolSearch / deferred tools, background scheduling (cron/loops), or external-link tools. It also cannot run JS scripts — only shell commands you approve. When a task needs any of those, click ▶ 在终端中继续对话 (Continue in terminal) to open a real Claude Code terminal on that session.
Read, search, and jump around any past Claude Code session in your browser.
Chat with a session right in the page, with capability-based smart approval.
分支对话 (branch dialogue) — spin off a clean new topic from any past session, choosing which earlier messages to carry over (so a long thread doesn't dilute the model's focus):
When a command needs approval, you get a WxPusher push on your phone; reply yes <N> in WeChat to approve it and let the session continue — even while you're away from your computer:
📸 Push and remote approval are off by default — the shots above show them after you opt in and add your own WxPusher token.
- All tiers: Python 3.7+ (standard library only — nothing to
pip install). - Tiers 2 & 3 (ClaudeDeck / Pro Max), additionally:
- Windows
- Microsoft Edge
- The Claude Code CLI (
claude) installed and on yourPATH
python claude_reader.py(Windows users can also just double-click the launcher inside the tier folder — ClaudeReader.bat, ClaudeDeck.bat, or ClaudeDeck-ProMax.bat.)
The server starts on 127.0.0.1 and opens your browser at:
http://127.0.0.1:8765/
Run it from inside the tier folder you want (ClaudeReader, ClaudeDeck, or ClaudeDeck-ProMax).
Tiers that support configuration read an optional config.json from the tier folder. To create one, copy the bundled example and edit your copy:
cp config.example.json config.jsonconfig.example.json is committed as a template; your real config.json is gitignored so your tokens never get committed.
| Key | Meaning |
|---|---|
port |
Port the local server listens on (default 8765). |
default_cwd |
Working directory used when you start a brand-new chat. Use "" to default to your home directory. |
browser |
Which browser to open: "edge", "default", or "none" (don't auto-open). |
auto_approve_roots |
List of directories where in-workspace deletes are auto-approved. Keep this tight. |
protected_paths |
Paths that must never be auto-approved, even inside an auto_approve_roots directory. |
| Key | Meaning |
|---|---|
push.enabled |
Master switch for phone push. Default false. |
push.wxpusher.app_token |
Your WxPusher application token. |
push.wxpusher.uids |
List of WxPusher user IDs (UIDs) that should receive the push. |
remote_approve.enabled |
Master switch for remote approval. Default false. |
remote_approve.shared_secret |
A private secret shared between the server and your relay bot. Keep it secret. |
To get a free WxPusher app_token / UID: go to wxpusher.zjiecode.com, sign in with WeChat, create an application to obtain its appToken, then follow/scan to register and read off your UID.
🔒 Push and remote approval are OFF by default. Nothing is ever sent anywhere until you set
enabled: trueand fill in your own tokens. Out of the box, Pro Max behaves like ClaudeDeck with no network surface.
Pro Max does not talk to WeChat (or any other chat app) directly. Instead, a separate bot that you run — for example a small WeChat relay — bridges your phone and the local server. The contract is simple HTTP on 127.0.0.1:
-
When you reply on your phone with
yes <N>(where<N>is the pending request's token), your bot calls:POST /api/remote/approve Content-Type: application/json {"token": "<N>", "secret": "<your shared_secret>"}
-
Your bot can discover what's waiting and what finished by polling:
GET /api/remote/pending # commands currently awaiting approval GET /api/remote/done # recently completed approvals
🔒 SECURITY WARNING: the
/api/remote/approveendpoint executes approved shell commands. The server binds to127.0.0.1only. Never expose it to your LAN or the public internet without your own authentication in front of it, and keepshared_secretprivate. The shared secret is the only thing standing between a local request and command execution.
⚠️ In-page (browser) chat is not a full terminal. It runsclaude -pheadless and CANNOT use: Workflow / multi-agent orchestration, theultracode/max-effort multi-agent paths, ToolSearch / deferred tools, background scheduling (cron/loops), or external-link tools. It also cannot run JS scripts — only shell commands you approve. When a task needs any of those, click ▶ 在终端中继续对话 (Continue in terminal) to open a real Claude Code terminal on that session.
This is why the effort dropdown stops at 5 levels and excludes ultracode. The ultracode / maximum-effort mode relies on multi-agent orchestration, which the headless claude -p path used by in-page chat cannot drive. Rather than offer a level that would silently fail or degrade, the dropdown only exposes the effort levels that genuinely work in-browser. If you need the full multi-agent, max-effort behavior, continue the session in a real terminal.
Use in-page chat for quick, interactive turns: ask a follow-up, branch a conversation, run and approve simple shell commands — all without leaving the browser. Reach for ▶ 在终端中继续对话 (Continue in terminal) the moment a task needs anything the headless path can't do — multi-agent orchestration, ultracode/max-effort, ToolSearch / deferred tools, cron/background loops, external-link tools, or running JS scripts. The button hands the exact same session off to a real Claude Code terminal, so you lose no context — you just gain the full toolset.
The reverse is also true — some things only the in-page chat can do. Phone push (WxPusher) and remote approval (approve a command from your phone by replying yes <N> while you're away) are built into ClaudeDeck Pro Max's local server and work only through its in-page chat — a plain claude terminal session (including the one opened by Continue in terminal) has no way to ping your phone or accept a remote approval. So: reach for the terminal when you need the heavy multi-agent toolset; stay in Pro Max's in-page chat when you want to be reachable on your phone and approve commands on the go.
- Localhost-only bind. The server listens on
127.0.0.1:8765and is not reachable from other machines by default. - No per-request auth. The tool surfaces all of your local Claude conversations over
127.0.0.1:8765with no per-request authentication. This is fine on a single-user machine, but it means anyone with access to that loopback interface can read your sessions — don't run it on a shared or multi-user host. - Never phones home. No telemetry, no analytics, no uploads. Your conversations stay on your disk.
- Secrets stay out of git. Your real
config.json(with WxPusher tokens and your shared secret) is gitignored; onlyconfig.example.jsonis committed.
Not affiliated with, endorsed by, or sponsored by Anthropic. "Claude" is a trademark of Anthropic. This is an independent, community tool for reading your own local Claude Code conversation files.






{ "push": { "enabled": false, "wxpusher": { "app_token": "AT_xxxxxxxxxxxxxxxx", "uids": ["UID_xxxxxxxxxxxx"] } }, "remote_approve": { "enabled": false, "shared_secret": "choose-a-long-random-string" } }