Claude Local Session Sync
跨多个 Claude 提供商账号同步本地会话记录
English · 快速开始 · 原理说明 · 脚本说明 · 风险提示
如果你通过 ccswitch 等工具在 Claude 的官方订阅模式和第三方 API 路由模式之间切换,可能会发现本地 Agent 模式会话(Cowork)和 Code 模式会话(Claude Code)是按账号隔离的。不同提供商登录会生成不同的账号 UUID,Claude 桌面端只显示当前登录账号名下的会话。你的其他会话并没有消失,只是存在另一个目录里,对你"不可见"了。
本工具集提供三种策略解决这个问题:
- 第1步(验证) — 安全地复制一条会话跨账号,验证跨账号加载是否可行。
- 第2步(双向同步) — 一次性把两边的全部历史会话互相复制。
- 实时同步(软链接) — 将会话目录永久关联,之后新建的会话自动双向可见。
注意: 仅处理本地会话(Cowork 本地 Agent 模式、Claude Code CLI 会话)。网页版云端对话存储在 Anthropic 服务器上,本地无法合并。
- macOS(在 macOS 14+ 上测试通过)
- 已安装 Claude 桌面端
bash4+ 及标准 Unix 工具(cp、mv、ln、find、pgrep)- 你已经在使用 ccswitch 或手动切换订阅/路由模式
- 两种模式下都至少生成过一条本地会话(确保目录结构已存在)
Claude 在本地存储会话的位置:
~/Library/Application Support/Claude/
├── local-agent-mode-sessions/
│ ├── <订阅账号UUID>/
│ │ └── <组织ID>/
│ │ └── local_xxxxxx.json
│ └── <路由账号UUID>/
│ └── <组织ID>/
│ └── local_xxxxxx.json
└── claude-code-sessions/
├── <订阅账号UUID>/
│ └── <组织ID>/
│ └── local_xxxxxx.json
└── <路由账号UUID>/
└── <组织ID>/
└── local_xxxxxx.json
查看你的 UUID:
ls ~/Library/Application\ Support/Claude/local-agent-mode-sessions/
ls ~/Library/Application\ Support/Claude/claude-code-sessions/你会看到一个或多个 UUID 目录。在订阅模式下出现的那个是订阅账号;在路由模式下出现的那个是路由账号。
所有脚本在文件顶部都有变量声明。打开脚本,把占位 UUID 替换成你的真实值:
# 在 scripts/step1-verify.sh、scripts/step2-bidirectional.sh、scripts/realtime-symlink.sh 中
SUB_ACCOUNT="<你的订阅账号UUID>"
SUB_ORG="<你的订阅组织ID>"
RT_ACCOUNT="<你的路由账号UUID>"
RT_ORG="<你的路由组织ID>"运行前: 完全退出 Claude 桌面端(按 Cmd+Q)。应用不能处于运行状态。
bash scripts/step1-verify.sh脚本会:
- 完整备份
local-agent-mode-sessions目录 - 从路由账号复制一条会话到订阅账号目录
- 打印提示,让你重新打开 Claude 验证该会话是否出现
如果会话能正常显示并打开,说明同步方案在你的环境下可行。
确认第1步成功后:
bash scripts/step2-bidirectional.sh这会双向复制所有历史会话。运行完毕后,两种模式下都能看到完整的会话历史。
注意: 这是一次性同步。此后新建的会话仍由创建它的账号单独持有。
如果需要永久自动共享新会话:
bash scripts/realtime-symlink.sh脚本先将已有文件归并,然后把路由账号的 org 目录替换为指向订阅账号目录的软链接。此后两边读写的是同一份数据。
Claude 桌面端按账号 UUID 隔离会话:
local-agent-mode-sessions/<账号UUID>/<组织ID>/local_*.json
当你用不同提供商登录时,账号 UUID 发生变化,App 就去另一个子目录查找,之前的会话因此对当前账号"不可见"。
本地会话文件(local_*.json)不包含加密归属校验。账号 UUID 只出现在路径快照等字段中(如 cwd)。这意味着把会话文件从一个账号目录移动到另一个账号目录,App 通常能正常加载,因为它靠目录结构而非文件内容来判断归属。
| 策略 | 持续性 | 安全性 | 适用场景 |
|---|---|---|---|
| 第1步验证 | 一次性复制 | 最高(只动1个文件,完整备份) | 验证可行性 |
| 第2步双向同步 | 一次性复制 | 高(完整备份) | 迁移历史记录 |
| 实时软链接 | 永久 | 中(有备份+软链接) | 长期双模式并用 |
最小可行性验证。从路由账号复制一条会话来订阅账号。包含完整备份和回滚命令打印。
需编辑: 文件顶部的 SUB_ACCOUNT、SUB_ORG、RT_ACCOUNT、RT_ORG。
一次性双向同步所有已有会话。路由→订阅、订阅→路由,互不覆盖已有文件。
需编辑: 与第1步相同的 UUID。
永久方案,使用软链接。先归并已有文件,再把路由账号目录替换为指向订阅账号目录的软链接。
需编辑:
CODE_TRUTH— 订阅账号 Code 会话的真实目录WORK_TRUTH— 订阅账号 Cowork 会话的真实目录CODE_LINKS— 需要替换为软链接的路由账号 Code 会话路径数组WORK_LINKS— 需要替换为软链接的路由账号 Cowork 会话路径数组
早期尝试,基于"路由模式使用独立的 Claude-3p 数据目录"这一错误前提。现代 ccswitch 已不适用此假设。保留仅供参考。
每个脚本运行结束时都会打印精确的回滚命令。通用模式:
# 第1步或第2步的回滚
rm -rf "$HOME/Library/Application Support/Claude/local-agent-mode-sessions"
mv "$HOME/Library/Application Support/Claude/local-agent-mode-sessions.backup-<时间戳>" \
"$HOME/Library/Application Support/Claude/local-agent-mode-sessions"
# 实时软链接的回滚
rm -rf "$HOME/Library/Application Support/Claude/claude-code-sessions"
mv "$HOME/Library/Application Support/Claude/claude-code-sessions.bak-<时间戳>" \
"$HOME/Library/Application Support/Claude/claude-code-sessions"回滚前务必完全退出 Claude 桌面端。
- 先退出 Claude。 所有脚本都会检测
Claude.app是否在运行,若运行则拒绝执行。并发读写可能损坏会话数据。 - 自动备份。 每个脚本都会创建带时间戳的备份,但如果你的会话数据体积巨大(数十GB),备份会消耗大量时间和磁盘空间。
- 软链接是永久性修改。 实时同步脚本会修改 Claude 数据目录结构。如果你日后卸载 ccswitch 或更换提供商配置,可能需要手动重建目录树。
- 会话元数据不会改写。 跨账号打开的会话中,
cwd、username等字段仍保留原账号信息。实践中不影响加载,但元数据不会被"翻译"。 - 无担保。 这些脚本直接操作你的个人应用数据。运行前请审阅代码。作者不对会话丢失负责。
Q:这会同步我的网页版聊天历史吗? A:不会。只有本地 Agent 模式(Cowork)和 Claude Code 会话存储在本地。普通网页对话存在 Anthropic 服务器上。
Q:Windows 能用吗?
A:不能直接运行。脚本使用了 macOS 路径(~/Library/Application Support)。Windows 的 Claude 数据存在 %APPDATA%\Claude,路径和软链接行为都不同,需要移植逻辑。
Q:如果 Anthropic 改了目录结构怎么办? A:这些脚本针对 2026 年中期的目录结构设计。如果 Claude 桌面端更改了存储布局,脚本可能需要更新。
Q:claude-code-sessions 和 local-agent-mode-sessions 有什么区别?
A:claude-code-sessions = Code 标签页(终端 Agent,带工作区)。local-agent-mode-sessions = Cowork 标签页(带聊天界面的本地 Agent)。
MIT