|
| 1 | +# Claude 配置与工具说明 |
| 2 | + |
| 3 | +这个目录承载本仓库里与 Claude Code 相关的配置、同步脚本、文档和本地 Skill 开发入口。 |
| 4 | + |
| 5 | +如果你只想知道怎么开始,用最短路径: |
| 6 | + |
| 7 | +1. 在 `ai/coding/claude/config/settings.local.json` 写入本机 secrets 或 provider 覆盖。 |
| 8 | +2. 运行 `pwsh -NoProfile -File ./ai/coding/claude/Sync-ClaudeConfig.ps1`。 |
| 9 | +3. 让脚本生成并更新 `~/.claude/settings.json`,以及同步受管共享资产。 |
| 10 | + |
| 11 | +## 目录说明 |
| 12 | + |
| 13 | +```text |
| 14 | +ai/coding/claude/ |
| 15 | +├── .claude/ # 受管共享资产源,不是最终运行目录 |
| 16 | +├── config/ |
| 17 | +│ ├── settings.json # 可提交的共享模板 |
| 18 | +│ └── settings.local.json # 本机私有覆盖(可选,不提交 Git) |
| 19 | +├── docs/ # Claude 相关说明与备忘 |
| 20 | +├── skills-dev/ # 本地开发中的 Skill 源目录 |
| 21 | +├── Sync-ClaudeConfig.ps1 # 配置生成与共享资产同步入口 |
| 22 | +├── Manage-ClaudeSkills.ps1 # Skill 安装 / 卸载 / 导出 / watch 工具 |
| 23 | +└── install.ps1 # 当前保留的快捷安装入口 |
| 24 | +``` |
| 25 | + |
| 26 | +## 当前配置模型 |
| 27 | + |
| 28 | +本仓库采用的是“两层源 + 一层生成产物”的模型: |
| 29 | + |
| 30 | +### 1. 共享模板 |
| 31 | + |
| 32 | +文件:`ai/coding/claude/config/settings.json` |
| 33 | + |
| 34 | +这里放: |
| 35 | + |
| 36 | +- 团队共享的默认权限 |
| 37 | +- 非敏感 `env` 默认值 |
| 38 | +- 默认模型、状态栏、插件开关 |
| 39 | +- 适合提交审阅的长期配置 |
| 40 | + |
| 41 | +这里不应放: |
| 42 | + |
| 43 | +- `ANTHROPIC_API_KEY` |
| 44 | +- `ANTHROPIC_BASE_URL` |
| 45 | +- 任何 token / secret / password |
| 46 | + |
| 47 | +### 2. 本机覆盖 |
| 48 | + |
| 49 | +文件:`ai/coding/claude/config/settings.local.json` |
| 50 | + |
| 51 | +这是可选文件,不提交 Git。这里适合放: |
| 52 | + |
| 53 | +- API key |
| 54 | +- 本机代理 / router 地址 |
| 55 | +- 临时模型切换 |
| 56 | +- 个人偏好覆盖 |
| 57 | + |
| 58 | +示例: |
| 59 | + |
| 60 | +```json |
| 61 | +{ |
| 62 | + "env": { |
| 63 | + "ANTHROPIC_API_KEY": "sk-ant-...", |
| 64 | + "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456" |
| 65 | + }, |
| 66 | + "model": "opus[1m]" |
| 67 | +} |
| 68 | +``` |
| 69 | + |
| 70 | +### 3. 生成产物 |
| 71 | + |
| 72 | +文件:`~/.claude/settings.json` |
| 73 | + |
| 74 | +这是最终生效配置,由 `Sync-ClaudeConfig.ps1` 生成。不要把它当成长期手改入口。 |
| 75 | + |
| 76 | +如果要改行为,优先改: |
| 77 | + |
| 78 | +- 共享默认值:`config/settings.json` |
| 79 | +- 本机差异:`config/settings.local.json` |
| 80 | + |
| 81 | +而不是直接改 `~/.claude/settings.json`。 |
| 82 | + |
| 83 | +## 合并规则 |
| 84 | + |
| 85 | +`Sync-ClaudeConfig.ps1` 会按下面的规则合并 shared template 与 local override: |
| 86 | + |
| 87 | +- 标量:local 覆盖 shared |
| 88 | +- 对象:深度合并 |
| 89 | +- 数组:拼接后按内容去重 |
| 90 | + |
| 91 | +这意味着你只需要在 `settings.local.json` 里声明差异项,不需要复制整个对象。 |
| 92 | + |
| 93 | +例如: |
| 94 | + |
| 95 | +- 只想补一个 `env.ANTHROPIC_API_KEY` |
| 96 | +- 只想把某个 `enabledPlugins.xxx` 改成 `true` |
| 97 | +- 只想覆盖 `model` |
| 98 | + |
| 99 | +都只写这些字段即可。 |
| 100 | + |
| 101 | +## `Sync-ClaudeConfig.ps1` 做了什么 |
| 102 | + |
| 103 | +运行命令: |
| 104 | + |
| 105 | +```powershell |
| 106 | +pwsh -NoProfile -File ./ai/coding/claude/Sync-ClaudeConfig.ps1 |
| 107 | +``` |
| 108 | + |
| 109 | +脚本会做这些事: |
| 110 | + |
| 111 | +1. 读取 `config/settings.json` |
| 112 | +2. 读取可选的 `config/settings.local.json` |
| 113 | +3. 检查共享模板里是否误放了明显的 secrets |
| 114 | +4. 生成最终的 `~/.claude/settings.json` |
| 115 | +5. 同步 `.claude/` 下的受管共享资产到真实的 `~/.claude` |
| 116 | + |
| 117 | +### 在新机器上执行 |
| 118 | + |
| 119 | +如果机器上还没有 `~/.claude`: |
| 120 | + |
| 121 | +- 不会创建软连接 |
| 122 | +- 会直接创建真实目录 `~/.claude` |
| 123 | +- 会生成 `~/.claude/settings.json` |
| 124 | +- 会把受管共享资产复制进去 |
| 125 | + |
| 126 | +### 在已有 `~/.claude` 的机器上执行 |
| 127 | + |
| 128 | +如果 `~/.claude` 已经存在: |
| 129 | + |
| 130 | +- `~/.claude/settings.json` 会被重新生成并覆盖 |
| 131 | +- 受管共享资产会按白名单覆盖更新 |
| 132 | +- 非受管运行态文件会尽量保留 |
| 133 | + |
| 134 | +### 在旧软连接机器上执行 |
| 135 | + |
| 136 | +如果之前是旧模式: |
| 137 | + |
| 138 | +```text |
| 139 | +~/.claude -> repo/.claude |
| 140 | +``` |
| 141 | + |
| 142 | +脚本会: |
| 143 | + |
| 144 | +1. 先做备份 |
| 145 | +2. 删除旧软连接 |
| 146 | +3. 创建真实的 `~/.claude` 目录 |
| 147 | +4. 恢复备份内容 |
| 148 | +5. 再写入生成的 settings 和受管资产 |
| 149 | + |
| 150 | +也就是说,当前脚本的目标是**结束整目录软连接模式**,回到真实的用户配置目录。 |
| 151 | + |
| 152 | +## 会同步哪些文件 |
| 153 | + |
| 154 | +当前受管白名单包括: |
| 155 | + |
| 156 | +- `CLAUDE.md` |
| 157 | +- `config.json` |
| 158 | +- `commands/*.md` |
| 159 | +- `output-styles/*.md` |
| 160 | +- `ccline/config.toml` |
| 161 | +- `ccline/models.toml` |
| 162 | +- `ccline/themes/*.toml` |
| 163 | +- `skills/**/*.md` |
| 164 | + |
| 165 | +同步后目标目录里还会写一个内部清单: |
| 166 | + |
| 167 | +- `.sync-manifest.json` |
| 168 | + |
| 169 | +这个文件用于记录“哪些文件是脚本管理的”,方便后续清理仓库里已经删除的旧受管文件。 |
| 170 | + |
| 171 | +## 不会主动管理哪些内容 |
| 172 | + |
| 173 | +这些通常属于 Claude 运行时生成内容,不作为仓库共享配置管理: |
| 174 | + |
| 175 | +- `history.jsonl` |
| 176 | +- `debug/` |
| 177 | +- `sessions/` |
| 178 | +- `transcripts/` |
| 179 | +- `projects/` |
| 180 | +- 其他缓存、锁文件、统计文件 |
| 181 | + |
| 182 | +因此: |
| 183 | + |
| 184 | +- 仓库负责“共享配置和共享资产” |
| 185 | +- `~/.claude` 负责“真实运行时状态” |
| 186 | + |
| 187 | +## 推荐使用流程 |
| 188 | + |
| 189 | +### 场景 1:首次配置 |
| 190 | + |
| 191 | +1. 准备 `config/settings.local.json` |
| 192 | +2. 运行 `Sync-ClaudeConfig.ps1` |
| 193 | +3. 启动 Claude |
| 194 | +4. 让 Claude 自己生成运行态目录和历史文件 |
| 195 | + |
| 196 | +### 场景 2:更新共享默认配置 |
| 197 | + |
| 198 | +1. 修改 `config/settings.json` |
| 199 | +2. 提交到仓库 |
| 200 | +3. 在目标机器运行 `Sync-ClaudeConfig.ps1` |
| 201 | + |
| 202 | +### 场景 3:只改本机 secrets 或 router |
| 203 | + |
| 204 | +1. 修改 `config/settings.local.json` |
| 205 | +2. 重新运行 `Sync-ClaudeConfig.ps1` |
| 206 | + |
| 207 | +### 场景 4:切换到新机器 |
| 208 | + |
| 209 | +1. 拉取仓库 |
| 210 | +2. 新建本机 `config/settings.local.json` |
| 211 | +3. 运行 `Sync-ClaudeConfig.ps1` |
| 212 | + |
| 213 | +## `Manage-ClaudeSkills.ps1` 用来做什么 |
| 214 | + |
| 215 | +这个脚本主要服务于 `skills-dev/` 目录中的本地 Skill 开发。 |
| 216 | + |
| 217 | +它支持: |
| 218 | + |
| 219 | +- 查看 Skill 列表 |
| 220 | +- 安装 / 更新 Skill 到 `.claude/skills` |
| 221 | +- 卸载 Skill |
| 222 | +- watch 模式同步 |
| 223 | +- 导出 Skill 压缩包 |
| 224 | + |
| 225 | +交互式运行: |
| 226 | + |
| 227 | +```powershell |
| 228 | +pwsh -NoProfile -File ./ai/coding/claude/Manage-ClaudeSkills.ps1 |
| 229 | +``` |
| 230 | + |
| 231 | +也可以传动作参数,例如: |
| 232 | + |
| 233 | +```powershell |
| 234 | +pwsh -NoProfile -File ./ai/coding/claude/Manage-ClaudeSkills.ps1 -Action List |
| 235 | +pwsh -NoProfile -File ./ai/coding/claude/Manage-ClaudeSkills.ps1 -Action Install -SkillName my-skill |
| 236 | +``` |
| 237 | + |
| 238 | +注意:这个脚本当前把 `ai/coding/claude/.claude/skills` 当作 Skill 的目标目录,也就是“仓库里的受管共享资产源”,而不是直接写入用户真实的 `~/.claude/skills`。要让这些 Skill 最终进入用户目录,仍然要再跑一次 `Sync-ClaudeConfig.ps1`。 |
| 239 | + |
| 240 | +## 常见问题 |
| 241 | + |
| 242 | +### 1. 为什么 `settings.local.json` 没提交? |
| 243 | + |
| 244 | +因为这是本机私有覆盖层,通常会包含 secrets 或个人差异配置,不应该进 Git。 |
| 245 | + |
| 246 | +### 2. 为什么不能直接改 `~/.claude/settings.json`? |
| 247 | + |
| 248 | +因为它是生成产物。你下次跑 sync 时,这个文件会被重新写出。 |
| 249 | + |
| 250 | +### 3. 我只想走 router,不想在模板里放 `ANTHROPIC_BASE_URL` |
| 251 | + |
| 252 | +把它放到 `config/settings.local.json` 即可。共享模板应该只保留安全的默认值。 |
| 253 | + |
| 254 | +### 4. 如果共享模板里不小心放了 key 会怎样? |
| 255 | + |
| 256 | +`Sync-ClaudeConfig.ps1` 会在写入前直接报错并阻止生成,提醒你把敏感内容移到 `config/settings.local.json`。 |
| 257 | + |
| 258 | +### 5. 我的 `~/.claude/skills` 里有自己手加的内容,会被删吗? |
| 259 | + |
| 260 | +脚本只管理白名单和它自己记录过的受管文件。额外的非受管内容通常会保留。 |
| 261 | + |
| 262 | +## 相关文档 |
| 263 | + |
| 264 | +- `ai/coding/claude/docs/config.md` |
| 265 | +- `ai/coding/claude/docs/CLAUDE_CODE_CHEATSHEET.md` |
| 266 | +- `ai/coding/claude/docs/CLAUDE_CODE_ADVANCED_FEATURES.md` |
| 267 | +- `ai/coding/claude/docs/CLAUDE_CODE_AGENT_SKILL_CHEATSHEET.md` |
| 268 | +- `ai/coding/claude/docs/CLAUDE_CODE_SUB_AGENT_CHEATSHEET.md` |
| 269 | +- `ai/coding/claude/docs/CLAUDE_CODE_WORKFLOW_CHEATSHEET.md` |
0 commit comments