SuperAPI AI Directory

openclaw-assets-to-workbuddy

Office & productivity

View repository

Updated 10-15 17:26

About this skill

Migrate OpenClaw Assets to WorkBuddy

Use this skill when the user wants to migrate their personal OpenClaw assets to WorkBuddy.

Default assumptions:

  • OpenClaw home:~/.openclaw
  • OpenClaw workspace:~/.openclaw/workspace
  • WorkBuddy home:~/.workbuddy
  • WorkBuddy project workspace: the target repo or workspace specified by the user

If the user explicitly provides a path, use the path provided by the user first.

Goals

Only migrate those "user assets" that have a clear destination in WorkBuddy.

Prioritize migrating:

  • Identity files
  • memory
  • skills
  • MCP configuration
  • bot/channel connection configuration
  • cron job definitions

Do not blindly copy opaque state such as runtime caches, credential directories, or plugin binary directories.

Default migration strategy:

  • Use "merge" as the default strategy, not "overwrite"
  • Especially SOUL.md、IDENTITY.md、USER.md, you must prioritize preserving WorkBuddy's existing persona, tone, boundaries, and preferences, then absorb missing but valuable information from OpenClaw
  • Only when the user explicitly requests "take OpenClaw as authoritative" is an overwrite-style migration allowed
  • OpenClaw credentials/* If migrating to WorkBuddy, default to "structured conversion", not whole-directory copying

Confirmed WorkBuddy target locations

Use the following destinations:

  • User-level identity files:
    • ~/.workbuddy/SOUL.md
    • ~/.workbuddy/IDENTITY.md
    • ~/.workbuddy/USER.md
  • User-level MCP configuration:
    • ~/.workbuddy/mcp.json
  • User-level skills:
    • ~/.workbuddy/skills/<skill>/SKILL.md
  • Project-level skills:
    • {workspace}/.workbuddy/skills/<skill>/SKILL.md
  • Project-level memory:
    • {workspace}/.workbuddy/memory/MEMORY.md
    • {workspace}/.workbuddy/memory/YYYY-MM-DD.md
  • automations:
    • ~/.workbuddy/automations/<automation_id>/automation.toml
  • IDE user configuration file:
    • <userDataPath>/User/settings.json
    • The macOS default is usually ~/Library/Application Support/CodeBuddy/User/settings.json
  • IDE bot/channel configuration primary key:
    • claw.channels
  • IDE bot/channel legacy compatibility key:
    • wecom.channels
  • IDE special channel switch:
    • wecom.wechatMpEnabled
    • wecom.wechatmp.artifactUploadEnabled
  • IDE product login configuration definition:
    • genie/apps/extension/vscode/product.json
  • IDE product login session:
    • VS Code SecretStorage
    • The current default key comes from product.json in authentication.attributes.storageKey
    • This is the WorkBuddy product account login state, not the bot/channel binding configuration
  • channel runtime cache (not a long-term configuration destination):
    • QQ session cache: in the system temp directory qq-bot-session-<account>.json
    • WeChat ClawBot sync cache: in the system temp directory weixin-sync-<account>.json
    • WeChat ClawBot context cache: in the system temp directory weixin-context-<account>.json

Related but not primary targets:

  • WorkBuddy's home root directory is essentially ~/.workbuddy
  • User model configuration may be in ~/.workbuddy/models.json
  • WorkBuddy may maintain its own ~/.workbuddy/workspace-state.json, do not overwrite unless the user explicitly requests it

Source-to-target mapping

1. Identity files

Migrate:

  • ~/.openclaw/workspace/SOUL.md -> ~/.workbuddy/SOUL.md
  • ~/.openclaw/workspace/IDENTITY.md -> ~/.workbuddy/IDENTITY.md
  • ~/.openclaw/workspace/USER.md -> ~/.workbuddy/USER.md

Rules:

  • If the target file already exists, prefer merging rather than crudely overwriting
  • If the WorkBuddy side has richer content, keep the existing content and only supplement the information missing from OpenClaw
  • SOUL.md has the highest merge priority: first preserve the persona, tone, values, and boundaries already established in WorkBuddy, then supplement with non-conflicting settings from OpenClaw
  • If the OpenClaw and WorkBuddy persona settings conflict, do not overwrite automatically; keep the WorkBuddy version and list the conflict points in the migration report
  • IDENTITY.md and USER.md should also be handled by "supplementing missing information, merging stable facts, and avoiding duplication"
  • Do not copy BOOTSTRAP.md
  • Do not copy OpenClaw workspace state files

2. Memory

Migration:

  • ~/.openclaw/workspace/MEMORY.md or memory.md -> {workspace}/.workbuddy/memory/MEMORY.md
  • ~/.openclaw/workspace/memory/*.md -> {workspace}/.workbuddy/memory/

Rules:

  • If a date-type memory file is already YYYY-MM-DD.md, keep the filename as-is
  • If OpenClaw's MEMORY.md is very large, merge it into WorkBuddy MEMORY.md, do not overwrite the entire file directly
  • Deduplicate when the content on both sides overlaps

3. Skills

Migration:

  • ~/.openclaw/skills/<skill>/ -> ~/.workbuddy/skills/<skill>/
  • ~/.openclaw/workspace/skills/<skill>/ -> {workspace}/.workbuddy/skills/<skill>/

Rules:

  • If, in the skill directory, besides SKILL.md there is also scripts/、references/、assets/, copy the entire skill directory
  • If the target skill already exists, diff first, then decide whether to merge, keep, or import under a new name

4. MCP

Primary sources:

  • ~/.openclaw/openclaw.json in mcp.servers

Optional sources:

  • ~/.openclaw/extensions/*/.mcp.json

