返回资讯中心
外部精选
软件工程
#开发者实时流

新工具让Claude桌面版切换账号后保留全部Code会话记录

来源标题:Show HN: Keep all your Claude desktop Code sessions when you swap accounts

开发者发布了一个工具,可将Claude桌面版Code标签页的会话列表在多个账号间同步,避免切换账号后侧边栏会话消失。原因是会话列表按账号分文件夹存储,但会话记录本身已跨账号共享,复制记录即可恢复。该工具适用于在同一台Mac上使用两个Claude账号的场景。

Hacker News 最新ramonmazinga2026/11/12 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

一台机器,两个 Claude 账户,一份会话列表。 Claude 桌面应用的 Code 标签页会话列表是按登录账户分别保存的。每个账户有自己的文件夹: <userData>/claude-code-sessions/<accountUuid>/<orgUuid>/ local_<sessionId>.json 每个会话一条记录(标题、cwd、isArchived 等) deleted_<sessionId> 会话被删除时写入的墓碑记录 scheduled-tasks.json 按账户区分——不是我们要处理的 backlog/、spaces.json 按账户区分——不是我们要处理的 这些记录指向的对话记录本身已经跨账户共享(它们存放在 userData 之外,以 session id 为键),所以把一条记录复制到另一个账户的文件夹后,完全可以继续恢复。只有列表是按账户分开的。 因此,如果你在两个账户之间交替使用——比如一个账户触发了每周用量上限——你看到的侧边栏取决于你当前登录的是哪个账户。在一个账户上开始的工作,从另一个账户里看不到,尽管对话本身就在磁盘上。 这个工具修复的症状:切换 Claude 账户后 Code 侧边栏为空或缺少会话;登录第二个账户时会话消失;你在一台 Mac 上使用两个 Claude 账户(第一个触发每周用量上限时使用的第二个 Max 或 Pro 订阅、一个工作 Team 席位加一个个人套餐),而每个账户只显示自己的历史。 相关工具。按切换时你想要的结果来选择: 启动器类工具解决的是相反的问题:它们针对的是工作账户和个人账户绝不能混用的情况。这个桥接工具针对的是两个账户做同样的工作、无论登录哪个账户都想要一份列表的情况。 sync 会把每个 <account>/<org> 文件夹收敛到同一组记录: sessions 根目录缺失或拼写错误会报错,而不是当作“无事可做”:sync 和 status 都会指出路径并以非零状态退出,而不是报告一个空的、已同步的目录树。 桌面应用在账户加载时读取自己的文件夹,并不会监视它,所以合并后的列表会在你下次切换账户或重启应用时出现——而不是在会话进行中。 无依赖、无需构建、无需安装步骤。仅使用 Python 3.9+ 标准库——这正是 macOS 在 /usr/bin/python3 已经自带的。 git clone <this repo> cd claude-code-multi-account-bridge python3 bridge.py status 用法 python3 bridge.py status # 存在什么,以及一次 sync 会改变什么 python3 bridge.py sync # 试运行(默认)——不写入任何内容 python3 bridge.py sync --execute # 先备份,再应用 python3 bridge.py sync --execute -v # ……并输出调试日志 每次运行都会打印计数——计划说应该发生什么,以及执行时实际发生了什么: sync (execute): leaves=2 records_seen=137 copies_written=11 records_deleted=2 tombstones_copied=2 parse_failures=0 blocked=0 blocked_leaves=0 ignored=0 id_mismatches=0 backup: ~/.claude-code-multi-account-bridge/backups/20260101T120000000000Z skipped=0 applied: copies_written=11 tombstones_copied=2 records_deleted=2 skipped=0 errors=0 无论是否有事情要做,status 都会打印相同的计数(以 counts: 行形式)——被阻塞的路径或无法读取的文件夹可能存在于一个完全不需要写入的目录树中,而“每个叶子都已同步”绝不能掩盖它。 plan 行(sync (...)) 表示应该发生什么;applied: 行表示实际发生了什么。工具拒绝执行的事情永远不会被隐藏: userData 按平台自动发现,并且始终可以覆盖: python3 bridge.py install-agent # 写入并加载 LaunchAgent python3 bridge.py status # ……报告它是否已加载 python3 bridge.py uninstall-agent # 卸载它并删除 plist install-agent 会写入 ~/Library/LaunchAgents/com.claude-code-multi-account-bridge.plist,其中 WatchPaths 指向 sessions 根目录、每个账户文件夹以及每个当前叶子文件夹,ThrottleInterval 为 5,并设置 StartInterval 60 作为下限(即使磁盘上没有任何变化也每分钟运行一次——在应用内切换账户不会写入任何内容,而一个已收敛的目录树运行一次不产生任何开销),运行 /usr/bin/python3 <repo>/bridge.py sync --execute --trim-logs。三个层级都会被监视,因为 launchd 是在被监视文件夹自身内容发生变化时触发的:新账户表现为根目录的变化,但已存在账户下的新 org 文件夹只表现为该账户文件夹的变化。sync 每次运行都会重新发现叶子,重新运行 install-agent 会刷新监视列表。日志落在 ~/Library/Logs/com.claude-code-multi-account-bridge.{out,err}.log。 该 agent 不会从你的代码检出目录运行脚本。launchd 启动 /usr/bin/python3 时没有你的终端所拥有的隐私授权,所以位于 /Documents、/Desktop 或 ~/Downloads 下的脚本每次运行都会失败并报 Operation not permitted(已实测)。因此 install-agent 会把 bridge.py 复制到 ~/.claude-code-multi-account-bridge/,并让任务指向那里。拉取新版本后,重新运行 install-agent 以刷新该副本。 launchd 从不轮转这两个日志文件,所以 agent 自己裁剪它们:--trim-logs 会在 agent 运行开始时,把超过 5 MB 的日志按行边界裁回到最新的 512 KB。由早期版本安装的 agent 没有这个标志——重新运行 install-agent 即可获得。 status 也会报告 agent,并检查两个方面:plist 是否在磁盘上,以及 launchd 是否真的持有该任务。一个存在但未加载的 plist 看起来像已安装,但实际上什么也不做;而 launchd 持有任务但磁盘上没有 plist 的情况在注销后不会恢复——这种情况会显示 not loaded properly - launchd has the job but there is no plist at ...,因为这是损坏的安装,而不是正常工作的安装。在 macOS 之外没有 launchd 可查询,所以答案是 unknown 而不是一个判定。 对于在任何叶子文件夹中找到的每个 session id: 试运行是默认行为。单独运行 sync 只做报告;写入需要 --execute。试运行不加锁,也不创建状态目录——它是唯一在其他进程持有锁时仍然可用的命令,这也是你了解当前状况的方式。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →