dsh-config-synclisted
Install: claude install-skill ooooooooooooooooooop/agent-tools
# DSH 配置同步(dsh-config-sync)
## 使用场景
当你想在另一台设备上复用本机的 DSH 用户配置,或把当前配置生成一份可追溯的脱敏归档时触发。它负责 `~/.dsh/` 下**配置类文件**(偏好、模型路由、预设)的安全打包与恢复。
职责边界很重要:**技能栈的同步交给 `environment-bootstrap`**,本 skill 只管 DSH 配置本体。
## 纳入与排除清单
对 `$DSH_HOME`(默认为 `~/.dsh`,可用 `$env:DSH_HOME` 覆盖)做如下归类:
| 路径 | 类型 | 处理 |
|---|---|---|
| `AGENTS.md` | 文件 | ✅ 纳入(用户全局偏好,纯文本无敏感) |
| `settings.yaml` | 文件 | ✅ 纳入(仅含 provider/model 与 `apiKeyEnv` 环境变量名,无明文密钥) |
| `profiles/` | 目录 | ⚠️ 可选(需显式指定才纳入) |
| `.agent-presets/` | 目录 | ⚠️ 可选 |
| `patches/` | 目录 | ⚠️ 可选 |
| `.credentials.yaml` | 文件 | ❌ **强制排除**(真实凭据,打进公开仓库即泄密) |
| `sessions/`storages/` | 目录 | ❌ **强制排除**(运行时态,仓库硬约束禁止) |
| `skills/` | 目录 | ⛔ 不归本 skill,交给 `environment-bootstrap` |
## 安全边界
- **凭据绝不出包**:`.credentials.yaml` 和任何可能含明文密钥的路径,打包含前必须显式排除并由校验确认不存在。
- **settings.yaml 只携带环境变量引用**:`apiKeyEnv: BAI_API_KEY` 这样的条目是“环境变量名”,换设备时由目标端设置同名环境变量即可,不在包内放任何密钥值。
- 不通过恢复删除目标端额外文件;旧/未登记的配置文件应单独审查。
- 不隐式安装插件、MCP、包、hooks 或全局配置。
- 不以旧目标文件、stdout 或 apply exit code 单独作为成功证据。
- 回滚应从已知稳定归档/提交重新复制,不使用递归删除。
## 模板渲染(跨设备路径适配)
导出时加 `--template` 自动将已知设备路径替换为占位符,恢复时渲染回目标设备值:
| 占位符 | 替换场景 | 示例 |
|---|---|---|
| `{{DSH_HOME}}` | `~/.dsh` 目录下的任何路径 | `C:\Users\<user>\.dsh\profiles\web` → `{{DSH_HOME}}\profiles\web` |
| `{{DESKTOP}}` | 桌面路径(含 Windows 双反斜杠形式) | `C:\Users\<user>\Desktop\work` → `{{DESKTOP}}\work` |
| `{{HOME}}` | 用户主目录 | `C:\Users\<user>\` → `{{HOME}}\` |
> 替换顺序按最长优先,防止嵌套路径(如 `{{DSH_HOME}}` 在 `{{HOME}}` 之前替换)。恢复时同步处理 Windows 双反斜杠路径。`--with-optional` 导出 `profiles/` 或 `.agent-pre