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.wechatMpEnabledwecom.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.jsoninauthentication.attributes.storageKey - This is the WorkBuddy product account login state, not the bot/channel binding configuration
- VS Code
- 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
- QQ session cache: in the system temp directory
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.mdhas 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.mdandUSER.mdshould 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.mdormemory.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.mdis very large, merge it into WorkBuddyMEMORY.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.mdthere is alsoscripts/、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.jsoninmcp.servers
Optional sources:
~/.openclaw/extensions/*/.mcp.json
Target:
~/.workbuddy/mcp.json, top-level fields usemcpServers
Rules:
- Convert OpenClaw's
mcp.serversinto WorkBuddy'smcpServers - 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.jsonfor the authentication method, and bySecretStorageto save the login session - OpenClaw
credentials/*If the goal is to migrate bot/channel, it should preferentially be migrated to the WorkBuddy IDE'ssettings.json, that is,claw.channels.* - Unless the user explicitly requests migration of the WorkBuddy product account login state, do not force OpenClaw
credentials/*intoSecretStorage - 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, notclaw.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
- If the target WorkBuddy channel type and account/channelId can be determined, it can be merged into the corresponding
-
~/.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
- In the currently confirmed list of WorkBuddy channel types, there is no built-in
-
~/.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
- In the currently confirmed list of WorkBuddy channel types, there is no built-in
Confirmed built-in WorkBuddy channel types:
feishuwecomwecomNewwecomaibotqqyuanbaoweixinBotweixinClawBotwecomIOAdingtalkslackcustomwechatkfwechatmp
OpenClaw channels not currently confirmed in this built-in list, for example:
- 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:
channelIdappIdappSecret- Optional:
verificationToken、encryptKey、domain - Policy can be included:
allowFrom、groupAllowFrom、groups、replyPolicy、requireMention
- Target:
-
OpenClaw Slack bot configuration
- Target:
claw.channels.slack - Key fields:
channelIdbotTokensigningSecret
- Target:
-
OpenClaw QQ bot configuration
- Target:
claw.channels.qq - Key fields:
channelIdappIdappSecret- Optional:
requireMention
- Target:
-
OpenClaw Yuanbao bot configuration
- Target:
claw.channels.yuanbao - Key fields:
channelIdappKeyappSecret
- Target:
-
OpenClaw DingTalk bot configuration
- Target:
claw.channels.dingtalk - Key fields:
channelIdappKeyappSecret
- Target:
-
OpenClaw WeCom webhook configuration
- Target:
claw.channels.wecomNew - Key fields:
channelIdtokenencodingAESKey
- Target:
-
OpenClaw WeCom AiBot configuration
- Target:
claw.channels.wecomaibot - WebSocket mode key fields:
botIdbotSecret- Webhook mode key fields:
channelIdtokenencodingAESKey- Optional:
aibotid - Policy can be included:
allowFrom、groupAllowFrom、groups、replyPolicy、requireMention
- Target:
-
OpenClaw WeChat ClawBot configuration
- Target:
claw.channels.weixinClawBot - Key fields:
channelIdbotTokenbaseUrlaccountId- Optional:
userId - Do not treat the temporary file
weixin-sync-*.json、weixin-context-*.jsonas a migration target
- Target:
-
OpenClaw WeChat Customer Service account related configuration
- Target:
wechatkf - Note:
wechatkfuses a separate binding mechanism, and does not useclaw.channels.wechatkfas the primary long-term landing spot - This type of migration is closer to "rebinding" than "copying credential files"
- Target:
-
Channels for which OpenClaw has no directly corresponding WorkBuddy channel
- Optional target:
claw.channels.custom - Key fields:
channelIdwebhookUrl- Optional:
apiKey - Only migrate this way when the user accepts the semantics of "downgrading to a generic webhook relay"
- Optional target:
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 prioritizeclaw.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 wechatkfandwechatmpare special paths, handled respectively via the binding mechanism and an independent switch, and are not forcibly handled according to the ordinaryclaw.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-> WorkBuddystatus = "ACTIVE" - OpenClaw
enabled: false-> WorkBuddystatus = "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>"
- convert to
-
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=NM H * * *->FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU;BYHOUR=H;BYMINUTE=MM 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.messageas WorkBuddy'sprompt - if there is
modelorthinking, try to preserve them as optional metadata
- use
-
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
- use the system event text as WorkBuddy's
The following semantics do not have strict one-to-one mappings:
sessionTargetwakeModedeliverydeleteAfterRun- 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 to1id: stable id of the automationname: automation nameprompt: the prompt that actually performs the taskstatus:ACTIVEorPAUSEDschedule_type:recurringoroncerrule: RRULE used by recurring tasksscheduled_at: execution time of a one-time taskcwds: list of workspace directories used during executionvalid_from/valid_until: optional effective intervalmodel_id/model_is_thinking: optional model parameterspush_to_wechat: optional notification parameters
Rules:
schedule_type = "recurring"when , there must berruleschedule_type = "once"when , there must bescheduled_atpromptcannot be emptycwdsmust 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.webhookUrlis the registered information saved by WorkBuddy; not all channels must have itwechatkfDo not mechanically write it as the structure above; it uses a separate binding mechanismwechatmpBy default, look at the separate switch and do not treat it as an ordinaryclaw.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:
ateverycron
The payload.kind:
agentTurnsystemEvent
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/.envThe entire file~/.openclaw/openclaw.jsonThe entire file.clawhub/lock.json- OpenClaw session logs and runtime state files
Recommended handling:
- Extract only from
.envthe 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
- Check the source path and list which assets actually exist
- Check the WorkBuddy target path and confirm whether files with the same names already exist
- Produce a migration table before taking action
- Before overwriting or heavily merging, back up the target file or directory
- Migrate in this order:
- identity
- memory
- skills
- MCP
- bot/channel bindings
- cron definitions
- For each migratable cron job, generate a WorkBuddy automation TOML
- 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:
- Which parts of the existing WorkBuddy content are persona, tone, and long-term preferences already in effect
- Which parts of the OpenClaw content are stable facts, supplementary settings, and compatible preferences
- Which content is duplicated
- 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:
-
Migrated content
- Asset category
- Source path
- Target path
- Action: copied / merged / created / skipped / manual review
-
Modified files
- Modified file path
- Reason for modification
- Whether it is a merge migration
-
Not migrated or requiring manual handling
- Asset name or path
- Reason
-
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