Target:

  • ~/.workbuddy/mcp.json, top-level fields use mcpServers

Rules:

  • Convert OpenClaw's mcp.servers into WorkBuddy's mcpServers
  • When writing, merge into the existing ~/.workbuddy/mcp.json, do not overwrite other servers
  • If extracting from the OpenClaw plugin's .mcp.json , migrate only the MCP server definitions, not the entire plugin directory
  • If some servers depend on environment variables or secrets, keep only the keys those servers actually use

Target format example:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"],
      "type": "stdio",
      "disabled": false
    }
  }
}

5. Bot / channel connection configuration

General principles:

  • WorkBuddy's "product login state" and "bot/channel binding" are two different things; do not conflate them
  • WorkBuddy's product login state is mainly defined by product.json for the authentication method, and by SecretStorage to save the login session
  • OpenClaw credentials/* If the goal is to migrate bot/channel, it should preferentially be migrated to the WorkBuddy IDE's settings.json, that is, claw.channels.*
  • Unless the user explicitly requests migration of the WorkBuddy product account login state, do not force OpenClaw credentials/* into SecretStorage
  • The long-term goal of bot/channel migration is claw.channels.*; temporary cache files should not be treated as the final destination

Important locations:

  • Long-term configuration destination:
    • <userDataPath>/User/settings.json
    • The macOS default is usually ~/Library/Application Support/CodeBuddy/User/settings.json
  • New structure:
    • claw.channels.<channelType>
  • Old structure (compatible read, not recommended for new writes):
    • wecom.channels.<channelType>

OpenClaw credentials/* to WorkBuddy mapping principles:

  • ~/.openclaw/credentials/oauth.json

    • This is one of OpenClaw's legacy sources for channel/OAuth state
    • Do not import it directly as WorkBuddy bot/channel configuration
    • If what the user explicitly requests to migrate is the WorkBuddy product login state, the target should be WorkBuddy's SecretStorage, not claw.channels.*
    • If what the user wants to migrate is bot/channel, then usually skip this file and instead migrate the fields required by the specific channel
  • ~/.openclaw/credentials/<channel>-pairing.json

    • WorkBuddy has no isomorphic pairing file
    • If the target channel has a corresponding implementation in WorkBuddy, the semantics of "who is allowed to send messages, which channel is bound" can be translated into claw.channels.<type> policy fields or channelId
    • When a 1:1 mapping is not possible, mark it as manual review
  • ~/.openclaw/credentials/<channel>-allowFrom.json

    • Semantically, preferentially map to:
    • claw.channels.<type>.allowFrom
    • or groupAllowFrom / groups / dmPolicy / groupPolicy
    • This is "rule migration", not file migration
  • ~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json

    • If the target WorkBuddy channel type and account/channelId can be determined, it can be merged into the corresponding claw.channels.<type> allowlist / group policy
    • When ownership cannot be determined, mark it as manual review
  • ~/.openclaw/credentials/whatsapp/<accountId>/creds.json

    • In the currently confirmed list of WorkBuddy channel types, there is no built-in whatsapp
    • Do not automatically migrate to claw.channels.*
    • Default conclusion:manual review / unsupported
  • ~/.openclaw/credentials/matrix/credentials.json

  • ~/.openclaw/credentials/matrix/credentials-<account>.json

    • In the currently confirmed list of WorkBuddy channel types, there is no built-in matrix
    • Default conclusion:manual review / unsupported

Confirmed built-in WorkBuddy channel types:

  • feishu
  • wecom
  • wecomNew
  • wecomaibot
  • qq
  • yuanbao
  • weixinBot
  • weixinClawBot
  • wecomIOA
  • dingtalk
  • slack
  • custom
  • wechatkf
  • wechatmp

OpenClaw channels not currently confirmed in this built-in list, for example:

  • WhatsApp
  • Matrix
  • Telegram
  • Signal
  • Discord

For these channels, do not assume WorkBuddy has a direct landing spot; prioritize marking them as manual review, and only consider converting them to custom。

Recommended migration targets:

  • OpenClaw Feishu bot / webhook configuration

    • Target:claw.channels.feishu
    • Key fields:
    • channelId
    • appId
    • appSecret
    • Optional:verificationToken、encryptKey、domain
    • Policy can be included:allowFrom、groupAllowFrom、groups、replyPolicy、requireMention
  • OpenClaw Slack bot configuration

    • Target:claw.channels.slack
    • Key fields:
    • channelId
    • botToken
    • signingSecret
  • OpenClaw QQ bot configuration

    • Target:claw.channels.qq
    • Key fields:
    • channelId
    • appId
    • appSecret
    • Optional:requireMention
  • OpenClaw Yuanbao bot configuration

    • Target:claw.channels.yuanbao
    • Key fields:
    • channelId
    • appKey
    • appSecret
  • OpenClaw DingTalk bot configuration

    • Target:claw.channels.dingtalk
    • Key fields:
    • channelId
    • appKey
    • appSecret
  • OpenClaw WeCom webhook configuration

    • Target:claw.channels.wecomNew
    • Key fields:
    • channelId
    • token
    • encodingAESKey
  • OpenClaw WeCom AiBot configuration

    • Target:claw.channels.wecomaibot
    • WebSocket mode key fields:
    • botId
    • botSecret
    • Webhook mode key fields:
    • channelId
    • token
    • encodingAESKey
    • Optional:aibotid
    • Policy can be included:allowFrom、groupAllowFrom、groups、replyPolicy、requireMention
  • OpenClaw WeChat ClawBot configuration

    • Target:claw.channels.weixinClawBot
    • Key fields:
    • channelId
    • botToken
    • baseUrl
    • accountId
    • Optional:userId
    • Do not treat the temporary file weixin-sync-*.json、weixin-context-*.json as a migration target
  • OpenClaw WeChat Customer Service account related configuration

    • Target:wechatkf
    • Note:wechatkf uses a separate binding mechanism, and does not use claw.channels.wechatkf as the primary long-term landing spot
    • This type of migration is closer to "rebinding" than "copying credential files"
  • Channels for which OpenClaw has no directly corresponding WorkBuddy channel

    • Optional target:claw.channels.custom
    • Key fields:
    • channelId
    • webhookUrl
    • Optional:apiKey
    • Only migrate this way when the user accepts the semantics of "downgrading to a generic webhook relay"

Migration rules:

  • Do not copy the entire ~/.openclaw/credentials/ directory as a whole into WorkBuddy
  • Treat "channel credentials" and "policy/allowlist" separately
  • For those with a clear WorkBuddy schema, write to claw.channels.<type>
  • Only when compatible reading is needed, refer to wecom.channels.*; new writes always prioritize claw.channels.*
  • If it is merely writing the configuration file to settings.json, when WorkBuddy subsequently starts, it will attempt to automatically pull up and re-register these saved channels
  • wechatkf and wechatmp are special paths, handled respectively via the binding mechanism and an independent switch, and are not forcibly handled according to the ordinary claw.channels.* pattern

6. Cron job definition

Source:

  • ~/.openclaw/cron/jobs.json

Target:

  • ~/.workbuddy/automations/<automation_id>/automation.toml

Here only the "definition" is migrated; do not migrate:

  • ~/.openclaw/cron/runs/*.jsonl
  • ~/.openclaw/tasks/runs.sqlite

Field mapping:

  • 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 text -> WorkBuddy automation prompt
  • Target workspace -> WorkBuddy cwds

Schedule conversion rules:

  • schedule.kind = "at"

    • convert to schedule_type = "once"
    • convert time to scheduled_at = "<ISO-8601>"
  • schedule.kind = "every"

    • only automatically convert to WorkBuddy when it is an "whole-hour interval"
    • for example:everyMs = 7200000 -> rrule = "FREQ=HOURLY;INTERVAL=2"
    • if it is not a whole hour, mark as manual review, do not guess
  • schedule.kind = "cron"

    • Only automatically convert these safe and common patterns:
    • 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
    • if the expression contains seconds, day-of-month, month, or other complex forms not in the above range, stop automatic conversion and mark as manual review

payload conversion:

  • payload.kind = "agentTurn"

    • use payload.message as WorkBuddy's prompt
    • if there is model or thinking, try to preserve them as optional metadata
  • payload.kind = "systemEvent"

    • use the system event text as WorkBuddy's prompt
    • state in the migration report: this is not fully equivalent to the execution semantics of OpenClaw main-session cron

The following semantics do not have strict one-to-one mappings:

  • sessionTarget
  • wakeMode
  • delivery
  • deleteAfterRun
  • top-of-hour staggerMs

Handling method:

  • Keep these original fields in the migration report
  • If necessary, a short comment can be added in the generated automation prompt or accompanying notes
  • Do not invent fields that do not exist in WorkBuddy out of thin air

Schema / file format skeleton

Minimal skeleton of WorkBuddy automation.toml

The WorkBuddy automation file generated after migration should at least conform to the following skeleton:

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"]

Optional fields:

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

Field meanings:

  • version: currently fixed to 1
  • id: stable id of the automation
  • name: automation name
  • prompt: the prompt that actually performs the task
  • status:ACTIVE or PAUSED
  • schedule_type:recurring or once
  • rrule: RRULE used by recurring tasks
  • scheduled_at: execution time of a one-time task
  • cwds: list of workspace directories used during execution
  • valid_from / valid_until: optional effective interval
  • model_id / model_is_thinking: optional model parameters
  • push_to_wechat: optional notification parameters

Rules:

  • schedule_type = "recurring" when , there must be rrule
  • schedule_type = "once" when , there must be scheduled_at
  • prompt cannot be empty
  • cwds must be an array, even if there is only one workspace

WorkBuddy channel settings.json reference skeleton

The long-term configuration of bot/channel is not in ~/.workbuddy, but in the WorkBuddy IDE's settings.json。

The typical skeleton is as follows:

{
  "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
}

Rules:

  • New writes prefer claw.channels
  • registration.webhookUrl is the registered information saved by WorkBuddy; not all channels must have it
  • wechatkf Do not mechanically write it as the structure above; it uses a separate binding mechanism
  • wechatmp By default, look at the separate switch and do not treat it as an ordinary claw.channels.<type> handling

OpenClaw cron jobs.json reference skeleton

The OpenClaw source file is usually a jobs array, and a single job can be roughly understood as follows:

{
  "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": "生成每日简报并汇总关键事项。"
      }
    }
  ]
}

The schedule.kind:

  • at
  • every
  • cron

The payload.kind:

  • agentTurn
  • systemEvent

During migration, do not require the source file to look exactly like the above; just treat it as a "field understanding skeleton."

Content that usually should not be copied directly

Unless the user explicitly requests it and you confirm the target format is compatible, do not copy directly:

  • ~/.openclaw/credentials/
  • ~/.openclaw/extensions/ The entire plugin directory
  • ~/.openclaw/.env The entire file
  • ~/.openclaw/openclaw.json The entire file
  • .clawhub/lock.json
  • OpenClaw session logs and runtime state files

Recommended handling:

  • Extract only from .env the environment variables that MCP actually needs
  • Extract MCP server definitions only from configuration files or plugin files
  • credentials/* Only do "structured extraction + mapped writing"; do not copy the entire directory
  • Mark other content that cannot be safely migrated automatically as "needs manual migration"

Pre-execution confirmation (required)

Before reading any OpenClaw data, you must first call ask_followup_question to obtain user confirmation.

Parameters:

  • Title:OpenClaw 资产复制确认
  • Question content:
即将从 ~/.openclaw 复制以下内容到 WorkBuddy:

身份设定 / 记忆 / 技能 / MCP 配置 / 渠道凭据 / 定时任务

原始数据不会被删除或修改,所有操作在本地完成。
其中渠道凭据包含 API Key 等敏感信息,复制完成后 WorkBuddy 会自动连接对应平台。
  • Options:确认复制 / 取消

If the user selects "Cancel", terminate immediately and do not perform any read operations.

Workflow

  1. Check the source path and list which assets actually exist
  2. Check the WorkBuddy target path and confirm whether files with the same names already exist
  3. Produce a migration table before taking action
  4. Before overwriting or heavily merging, back up the target file or directory
  5. Migrate in this order:
    • identity
    • memory
    • skills
    • MCP
    • bot/channel bindings
    • cron definitions
  6. For each migratable cron job, generate a WorkBuddy automation TOML
  7. Finally output a migration report explaining:
    • Migrated items
    • Skipped items
    • Items requiring manual handling
    • The handling result for each path

When merging identity files, prioritize judgment in the following order:

  1. Which parts of the existing WorkBuddy content are persona, tone, and long-term preferences already in effect
  2. Which parts of the OpenClaw content are stable facts, supplementary settings, and compatible preferences
  3. Which content is duplicated
  4. Which content conflicts

Handling principles:

  • Duplicate content: deduplicate
  • Complementary content: merge
  • Conflicting content: by default keep WorkBuddy, record the conflict points, and wait for the user to decide later

Report format

At the end, you must output a concise migration report containing at least:

  • OpenClaw source path
  • WorkBuddy target path
  • Action: copied, merged, skipped, manual review
  • Reason for skipping or manual handling

If cron jobs exist, list a separate section:

  • Successfully converted tasks
  • Expressions that do not support automatic conversion
  • Fields whose execution semantics cannot be fully preserved

If bot/channel migration exists, list a separate section:

  • Which OpenClaw channels were migrated to claw.channels.*
  • Which were written to settings.json
  • Which involve SecretStorage, and which do not involve
  • Which channels have no direct target in the current WorkBuddy version and can only manual review

If the identity files are merged, additionally list:

  • Which original WorkBuddy settings were retained
  • Which supplementary content was absorbed from OpenClaw
  • Which settings conflict and were retained with WorkBuddy taking priority

The final closing explanation to the user must clearly state:

  • Which assets were actually migrated this time
  • Which assets were not migrated this time
  • Which files were modified this time
  • What the final location of each modified file is
  • Where each asset was migrated from and to

It is recommended to close with the following structure:

  1. Migrated content

    • Asset category
    • Source path
    • Target path
    • Action: copied / merged / created / skipped / manual review
  2. Modified files

    • Modified file path
    • Reason for modification
    • Whether it is a merge migration
  3. Not migrated or requiring manual handling

    • Asset name or path
    • Reason
  4. bot/channel migration result

    • OpenClaw source file or source field
    • WorkBuddy target key
    • Final written file
    • Whether the user needs to rebind or supplement the key later

Do not give only a general summary; you must clearly list "which files were changed and where they were migrated to".

Security principles

  • Unless the user explicitly requests it, do not delete the OpenClaw source data
  • When the target already has user edits, prefer merge, do not replace
  • If the target-side content is more complete or newer, retain the target content and only supplement missing information
  • For SOUL.md、IDENTITY.md、USER.md, by default perform "merge migration", not "source overwrites target"
  • As long as a 1:1 mapping cannot be done with high confidence, mark it as manual review, do not guess
  • For bot/channel credentials, migrate only the channels that the current WorkBuddy explicitly supports and whose schema has been confirmed