#ClaudeCode #Syncthing #开发环境 #服务器运维

上一篇用 Syncthing 打通了三端 ~/.claude/,但直接同步各工作区的 memory/ 目录会遇到一个坑:不同设备的工作区路径编码不一样。本文记录把记忆层重构成 canonical _shared/ + 软链、把 .stignore 从黑名单改成白名单,并新增两个跨工作区 skill 与记忆治理约定的过程——一次完整的"开发环境梳理"。


一、上一版留下的坑:per-encoding 路径错位

Claude Code 把每个工作区的记忆存在 projects/<路径编码>/memory/ 下,而路径编码含绝对路径

  • Mac:projects/-Users-lin-infra/memory/

  • Windows:projects/C--Users-milin-infra/memory/

同一个 ~/infra 工作区,两台机器编码不同。若直接同步 projects/*/memory,两端各写各的目录,记忆根本对不上,同步等于白做。


二、方案:canonical _shared/ + 软链/junction

把真实记忆文件收敛到一个与设备无关的规范目录,各工作区的 memory 只做符号链接指过去:

1
2
3
4
5
6
~/.claude/projects/
_shared/infra/memory/ ← canonical,真实文件,唯一被同步
MEMORY.md
reference-*.md / project-*.md / feedback-*.md
-Users-lin-infra/memory → _shared/infra/memory (Mac: symlink)
C--Users-milin-infra/memory → _shared/infra/memory (Win: junction)

只同步 _shared/**(真实文件),软链本身不同步。这样绕开了路径编码差异——两端各自的软链指向本地同一个 canonical 目录,内容天然一致。

验证是否落到 canonical:

1
2
readlink -f ~/.claude/projects/-Users-lin-infra/memory
# → /Users/lin/.claude/projects/_shared/infra/memory

三、.stignore 从黑名单改白名单

上一版是黑名单(逐条排除凭证/缓存),隐患是:将来任何新文件(含新凭据)默认会被同步出去。改成白名单(默认拒绝,! 显式放行)后,新文件默认不出本机,要共享才主动加行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// WHITELIST 模式:最后一行 * 之前,没被 ! 放行的一切都不同步
!/CLAUDE.md
!/settings.json
!/plans
!/plans/**
!/plugins/installed_plugins.json
!/plugins/known_marketplaces.json
// 跨设备记忆:只同步 canonical 共享目录
!/projects/_shared
!/projects/_shared/**
// 个人 skills:跨工作区共享
!/skills
!/skills/**
!/.stignore
// 忽略其它一切(含 .credentials.json / sessions / cache / *.sync-conflict-*)
*

安全姿态从"记得排除敏感文件"变成"默认什么都不外泄",更符合最小权限。


四、自检:回执标记验证双向同步

在 canonical 目录放一份 SYNC-CHECK.md,任一设备的 ~/infra 会话跑一段验证 prompt,核对软链落点并追加一行回执

1
2
## 回执标记
- MiLin-MacbookAir | 2026-07-23 | Mac | /Users/lin/.claude/projects/_shared/infra/memory

判定:memory 解析到 _shared能看到另一台设备之前追加的回执行 = 双向同步成功。看不到 → 查 .stignore md5 是否一致、junction 是否建、Syncthing 是否在跑。


五、新增同步产物:跨工作区 skill

个人 skill(~/.claude/skills/)在任意工作区的会话都可见,很适合放"跨项目的做事规范"。把 skills/ 也纳入白名单后,两个 skill 随记忆一起跨设备:

blog-post——解决"大多数写博客的会话不在博客工作区里"的问题。博客的写作流程与脱敏规则原本写在博客仓库 CLAUDE.md,只有在博客工作区才自动加载。该 skill 让任意会话在落盘博文前,先读当前设备博客 CLAUDE.md 的权威规则,并内联硬性脱敏底线(Key/Token/账号绝不写),读不到就停手。

memory-audit——记忆多了会有错的/过期的/重复的。该 skill 按四类信号打分:可证伪(point 到的文件/服务/端口去实时核对)、重复(与 CLAUDE.md 或其它记忆重叠)、出处/置信(是否单次推断)、过期lastConfirmed 超阈值),输出 KEEP/FIX/MERGE/DELETE 清单,确认后清理。注意:本系统没有记忆调用计数,所以不假装能测"使用频率",用置信+重复+可证伪当代理指标。


六、记忆治理约定

  • frontmatter 加两个字段:source(出处,排信任度用)、lastConfirmed(上次真正复核日期)。

  • 诚实红线:不给没核对过的记忆乱盖当天 lastConfirmed——那等于谎报已验证。

  • 清理示例:一条"运维只给内联命令、不建 .sh"的偏好,因语义已被工作区 CLAUDE.md 的"不新建抽象"覆盖(记忆准则:不记 repo/CLAUDE.md 已有的),判为重复直接删。


延伸阅读