Claude Code 多设备记忆同步——Syncthing 方案实录
#ClaudeCode #Syncthing #Windows #开发环境 #服务器运维
同一用户在 Mac、N100、Windows 三台设备上使用 Claude Code CLI,各自的
~/.claude/完全独立,导致跨设备会话反复重建上下文、浪费 token。本文记录用 Syncthing 打通三端记忆层的完整方案,以及在会话中主动向同步体系注入信息的方法。
一、问题描述
Claude Code 的跨会话记忆存储在 ~/.claude/ 下,核心是各项目的 memory/ 目录:
1 | ~/.claude/ |
问题:Mac 上积累的 OpenClaw 故障排查经验、设备 IP、SSH alias 等,在 Windows 上打开新会话时完全不可见,需要重新描述背景。
二、方案设计
两步走:
步骤一(即时生效):将高频重复的设备拓扑、服务配置、协作偏好写入项目 CLAUDE.md,通过 git commit 固化。Claude Code 每次打开项目时自动读取,无需依赖记忆文件。
步骤二(持续同步):在 N100 部署 Syncthing Docker 容器作为中继节点,实时同步三端 ~/.claude/,排除凭证、会话历史等机器私有文件。
架构:
1 | MacBook (192.168.2.13) N100 (192.168.2.14) milin_desktop (192.168.2.10) |
N100 作为常驻中继,保证 Mac 和 Windows 不同时在线时也能完成同步。
三、步骤一:写入项目 CLAUDE.md
在 MyBlog/CLAUDE.md 中固化以下内容(不含敏感信息):
-
家庭网络设备 IP 与 SSH alias 对照表
-
OpenClaw 活跃配置文件路径(
data/openclaw.json)及热重载限制 -
llama-server 启动方式、端口、参数说明
-
各 Docker 服务实际端口(通过
docker ps确认) -
协作偏好(语言、commit 风格、注释原则)
关键点:CLAUDE.md 在所有打开该项目的 Claude Code 会话中自动加载,无需每次手动说明背景,效果等同于系统提示前置。
四、步骤二:部署 Syncthing
4.1 N100(Docker 容器)
/home/milin/dockerfile/syncthing/docker-compose.yml:
1 | services: |
启动:
1 | cd /home/milin/dockerfile/syncthing |
访问 Web UI(SSH 端口转发):
1 | ssh -L 8384:127.0.0.1:8384 MyUbuntuLocal |
4.2 Mac(brew 服务)
1 | brew install syncthing |
4.3 milin_desktop(Windows,winget)
1 | # SSH 到 Windows 执行 |
启动并注册开机自启(注册表 Run 键):
1 | $ST = "C:\Users\milin\AppData\Local\Microsoft\WinGet\Packages\Syncthing.Syncthing_...\syncthing.exe" |
4.4 三端配对
通过各端 Web UI(或 API)互相添加设备,共享同一个 folder(ID: claude-config):
| 设备 | 路径 | Device ID(截断) |
|---|---|---|
| MacBook | ~/.claude/ |
T6HFX5E-DLUZ3GZ-... |
| N100 | /claude-sync/ |
HSBUDEO-GSTVQAW-... |
| milin_desktop | C:\Users\milin\.claude\ |
XAQUD4K-OEMM7XQ-... |
五、.stignore 排除规则
在各端 ~/.claude/.stignore 放置以下排除规则,防止凭证和机器私有文件扩散:
1 | // Auth(绝对不同步) |
六、同步内容说明
同步(三端共享):
| 路径 | 内容 |
|---|---|
projects/*/memory/*.md |
各项目 auto-memory 文件(设备拓扑、排查经验、项目规则) |
settings.json |
全局设置(主题、权限规则等) |
plugins/ |
插件配置和 marketplace 缓存 |
plans/、todos/ |
计划和待办列表 |
不同步(机器私有):
| 路径 | 原因 |
|---|---|
.credentials.json |
各机器独立持有的 Anthropic API key |
sessions/、history.jsonl |
当前 session 对话历史,体积大且无跨设备意义 |
cache/、daemon* |
运行时临时文件 |
settings.local.json |
机器专属快捷键、本地路径配置 |
projects/*/sessions/ |
session 内消息记录 |
七、在会话中向同步体系注入信息
方式一:口头告知(最常用)
直接在会话中说「记住:xxxxx」,Claude Code 会写入当前项目的 memory 文件,Syncthing 在 30 秒内同步到其他设备。适合记录一次性发现的事实。
方式二:修改项目 CLAUDE.md
编辑 MyBlog/CLAUDE.md,适合写设备 IP、服务路径等不会变化的配置。该文件不依赖记忆系统,所有会话都能直接读取。
方式三:全局 CLAUDE.md
~/.claude/CLAUDE.md(若存在)对所有项目的所有会话生效,也会被 Syncthing 同步。适合写跨项目的用户偏好。
方式四:手动写 memory 文件
1 | cat > ~/.claude/projects/-Users-lin-Documents-MyBlog/memory/my_note.md << 'EOF' |
30 秒内自动同步到 N100 和 milin_desktop。
八、踩坑记录
初始 rsync 漏传 .credentials.json:rsync 排除规则写的是 .credentials/(目录),漏掉了同名 json 文件。已从 N100 删除,更新 .stignore 补全。
Syncthing sync-conflict 文件:首次同步时 Windows 端已有文件(settings.json、.last-cleanup),Syncthing 生成了 conflict 文件。保留 Mac 版本,手动删除 conflict 文件即可。
npm install 失败(ENOTEMPTY):Claude Code daemon 持有 claude.exe 文件句柄,npm 无法重命名旧目录。解决方案:用 npm pack 下载 tarball 后 rsync 覆写,再补装 native optional dep(@anthropic-ai/claude-code-darwin-arm64)并运行 install.cjs。
Windows Syncthing 启动需显式指定 home 目录:直接 syncthing --no-browser 不生成配置,需加 --home=C:\Users\milin\AppData\Local\Syncthing。
延伸阅读
-
《Claude Code 记忆同步进阶——canonical 软链与跨工作区 skill》(本文续篇:解决 per-encoding 路径错位、白名单 .stignore、新增 skill)
-
《RTX 5080 新主机环境配置实录》(milin_desktop 初始化,Claude Code 首次安装)
-
《5080 主机重装系统快速恢复手册》(含 Claude Code 恢复步骤)
-
《N100 自托管 OpenClaw + Hermes Agent 部署实录》(N100 Docker 环境)
