尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Claude非专业入门实战笔记(4):多台Ubuntu用软链接与工作区统一实现Claude记忆同步的TaoToken配置

Claude非专业入门实战笔记(4):多台Ubuntu用软链接与工作区统一实现Claude记忆同步的TaoToken配置 1. 多台 Ubuntu 上 Claude 记忆不同步到底卡在哪如果你手上有两台以上 Ubuntu 机器一台在实验室、一台在宿舍、一台在云主机大概率会遇到这个场景在 A 机器上让 Claude Code 改了一半的论文换到 B 机器打开同一个项目对话历史没了、CLAUDE.md 里刚加的规则没生效、连之前让它记住的偏好都像失忆一样。这不是 Claude 坏了而是它的「记忆」本来就分散在几个不同的文件里每台机器各存各的。Claude Code 的记忆体系其实分两层一层是项目目录里的.claude/和CLAUDE.md另一层是主目录下的~/.claude/和~/.claude.json。前者跟着项目走后者跟着用户走。问题就出在后者——~/.claude/projects/里存着每个项目的对话历史~/.claude.json里存着 OAuth 状态、UI 开关、个人 MCP 配置。你在 A 机器聊了一下午这些内容全落在 A 的~/.claude/里B 机器根本看不到。我试过最直接的思路把整个工作区放到云盘然后每台机器都指向它。但云盘同步有延迟Claude 写文件的时候如果云盘正在上传容易读到半截文件。后来换成软链接方案——把~/.claude和~/.claude.json都软链到工作区目录下工作区本身再用 Git 私密仓库或局域网共享同步。这样 Claude 读写的永远是同一份物理文件多台机器看到的就是同一份记忆。这套方案适合谁适合手上有 2 到 5 台 Ubuntu 设备、经常在不同机器间切换同一个项目、又不想每次手动导出导入对话记录的人。不适合只在一台机器上写代码的人也不适合项目路径经常变的人——因为对话历史里存的是绝对路径路径一变就找不到文件。还有一个容易被忽略的点Claude Code 的 API 通道。多台机器如果各自配各自的 Key额度分散、账单分散排查问题也麻烦。用 TaoToken 统一一个 Key 走同一个 API 通道配合软链接同步才是完整的「跨机记忆 跨机调用」方案。下面从环境准备开始一步步把这条链路搭起来。2. TaoToken 前置准备统一 Key 与 API 通道在动软链接之前先把 API 通道统一掉。原因很简单软链接同步的是「记忆」但记忆里如果混着不同机器的 Key 和 Base URL同步过去反而会互相覆盖。统一用 TaoToken 的 Key所有机器读同一份配置就不会出现 A 机器能跑、B 机器 401 的情况。TaoToken 在这里的角色是统一的大模型 API 入口。你不需要在每台 Ubuntu 上分别去各家厂商申请 Key只需要一个 TaoToken 的 Key就能通过同一个 Base URL 调用 Claude 系列模型。对多机场景来说这省掉的是「每台机器都要重新配一遍环境变量」的重复劳动。先注册并拿到 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 列表在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。创建的时候建议起个能认出来的名字比如ubuntu-multi-sync方便以后多台机器共用一个 Key 时排查。拿到 Key 之后先确认你要用的模型 ID。Claude Code 场景下常用的是 Claude 系列模型具体可用的模型 ID 在模型对话页面能看到https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。记下你选定的 Model ID后面写进 settings.json 要用。API 的基础地址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 Base URL 使用。如果你用的是 Anthropic 兼容协议Claude Code 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 Base URL 和鉴权头的写法。Claude Code 专用的接入说明在 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 如果你后面要跑 Agent 或长期编码任务Coding Plan 的说明在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。这里有个关键决策Key 放在哪。因为我们要把~/.claude软链到工作区而工作区可能会用 Git 同步所以 Key 绝对不能明文提交到公开仓库。两个做法一是用私密仓库二是把 Key 放在环境变量里settings.json 里只引用变量名。我推荐后者下面配置章节会给出具体写法。前置准备做完你应该手上有三样东西一个 TaoToken Key、一个确定的 Model ID、一个确定的工作区绝对路径。工作区路径建议所有机器保持一致比如都用/home/你的用户名/workspace用户名也尽量一致原因在下一章会讲。3. 可复制配置软链接命令与工作区目录结构这一章是核心所有命令都可以直接复制。先明确目标把~/.claude和~/.claude.json从主目录「搬」到工作区然后在主目录建软链接指回去。这样 Claude 读写主目录路径时实际落到的是工作区文件多台机器同步工作区就等于同步记忆。第一步确认工作区路径。假设你的工作区是/home/pcie/workspace先进入主目录看看现状cd ~ ls -la | grep claude你应该能看到.claude目录和.claude.json文件。先备份一份防止操作失误cp -r ~/.claude ~/.claude.bak cp ~/.claude.json ~/.claude.json.bak第二步把配置复制到工作区。注意这里用cp -r保留目录结构复制完一定要检查内容是否完整cp -r ~/.claude /home/pcie/workspace/ cp ~/.claude.json /home/pcie/workspace/ ls -la /home/pcie/workspace/.claude ls -la /home/pcie/workspace/.claude.json确认工作区里的.claude目录下有projects/、sessions/、settings.json这些内容.claude.json文件大小和原来一致。这一步如果复制不全后面软链接过去就是空的Claude 会重新初始化记忆就丢了。第三步删除主目录下的原配置建软链接。软链接的目标必须是绝对路径rm -rf ~/.claude rm -f ~/.claude.json ln -s /home/pcie/workspace/.claude ~/.claude ln -s /home/pcie/workspace/.claude.json ~/.claude.json第四步验证软链接是否生效ll ~/.claude*正常输出应该是这样的lrwxrwxrwx 1 pcie pcie 53 Aug 12 17:06 /home/pcie/.claude - /home/pcie/workspace/.claude/ lrwxrwxrwx 1 pcie pcie 58 Aug 12 17:06 /home/pcie/.claude.json - /home/pcie/workspace/.claude.json看到箭头指向工作区就对了。这一步每台需要同步的 Ubuntu 都要做少做一台那台就是独立的记忆不会跟其他机器共享。接下来配置 TaoToken 接入。Claude Code 读取的 settings.json 有两个位置项目级的.claude/settings.json和全局的~/.claude/settings.json。因为我们把~/.claude软链到了工作区所以全局配置实际写在工作区的.claude/settings.json里。用编辑器打开nano /home/pcie/workspace/.claude/settings.json写入以下内容注意把你的Key和你的ModelID替换成实际值{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: 你的Key, ANTHROPIC_MODEL: 你的ModelID }, permissions: { allow: [], deny: [] } }如果你不想把 Key 明文写在文件里可以改成引用环境变量。先在~/.bashrc里加一行export TAOTOKEN_API_KEY你的Key然后 settings.json 里写成{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: ${TAOTOKEN_API_KEY}, ANTHROPIC_MODEL: 你的ModelID } }这样即使工作区被同步到别的机器只要那台机器也设了同名环境变量就能正常调用。三件套 Base URL、Key、Model ID 一个都不能少缺哪个都会报错。工作区目录结构建议统一成下面这样所有机器保持一致/home/pcie/workspace/ ├── .claude/ │ ├── projects/ # 对话历史按项目路径分目录 │ ├── sessions/ # 会话状态 │ ├── settings.json # 全局配置含 TaoToken 接入 │ └── ... ├── .claude.json # 全局状态、OAuth、UI 开关 ├── CLAUDE.md # 全局指令 ├── settings.json # 项目级配置 └── Paper_LaTeX/ # 实际项目目录这里有个坑要提前说.claude/projects/里的目录名是按项目绝对路径生成的里面还包含用户名。比如 A 机器上叫-home-pcie-workspace-Paper_LaTeXB 机器如果用户名是ubuntu就会变成-home-ubuntu-workspace-Paper_LaTeX。目录结构一样但用户名不一样Claude 就认不出这是同一个项目对话历史对不上。解决办法是手动把两边的目录名改成一致或者干脆所有机器用同一个用户名。这是整个方案里最容易翻车的地方下一章验证时会具体演示怎么查。4. 验证请求与多机同步结果配置写完先在本机验证 TaoToken 通道能不能通。最直接的方式是用 curl 打一次 APIcurl https://taotoken.net/api/v1/messages \ -H x-api-key: 你的Key \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: 你的ModelID, max_tokens: 64, messages: [{role: user, content: 回复 ok 两个字母}] }如果返回里有content字段且内容是ok说明 Key、Base URL、Model ID 三件套都对。如果返回 401说明 Key 有问题如果返回 model not found说明 Model ID 写错了。这一步过了再进 Claude Code 验证。进入工作区启动 Claude Codecd /home/pcie/workspace claude在对话里输入/status看它显示的 API 端点和模型。如果显示的是https://taotoken.net/api和你配置的 Model ID说明 Claude Code 已经走 TaoToken 通道了。再随便问一句能正常流式返回就说明链路通了。接下来验证记忆同步。在 A 机器上做两件事一是让 Claude 记住一个偏好比如「以后回答都用中文」二是在某个项目里聊几句产生对话历史。然后退出 Claude检查工作区里的文件ls -la /home/pcie/workspace/.claude/projects/ cat /home/pcie/workspace/.claude.json | head -20你应该能看到projects/下多了一个以项目路径命名的目录里面是.jsonl格式的对话记录。.claude.json里也能看到最近的项目记录。现在把这台机器的工作区同步到 B 机器。如果你用 Git 私密仓库cd /home/pcie/workspace git add .claude .claude.json CLAUDE.md settings.json git commit -m sync claude memory git pushB 机器上cd /home/pcie/workspace git pull如果你用局域网共享或云盘直接复制整个工作区目录即可。同步完在 B 机器上启动 Claude输入/status确认通道然后问它「我之前让你记住什么了」。如果它能答出「用中文回答」说明记忆同步成功。但这里大概率会遇到路径不匹配的问题。检查 B 机器上的 projects 目录名ls /home/pcie/workspace/.claude/projects/如果 A 机器生成的是-home-pcie-workspace-Paper_LaTeX而 B 机器因为用户名不同生成的是-home-ubuntu-workspace-Paper_LaTeXClaude 在 B 机器上打开Paper_LaTeX项目时会去找-home-ubuntu-workspace-Paper_LaTeX这个目录找不到就当成新项目历史对话就丢了。解决办法是手动重命名cd /home/pcie/workspace/.claude/projects/ mv -home-ubuntu-workspace-Paper_LaTeX -home-pcie-workspace-Paper_LaTeX更彻底的做法是所有机器统一用户名和工作区路径。如果做不到就在每次同步后检查一遍 projects 目录名把不一致的改过来。这个操作不复杂但漏一次就会丢一次历史。验证成功后你可以在 A 机器改文件、聊对话同步到 B 机器B 机器上的 Claude 能看到同样的上下文。这就是「登录一个账号、所有问答记录共享」的效果只不过是用软链接和统一工作区自己搭出来的。5. 本篇常见错排查401、路径不匹配与软链接失效这一章把实际会撞到的报错列出来对照着查。报错一401 Unauthorized 或 invalid api key这是最常见的。先确认 Key 有没有写对注意不要有多余空格。用 curl 单独测一次curl -I https://taotoken.net/api/v1/messages \ -H x-api-key: 你的Key \ -H anthropic-version: 2023-06-01如果 curl 也 401说明 Key 本身有问题去控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 重新生成一个。如果 curl 通了但 Claude Code 还 401说明 settings.json 没被读到。检查文件路径cat /home/pcie/workspace/.claude/settings.json确认ANTHROPIC_AUTH_TOKEN字段存在且值正确。注意 Claude Code 读的是~/.claude/settings.json而~/.claude是软链接所以实际读的是工作区里的那份。如果软链接断了Claude 会去读一个不存在的路径配置就丢了。报错二local proxy failed 或 connection refused这个通常出现在你之前配过本地代理环境变量里还留着HTTP_PROXY或HTTPS_PROXY。检查env | grep -i proxy如果有输出在~/.bashrc里把这些变量注释掉然后source ~/.bashrc。TaoToken 的 API 地址是直连的不需要走本地代理。另外确认 Base URL 写的是https://taotoken.net/api不要多加/v1或结尾斜杠Claude Code 会自己拼路径。报错三reading choices 相关解析错误这个一般出现在流式响应解析阶段原因可能是 Model ID 写错或者用了不兼容的模型。确认你填的 Model ID 在模型列表里存在https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。另外检查 settings.json 里ANTHROPIC_MODEL的值有没有拼写错误大小写敏感。报错四OAuth 相关提示或反复要求登录Claude Code 有时会尝试走 OAuth 登录流程。如果你已经用 API Key 配置了还在提示 OAuth说明.claude.json里的状态和 settings.json 冲突。检查.claude.json里有没有残留的 OAuth 字段或者直接删掉.claude.json让它重新生成rm /home/pcie/workspace/.claude.json注意删之前确认软链接还在删的是工作区里的文件。重新启动 Claude 后它会生成新的.claude.json再同步到其他机器。报错五软链接失效~/.claude变成普通目录有时候 Claude 或某些操作会把软链接替换成真实目录。检查ls -la ~/.claude如果显示的是drwxr-xr-x而不是lrwxrwxrwx说明软链接被替换了。重新建rm -rf ~/.claude ln -s /home/pcie/workspace/.claude ~/.claude同样检查~/.claude.json。这个坑在多机同步时特别隐蔽因为一台机器软链接断了它的记忆就独立了但表面上 Claude 还能正常跑直到你发现对话历史对不上。报错六projects 目录名不匹配导致历史丢失前面提过这里再强调一次。检查方法ls /home/pcie/workspace/.claude/projects/对比两台机器的输出如果目录名里的用户名或路径不同手动改成一致。改完之后 Claude 就能认出来了。如果你经常换机器建议写个脚本在同步后自动检查并重命名。排查顺序建议先 curl 测 Key再查 settings.json 路径再查软链接最后查 projects 目录名。大部分问题出在前两步路径和软链接的问题占剩下的大半。6. 跨机调用与长期编码的 CTA 分流软链接和统一工作区解决的是「记忆同步」TaoToken 解决的是「调用通道统一」。两者配合起来多台 Ubuntu 上的 Claude 才真正像同一个账号。如果你只是偶尔在几台机器间切换把上面的配置跑通就够了。如果你后面要在多台机器上跑长期编码任务或 Agent建议看一下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它适合那种需要持续调用、额度消耗比较大的场景比按次调用更划算。日常验证模型是否正常或者临时问几个问题用模型对话页面就行https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。接入过程中遇到报错先翻接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite Claude Code 专用的说明在 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。Key 的管理和重新生成在控制台https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。最后说一个实际经验软链接方案最怕的是「同步冲突」。如果两台机器同时改同一个.claude.jsonGit 合并时会冲突。我的做法是尽量不在两台机器上同时开 Claude切换机器前先 commit 并 push到另一台先 pull 再启动。这样虽然笨但不会丢数据。如果你用云盘同步注意云盘的冲突文件命名规则看到xxx (冲突).json这种文件要手动处理别直接删。
返回列表