Featured image of post 痛,在 Claude Code 配置目录被误删之后

痛,在 Claude Code 配置目录被误删之后

手误 rm -rf 掉 Claude Code 配置目录后,靠 VS Code 缓存找回一部分;也顺便记录两点教训:用 rmtrash 防误删,把配置抽离成独立仓库并用 launchd + rsync 自动同步。

昨天手误 rm -rf ~/.claude,把 Claude Code 的整个配置目录删了——CLAUDE.md、MCP 配置、settings、自定义 skills,几乎全部归零。后来靠 VS Code 的缓存找回了一部分,但也只够勉强止损。

非常痛,吸取教训,做了两件事。

用 rmtrash 替代 rm

安装 rmtrash,让 rm 变为移到废纸篓而非直接删除:

1
brew install rmtrash

~/.zshrc 中加入 alias:

1
2
alias rm='rmtrash'
alias rmdir='rmdirtrash'

这样即使再次误删,也能从废纸篓恢复。

创建配置仓库

将需要版本管理的配置文件抽取到独立仓库,通过同步机制映射回各工具期望的路径。

仓库结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
claude-config/
├── claude/               # Claude Code 配置
│   ├── CLAUDE.md
│   ├── settings.json
│   └── mcp.json
├── codebuddy/            # CodeBuddy Code 配置
│   ├── CODEBUDDY.md
│   ├── AGENTS.md
│   ├── settings.json
│   └── mcp.json
├── rules/                # 共享规则(两个工具复用)
├── skills/               # 共享 skills(两个工具复用)
├── sync.conf             # 同步规则声明
└── sync.sh               # 同步脚本(含 launchd agent 管理)

核心设计

配置分离,规则共享claude/codebuddy/ 各自维护独立的 settings 和 MCP 配置,但 rules/skills/ 目录两者共享。

同步方案(sync.sh)

Claude Code / CodeBuddy 使用原子写入(write-file-atomic)保存配置文件——写临时文件再 rename 覆盖目标。这会破坏硬链接和文件级软链接。因此配置文件不使用链接,改为 launchd WatchPaths + 双向 rsync 实现自动同步。

sync.conf 用简单的 DSL 声明两种同步关系:

  • [sync] — 文件双向同步,按 mtime 判断方向,较新者覆盖较旧者
  • [link] — 目录软链接(rules/skills/),不受原子写入影响

用法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 手动执行一次同步
bash sync.sh

# 安装 launchd agent(文件变更自动触发同步)
bash sync.sh install

# 查看 agent 状态
bash sync.sh status

# 卸载 agent
bash sync.sh uninstall

安装后,任何被监听文件的变更都会在 3 秒内自动触发双向同步,零人工干预。

日志位于 ~/Library/Logs/claude-config/sync.log

主题 StackJimmy 设计