# Openclaw Assets To Workbuddy

> 将 OpenClaw 用户的个人资产迁移到 WorkBuddy 对应位置，重点覆盖 SOUL.md、IDENTITY.md、USER.md、memory、skills、MCP 配置、bot/channel 连接配置，以及 OpenClaw 的 cron job 定义。适用于把 ~/.openclaw 或 OpenClaw workspace 迁入 ~/.workbuddy、WorkBuddy IDE 配置和目标 WorkBuddy 工作区的场景。

- Skill: `bighardperson/openclaw-assets-to-workbuddy` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add bighardperson/openclaw-assets-to-workbuddy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bighardperson/openclaw-assets-to-workbuddy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: bighardperson (https://skillmd.com/u/bighardperson)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/bighardperson/openclaw-assets-to-workbuddy

---


# OpenClaw 资产迁移到 WorkBuddy

当用户希望把个人 OpenClaw 资产迁移到 WorkBuddy 时，使用这个 skill。

默认假设：
- OpenClaw home：`~/.openclaw`
- OpenClaw workspace：`~/.openclaw/workspace`
- WorkBuddy home：`~/.workbuddy`
- WorkBuddy 项目工作区：用户指定的目标 repo 或 workspace

如果用户明确给了路径，优先使用用户提供的路径。

## 目标

只迁移那些在 WorkBuddy 中有明确落点的“用户资产”。

优先迁移：
- 身份文件
- memory
- skills
- MCP 配置
- bot/channel 连接配置
- cron job 定义

不要盲目复制运行态缓存、凭据目录、插件二进制目录等不透明状态。

默认迁移策略：
- 以“融合”为默认策略，不以“覆盖”为默认策略
- 尤其是 `SOUL.md`、`IDENTITY.md`、`USER.md`，必须优先保留 WorkBuddy 现有人设、语气、边界、偏好，再吸收 OpenClaw 中缺失但有价值的信息
- 只有在用户明确要求“以 OpenClaw 为准”时，才允许接近覆盖式迁移
- OpenClaw `credentials/*` 如果要迁移到 WorkBuddy，默认走“结构化转换”，不是整目录复制

## 已确认的 WorkBuddy 目标位置

使用以下落点：

- 用户级身份文件：
  - `~/.workbuddy/SOUL.md`
  - `~/.workbuddy/IDENTITY.md`
  - `~/.workbuddy/USER.md`
- 用户级 MCP 配置：
  - `~/.workbuddy/mcp.json`
- 用户级 skills：
  - `~/.workbuddy/skills/<skill>/SKILL.md`
- 项目级 skills：
  - `{workspace}/.workbuddy/skills/<skill>/SKILL.md`
- 项目级 memory：
  - `{workspace}/.workbuddy/memory/MEMORY.md`
  - `{workspace}/.workbuddy/memory/YYYY-MM-DD.md`
- automations：
  - `~/.workbuddy/automations/<automation_id>/automation.toml`
- IDE 用户配置文件：
  - `<userDataPath>/User/settings.json`
  - macOS 默认通常是 `~/Library/Application Support/CodeBuddy/User/settings.json`
- IDE bot/channel 配置主键：
  - `claw.channels`
- IDE bot/channel 旧版兼容键：
  - `wecom.channels`
- IDE 特殊 channel 开关：
  - `wecom.wechatMpEnabled`
  - `wecom.wechatmp.artifactUploadEnabled`
- IDE 产品登录配置定义：
  - `genie/apps/extension/vscode/product.json`
- IDE 产品登录 session：
  - VS Code `SecretStorage`
  - 当前默认 key 源自 `product.json` 里的 `authentication.attributes.storageKey`
  - 这套是 WorkBuddy 产品账号登录态，不是 bot/channel 绑定配置
- channel 运行时缓存（不是长期配置落点）：
  - QQ 会话缓存：系统临时目录里的 `qq-bot-session-<account>.json`
  - 微信 ClawBot 同步缓存：系统临时目录里的 `weixin-sync-<account>.json`
  - 微信 ClawBot context 缓存：系统临时目录里的 `weixin-context-<account>.json`

相关但非主要目标：
- WorkBuddy 的 home 根目录实质上是 `~/.workbuddy`
- 用户模型配置可能在 `~/.workbuddy/models.json`
- WorkBuddy 可能会自己维护 `~/.workbuddy/workspace-state.json`，除非用户明确要求，否则不要覆盖

## 源到目标的映射

### 1. 身份文件

迁移：
- `~/.openclaw/workspace/SOUL.md` -> `~/.workbuddy/SOUL.md`
- `~/.openclaw/workspace/IDENTITY.md` -> `~/.workbuddy/IDENTITY.md`
- `~/.openclaw/workspace/USER.md` -> `~/.workbuddy/USER.md`

规则：
- 如果目标文件已存在，优先做 merge，不要粗暴覆盖
- 如果 WorkBuddy 侧内容更丰富，保留现有内容，只补充 OpenClaw 中缺失的信息
- `SOUL.md` 的融合优先级最高：先保留 WorkBuddy 已建立的人设、语气、价值观、边界，再补充 OpenClaw 中不冲突的设定
- 如果 OpenClaw 与 WorkBuddy 的人设设定冲突，不要自动覆盖，保留 WorkBuddy 版本，并把冲突点列入迁移报告
- `IDENTITY.md` 和 `USER.md` 也应采用“补充缺失信息、合并稳定事实、避免重复”的方式处理
- 不要复制 `BOOTSTRAP.md`
- 不要复制 OpenClaw workspace state 文件

### 2. Memory

迁移：
- `~/.openclaw/workspace/MEMORY.md` 或 `memory.md` -> `{workspace}/.workbuddy/memory/MEMORY.md`
- `~/.openclaw/workspace/memory/*.md` -> `{workspace}/.workbuddy/memory/`

规则：
- 日期型 memory 文件如果已经是 `YYYY-MM-DD.md`，原样保留文件名
- 如果 OpenClaw 的 `MEMORY.md` 很大，合并到 WorkBuddy `MEMORY.md`，不要整文件直接覆盖
- 两边内容重复时要去重

### 3. Skills

迁移：
- `~/.openclaw/skills/<skill>/` -> `~/.workbuddy/skills/<skill>/`
- `~/.openclaw/workspace/skills/<skill>/` -> `{workspace}/.workbuddy/skills/<skill>/`

规则：
- 如果 skill 目录里除了 `SKILL.md` 还有 `scripts/`、`references/`、`assets/`，复制整个 skill 目录
- 如果目标 skill 已存在，先 diff，再决定 merge、保留，或改名导入

### 4. MCP

主要来源：
- `~/.openclaw/openclaw.json` 中的 `mcp.servers`

可选来源：
- `~/.openclaw/extensions/*/.mcp.json`

目标：
- `~/.workbuddy/mcp.json`，顶层字段使用 `mcpServers`

规则：
- 把 OpenClaw 的 `mcp.servers` 转成 WorkBuddy 的 `mcpServers`
- 写入时合并到已有 `~/.workbuddy/mcp.json`，不要覆盖其他 server
- 如果从 OpenClaw 插件的 `.mcp.json` 中提取，只迁移 MCP server 定义，不迁移整个插件目录
- 如果某些 server 依赖环境变量或密钥，只保留这些 server 真正用到的键

目标格式示例：

```json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"],
      "type": "stdio",
      "disabled": false
    }
  }
}
```

### 5. Bot / channel 连接配置

总原则：
- WorkBuddy 的“产品登录态”和“bot/channel 绑定”是两套东西，不要混为一谈
- WorkBuddy 产品登录态主要由 `product.json` 定义认证方式，并由 `SecretStorage` 保存登录 session
- OpenClaw `credentials/*` 如果是为了迁移 bot/channel，应优先迁移到 WorkBuddy IDE 的 `settings.json`，也就是 `claw.channels.*`
- 除非用户明确要求迁移 WorkBuddy 产品账号登录态，否则不要把 OpenClaw `credentials/*` 强行写进 `SecretStorage`
- bot/channel 迁移的长期目标是 `claw.channels.*`；临时缓存文件不要当作最终落点

重要位置：
- 长期配置落点：
  - `<userDataPath>/User/settings.json`
  - macOS 默认通常是 `~/Library/Application Support/CodeBuddy/User/settings.json`
- 新结构：
  - `claw.channels.<channelType>`
- 旧结构（兼容读取，不建议新写入）：
  - `wecom.channels.<channelType>`

OpenClaw `credentials/*` 到 WorkBuddy 的对照原则：

- `~/.openclaw/credentials/oauth.json`
  - 这是 OpenClaw 的渠道/OAuth 旧状态来源之一
  - 不要把它直接当成 WorkBuddy bot/channel 配置导入
  - 如果用户明确要求迁移的是 WorkBuddy 产品登录态，目标应是 WorkBuddy 的 `SecretStorage`，不是 `claw.channels.*`
  - 如果用户要迁移的是 bot/channel，则通常跳过这个文件，改为迁移具体 channel 所需字段

- `~/.openclaw/credentials/<channel>-pairing.json`
  - WorkBuddy 没有同构的 pairing 文件
  - 如果目标 channel 在 WorkBuddy 有对应实现，可把其中“允许谁发消息、绑定哪个通道”的语义，折算到 `claw.channels.<type>` 的策略字段或 channelId
  - 不能 1:1 映射时，标记为 `manual review`

- `~/.openclaw/credentials/<channel>-allowFrom.json`
  - 语义上优先映射到：
  - `claw.channels.<type>.allowFrom`
  - 或 `groupAllowFrom` / `groups` / `dmPolicy` / `groupPolicy`
  - 这属于“规则迁移”，不是文件迁移

- `~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json`
  - 如果能确定目标 WorkBuddy channel 类型和 account/channelId，可合并到对应 `claw.channels.<type>` 的 allowlist / group policy
  - 无法确定归属时，标记为 `manual review`

- `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
  - 当前已确认的 WorkBuddy channel 类型列表里，没有内建 `whatsapp`
  - 不要自动迁移到 `claw.channels.*`
  - 默认结论：`manual review / unsupported`

- `~/.openclaw/credentials/matrix/credentials.json`
- `~/.openclaw/credentials/matrix/credentials-<account>.json`
  - 当前已确认的 WorkBuddy channel 类型列表里，没有内建 `matrix`
  - 默认结论：`manual review / unsupported`

已确认的 WorkBuddy 内建 channel 类型：
- `feishu`
- `wecom`
- `wecomNew`
- `wecomaibot`
- `qq`
- `yuanbao`
- `weixinBot`
- `weixinClawBot`
- `wecomIOA`
- `dingtalk`
- `slack`
- `custom`
- `wechatkf`
- `wechatmp`

当前没有在这份内建列表里确认到的 OpenClaw 渠道，例如：
- WhatsApp
- Matrix
- Telegram
- Signal
- Discord

对这些渠道，不要假设 WorkBuddy 有直接落点；优先标记为 `manual review`，必要时再考虑转成 `custom`。

推荐迁移目标：

- OpenClaw 飞书 bot / webhook 类配置
  - 目标：`claw.channels.feishu`
  - 关键字段：
  - `channelId`
  - `appId`
  - `appSecret`
  - 可选：`verificationToken`、`encryptKey`、`domain`
  - 可附带策略：`allowFrom`、`groupAllowFrom`、`groups`、`replyPolicy`、`requireMention`

- OpenClaw Slack bot 配置
  - 目标：`claw.channels.slack`
  - 关键字段：
  - `channelId`
  - `botToken`
  - `signingSecret`

- OpenClaw QQ bot 配置
  - 目标：`claw.channels.qq`
  - 关键字段：
  - `channelId`
  - `appId`
  - `appSecret`
  - 可选：`requireMention`

- OpenClaw 元宝 bot 配置
  - 目标：`claw.channels.yuanbao`
  - 关键字段：
  - `channelId`
  - `appKey`
  - `appSecret`

- OpenClaw 钉钉 bot 配置
  - 目标：`claw.channels.dingtalk`
  - 关键字段：
  - `channelId`
  - `appKey`
  - `appSecret`

- OpenClaw 企业微信 webhook 配置
  - 目标：`claw.channels.wecomNew`
  - 关键字段：
  - `channelId`
  - `token`
  - `encodingAESKey`

- OpenClaw 企业微信 AiBot 配置
  - 目标：`claw.channels.wecomaibot`
  - WebSocket 模式关键字段：
  - `botId`
  - `botSecret`
  - Webhook 模式关键字段：
  - `channelId`
  - `token`
  - `encodingAESKey`
  - 可选：`aibotid`
  - 可附带策略：`allowFrom`、`groupAllowFrom`、`groups`、`replyPolicy`、`requireMention`

- OpenClaw 微信 ClawBot 配置
  - 目标：`claw.channels.weixinClawBot`
  - 关键字段：
  - `channelId`
  - `botToken`
  - `baseUrl`
  - `accountId`
  - 可选：`userId`
  - 不要把临时文件 `weixin-sync-*.json`、`weixin-context-*.json` 当成迁移目标

- OpenClaw 微信客服号相关配置
  - 目标：`wechatkf`
  - 注意：`wechatkf` 使用单独绑定机制，不以 `claw.channels.wechatkf` 作为主要长期落点
  - 这类迁移更接近“重新绑定”而不是“复制凭据文件”

- OpenClaw 无直接对应 WorkBuddy channel 的渠道
  - 可选目标：`claw.channels.custom`
  - 关键字段：
  - `channelId`
  - `webhookUrl`
  - 可选：`apiKey`
  - 只有在用户接受“降级到 generic webhook relay”语义时，才这样迁移

迁移规则：
- 不要把整个 `~/.openclaw/credentials/` 目录整包复制到 WorkBuddy
- 要把“渠道凭据”和“策略/allowlist”拆开看
- 有明确 WorkBuddy schema 的，写入 `claw.channels.<type>`
- 只有兼容读取时，才参考 `wecom.channels.*`；新写入一律优先 `claw.channels.*`
- 如果只是把配置文件写入 `settings.json`，WorkBuddy 后续启动时会尝试自动拉起并重新注册这些已保存的 channels
- `wechatkf` 和 `wechatmp` 属于特殊路径，分别走绑定机制和独立开关，不按普通 `claw.channels.*` 套路强行处理

### 6. Cron job 定义

来源：
- `~/.openclaw/cron/jobs.json`

目标：
- `~/.workbuddy/automations/<automation_id>/automation.toml`

这里只迁移“定义”，不要迁移：
- `~/.openclaw/cron/runs/*.jsonl`
- `~/.openclaw/tasks/runs.sqlite`

字段映射：

- OpenClaw `enabled: true` -> WorkBuddy `status = "ACTIVE"`
- OpenClaw `enabled: false` -> WorkBuddy `status = "PAUSED"`
- OpenClaw job id -> WorkBuddy automation id
- OpenClaw job name -> WorkBuddy automation name
- OpenClaw payload 文本 -> WorkBuddy automation prompt
- 目标工作区 -> WorkBuddy `cwds`

调度转换规则：

- `schedule.kind = "at"`
  - 转成 `schedule_type = "once"`
  - 时间转成 `scheduled_at = "<ISO-8601>"`

- `schedule.kind = "every"`
  - 只在“整小时间隔”时自动转成 WorkBuddy
  - 例如：`everyMs = 7200000` -> `rrule = "FREQ=HOURLY;INTERVAL=2"`
  - 如果不是整小时，标记为 `manual review`，不要猜

- `schedule.kind = "cron"`
  - 只自动转换这些安全且常见的模式：
  - `0 */N * * *` -> `FREQ=HOURLY;INTERVAL=N`
  - `M H * * *` -> `FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU;BYHOUR=H;BYMINUTE=M`
  - `M H * * 1,3,5` -> `FREQ=WEEKLY;BYDAY=MO,WE,FR;BYHOUR=H;BYMINUTE=M`
  - 如果表达式包含秒、day-of-month、month，或其他不在以上范围内的复杂形态，停止自动转换，标记为 `manual review`

payload 转换：

- `payload.kind = "agentTurn"`
  - 用 `payload.message` 作为 WorkBuddy 的 `prompt`
  - 如果有 `model` 或 `thinking`，尽量保留为可选元信息

- `payload.kind = "systemEvent"`
  - 用 system event 文本作为 WorkBuddy 的 `prompt`
  - 在迁移报告里说明：这和 OpenClaw main-session cron 的执行语义并不完全等价

以下语义没有严格的一一映射：
- `sessionTarget`
- `wakeMode`
- `delivery`
- `deleteAfterRun`
- top-of-hour `staggerMs`

处理方式：
- 在迁移报告里保留这些原始字段
- 如有必要，可以在生成的 automation prompt 或附带说明里加一小段注释
- 不要凭空发明 WorkBuddy 不存在的字段

## Schema / 文件格式骨架

### WorkBuddy automation.toml 最小骨架

迁移后生成的 WorkBuddy automation 文件应至少符合下面这个骨架：

```toml
version = 1
id = "daily-brief"
name = "Daily Brief"
prompt = "生成每日简报并汇总关键事项。"
status = "ACTIVE"
schedule_type = "recurring"
rrule = "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=9;BYMINUTE=0"
cwds = ["/path/to/workspace"]
```

可选字段：

```toml
scheduled_at = "2026-04-01T15:30"
valid_from = "2026-04-01"
valid_until = "2026-04-30"
model_id = "gpt-5.4"
model_is_thinking = true
push_to_wechat = false
```

字段含义：
- `version`：当前固定写 `1`
- `id`：automation 的稳定 id
- `name`：automation 名称
- `prompt`：实际执行任务的提示词
- `status`：`ACTIVE` 或 `PAUSED`
- `schedule_type`：`recurring` 或 `once`
- `rrule`：循环任务使用的 RRULE
- `scheduled_at`：一次性任务的执行时间
- `cwds`：执行时使用的工作区目录列表
- `valid_from` / `valid_until`：可选生效区间
- `model_id` / `model_is_thinking`：可选模型参数
- `push_to_wechat`：可选通知参数

规则：
- `schedule_type = "recurring"` 时，必须有 `rrule`
- `schedule_type = "once"` 时，必须有 `scheduled_at`
- `prompt` 不能为空
- `cwds` 必须是数组，即使只有一个工作区

### WorkBuddy channel settings.json 参考骨架

bot/channel 的长期配置不在 `~/.workbuddy`，而在 WorkBuddy IDE 的 `settings.json`。

典型骨架如下：

```json
{
  "claw.channels": {
    "feishu": {
      "enabled": true,
      "channelId": "feishu-prod",
      "appId": "cli_xxx",
      "appSecret": "yyy",
      "verificationToken": "zzz",
      "encryptKey": "aaa",
      "domain": "feishu",
      "registration": {
        "webhookUrl": "https://..."
      }
    },
    "wecomaibot": {
      "enabled": true,
      "connectionMode": "websocket",
      "channelId": "wecom-aibot-main",
      "botId": "bot_xxx",
      "botSecret": "secret_xxx",
      "registration": {
        "webhookUrl": "https://..."
      }
    },
    "weixinClawBot": {
      "enabled": true,
      "channelId": "weixin-main",
      "botToken": "token_xxx",
      "baseUrl": "https://ilinkai.weixin.qq.com",
      "accountId": "wx_xxx",
      "userId": "user_xxx"
    }
  },
  "wecom.wechatMpEnabled": true,
  "wecom.wechatmp.artifactUploadEnabled": false
}
```

规则：
- 新写入优先 `claw.channels`
- `registration.webhookUrl` 是 WorkBuddy 保存的已注册信息，不是所有 channel 都必须有
- `wechatkf` 不要机械写成上面的结构，它使用单独绑定机制
- `wechatmp` 默认看单独开关，不把它当作普通 `claw.channels.<type>` 处理

### OpenClaw cron jobs.json 参考骨架

OpenClaw 源文件通常是一个 `jobs` 数组，单个 job 大致可按下面的形态理解：

```json
{
  "version": 1,
  "jobs": [
    {
      "id": "daily-brief",
      "name": "Daily Brief",
      "enabled": true,
      "schedule": {
        "kind": "cron",
        "expr": "0 9 * * 1,2,3,4,5",
        "tz": "Asia/Shanghai"
      },
      "sessionTarget": "isolated",
      "payload": {
        "kind": "agentTurn",
        "message": "生成每日简报并汇总关键事项。"
      }
    }
  ]
}
```

OpenClaw 可能出现的 `schedule.kind`：
- `at`
- `every`
- `cron`

OpenClaw 可能出现的 `payload.kind`：
- `agentTurn`
- `systemEvent`

迁移时不要要求源文件必须完全长成上面的样子；把它当作“字段理解骨架”即可。

## 通常不要直接复制的内容

除非用户明确要求并且你确认目标格式兼容，否则不要直接复制：

- `~/.openclaw/credentials/`
- `~/.openclaw/extensions/` 整个插件目录
- `~/.openclaw/.env` 整个文件
- `~/.openclaw/openclaw.json` 整个文件
- `.clawhub/lock.json`
- OpenClaw session logs 和运行态状态文件

推荐处理方式：
- 只从 `.env` 中提取 MCP 真正需要的环境变量
- 只从配置文件或插件文件中提取 MCP server 定义
- `credentials/*` 只做“结构化提取 + 映射写入”，不要整目录复制
- 其他无法安全自动迁移的内容，标记为“需要手动迁移”

## 执行前确认（必须）

在读取任何 OpenClaw 数据之前，必须先调用 `ask_followup_question` 获得用户确认。

参数：
- 标题：`OpenClaw 资产复制确认`
- 问题内容：

```
即将从 ~/.openclaw 复制以下内容到 WorkBuddy：

身份设定 / 记忆 / 技能 / MCP 配置 / 渠道凭据 / 定时任务

原始数据不会被删除或修改，所有操作在本地完成。
其中渠道凭据包含 API Key 等敏感信息，复制完成后 WorkBuddy 会自动连接对应平台。
```

- 选项：`确认复制` / `取消`

如果用户选择"取消"，立即终止，不做任何读取操作。

## 工作流程

1. 检查源路径，列出哪些资产实际存在
2. 检查 WorkBuddy 目标路径，确认是否已有同名文件
3. 在动手前先产出一张迁移表
4. 覆盖或重度 merge 前，先备份目标文件或目录
5. 按这个顺序迁移：
   - identity
   - memory
   - skills
   - MCP
   - bot/channel bindings
   - cron definitions
6. 对每个可迁移的 cron job，生成一个 WorkBuddy automation TOML
7. 最后输出迁移报告，说明：
   - 已迁移项
   - 已跳过项
   - 需人工处理项
   - 每条路径的处理结果

在身份文件融合时，优先按下面顺序判断：
1. WorkBuddy 现有内容里哪些是已经生效的人设、语气、长期偏好
2. OpenClaw 内容里哪些是稳定事实、补充设定、可兼容偏好
3. 哪些内容重复
4. 哪些内容冲突

处理原则：
- 重复内容：去重
- 互补内容：合并
- 冲突内容：默认保留 WorkBuddy，记录冲突点，等待用户后续决定

## 报告格式

结束时必须输出简明迁移报告，至少包含：

- OpenClaw 源路径
- WorkBuddy 目标路径
- 动作：copied、merged、skipped、manual review
- 跳过或人工处理的原因

如果存在 cron jobs，单独列一节：
- 转换成功的任务
- 不支持自动转换的表达式
- 执行语义无法完全保留的字段

如果存在 bot/channel 迁移，单独列一节：
- 哪些 OpenClaw channel 被迁移到了 `claw.channels.*`
- 哪些是写入 `settings.json`
- 哪些涉及 `SecretStorage`，哪些没有涉及
- 哪些 channel 在当前 WorkBuddy 版本里没有直接目标，只能 `manual review`

如果身份文件发生融合，还要额外列出：
- 保留了哪些 WorkBuddy 原有设定
- 从 OpenClaw 吸收了哪些补充内容
- 哪些设定存在冲突并被保留为 WorkBuddy 优先

最后给用户的收尾说明必须明确写清楚：
- 本次实际迁移了哪些资产
- 本次没有迁移哪些资产
- 本次修改了哪些文件
- 每个被修改文件的最终位置是什么
- 每个资产是从哪里迁到哪里的

推荐按下面的结构收尾：

1. 已迁移内容
   - 资产类别
   - 源路径
   - 目标路径
   - 动作：copied / merged / created / skipped / manual review

2. 修改的文件
   - 被修改文件路径
   - 修改原因
   - 是否为融合迁移

3. 未迁移或需人工处理
   - 资产名称或路径
   - 原因

4. bot/channel 迁移结果
   - OpenClaw 源文件或源字段
   - WorkBuddy 目标 key
   - 最终写入文件
   - 是否需要用户后续重新绑定或补充密钥

不要只给笼统总结，必须把“改了什么文件、迁到哪里”明确列出来。

## 安全原则

- 除非用户明确要求，否则不要删除 OpenClaw 源数据
- 目标已存在用户编辑时，优先 merge，不要 replace
- 如果目标侧内容更完整或更新，保留目标内容，只补缺失信息
- 对 `SOUL.md`、`IDENTITY.md`、`USER.md`，默认执行“融合迁移”，不是“源覆盖目标”
- 只要不能高置信度做 1:1 映射，就标记为 `manual review`，不要猜
- 对 bot/channel 凭据，只迁移当前 WorkBuddy 明确支持且 schema 已确认的渠道

