Skip to content

Latest commit

 

History

History
241 lines (160 loc) · 8.84 KB

File metadata and controls

241 lines (160 loc) · 8.84 KB

Claude Local Session Sync

跨多个 Claude 提供商账号同步本地会话记录

English · 快速开始 · 原理说明 · 脚本说明 · 风险提示


这是什么?

如果你通过 ccswitch 等工具在 Claude 的官方订阅模式第三方 API 路由模式之间切换,可能会发现本地 Agent 模式会话(Cowork)和 Code 模式会话(Claude Code)是按账号隔离的。不同提供商登录会生成不同的账号 UUID,Claude 桌面端只显示当前登录账号名下的会话。你的其他会话并没有消失,只是存在另一个目录里,对你"不可见"了。

本工具集提供三种策略解决这个问题:

  1. 第1步(验证) — 安全地复制一条会话跨账号,验证跨账号加载是否可行。
  2. 第2步(双向同步) — 一次性把两边的全部历史会话互相复制。
  3. 实时同步(软链接) — 将会话目录永久关联,之后新建的会话自动双向可见。

注意: 仅处理本地会话(Cowork 本地 Agent 模式、Claude Code CLI 会话)。网页版云端对话存储在 Anthropic 服务器上,本地无法合并。


目录


环境要求

  • macOS(在 macOS 14+ 上测试通过)
  • 已安装 Claude 桌面端
  • bash 4+ 及标准 Unix 工具(cpmvlnfindpgrep
  • 你已经在使用 ccswitch 或手动切换订阅/路由模式
  • 两种模式下都至少生成过一条本地会话(确保目录结构已存在)

快速开始

1. 定位账号目录

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 目录。在订阅模式下出现的那个是订阅账号;在路由模式下出现的那个是路由账号

2. 编辑脚本配置

所有脚本在文件顶部都有变量声明。打开脚本,把占位 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>"

3. 执行第1步 — 验证

运行前: 完全退出 Claude 桌面端(按 Cmd+Q)。应用不能处于运行状态。

bash scripts/step1-verify.sh

脚本会:

  • 完整备份 local-agent-mode-sessions 目录
  • 从路由账号复制一条会话到订阅账号目录
  • 打印提示,让你重新打开 Claude 验证该会话是否出现

如果会话能正常显示并打开,说明同步方案在你的环境下可行。

4. 执行第2步 — 双向同步

确认第1步成功后:

bash scripts/step2-bidirectional.sh

这会双向复制所有历史会话。运行完毕后,两种模式下都能看到完整的会话历史。

注意: 这是一次性同步。此后新建的会话仍由创建它的账号单独持有。

5.(可选)实时同步 — 软链接

如果需要永久自动共享新会话:

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步双向同步 一次性复制 高(完整备份) 迁移历史记录
实时软链接 永久 中(有备份+软链接) 长期双模式并用

脚本说明

scripts/step1-verify.sh

最小可行性验证。从路由账号复制一条会话来订阅账号。包含完整备份和回滚命令打印。

需编辑: 文件顶部的 SUB_ACCOUNTSUB_ORGRT_ACCOUNTRT_ORG

scripts/step2-bidirectional.sh

一次性双向同步所有已有会话。路由→订阅、订阅→路由,互不覆盖已有文件。

需编辑: 与第1步相同的 UUID。

scripts/realtime-symlink.sh

永久方案,使用软链接。先归并已有文件,再把路由账号目录替换为指向订阅账号目录的软链接。

需编辑:

  • CODE_TRUTH — 订阅账号 Code 会话的真实目录
  • WORK_TRUTH — 订阅账号 Cowork 会话的真实目录
  • CODE_LINKS — 需要替换为软链接的路由账号 Code 会话路径数组
  • WORK_LINKS — 需要替换为软链接的路由账号 Cowork 会话路径数组

scripts/legacy-merge.sh(已废弃)

早期尝试,基于"路由模式使用独立的 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 桌面端。


风险提示

⚠️ 使用任何脚本前请阅读。

  1. 先退出 Claude。 所有脚本都会检测 Claude.app 是否在运行,若运行则拒绝执行。并发读写可能损坏会话数据。
  2. 自动备份。 每个脚本都会创建带时间戳的备份,但如果你的会话数据体积巨大(数十GB),备份会消耗大量时间和磁盘空间。
  3. 软链接是永久性修改。 实时同步脚本会修改 Claude 数据目录结构。如果你日后卸载 ccswitch 或更换提供商配置,可能需要手动重建目录树。
  4. 会话元数据不会改写。 跨账号打开的会话中,cwdusername 等字段仍保留原账号信息。实践中不影响加载,但元数据不会被"翻译"。
  5. 无担保。 这些脚本直接操作你的个人应用数据。运行前请审阅代码。作者不对会话丢失负责。

常见问题

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-sessionslocal-agent-mode-sessions 有什么区别? A:claude-code-sessions = Code 标签页(终端 Agent,带工作区)。local-agent-mode-sessions = Cowork 标签页(带聊天界面的本地 Agent)。


License

MIT