跳到主要内容

Openclaw Migration

将用户的 OpenClaw 自定义配置迁移到 AigenLabs Agent。从 ~/.openclaw 导入 AigenLabs 兼容的记忆、SOUL.md、命令白名单、用户技能及所选工作区资产,并精确报告无法迁移的内容及原因。

Skill 元数据

来源可选 — 通过 aigenlabs skills install official/migration/openclaw-migration 安装
路径optional-skills/migration/openclaw-migration
版本1.0.0
作者AigenLabs Agent (AigenLabs)
许可证MIT
平台linux, macos, windows
标签Migration, OpenClaw, AigenLabs, Memory, Persona, Import
相关 skillaigenlabs-agent

参考:完整 SKILL.md

信息

以下是 AigenLabs 在触发此 skill 时加载的完整 skill 定义。这是 skill 激活时 agent 所看到的指令内容。

OpenClaw -> AigenLabs 迁移

当用户希望以最少的手动清理将其 OpenClaw 配置迁移到 AigenLabs Agent 时,使用此 skill。

CLI 命令

如需快速、非交互式迁移,使用内置 CLI 命令:

aigenlabs claw migrate              # Full interactive migration
aigenlabs claw migrate --dry-run # Preview what would be migrated
aigenlabs claw migrate --preset user-data # Migrate without secrets
aigenlabs claw migrate --overwrite # Overwrite existing conflicts
aigenlabs claw migrate --source /custom/path/.openclaw # Custom source

CLI 命令运行与下文所述相同的迁移脚本。当需要交互式、引导式迁移并支持 dry-run(预览)和逐项冲突解决时,请通过 agent 使用此 skill。

首次设置: aigenlabs setup 向导会自动检测 ~/.openclaw,并在配置开始前提供迁移选项。

此 skill 的功能

它使用 scripts/openclaw_to_aigenlabs.py 来:

  • SOUL.md 导入 AigenLabs 主目录,保存为 SOUL.md
  • 将 OpenClaw 的 MEMORY.mdUSER.md 转换为 AigenLabs 记忆条目
  • 将 OpenClaw 命令审批模式合并到 AigenLabs command_allowlist
  • 迁移 AigenLabs 兼容的消息设置,例如 TELEGRAM_ALLOWED_USERSMESSAGING_CWD
  • 将 OpenClaw skill 复制到 ~/.aigenlabs/skills/openclaw-imports/
  • 可选地将 OpenClaw 工作区指令文件复制到所选 AigenLabs 工作区
  • 将兼容的工作区资产(如 workspace/tts/)镜像到 ~/.aigenlabs/tts/
  • 归档没有直接 AigenLabs 目标的非机密文档
  • 生成结构化报告,列出已迁移项、冲突项、跳过项及原因

路径解析

辅助脚本位于此 skill 目录下:

  • scripts/openclaw_to_aigenlabs.py

从 Skills Hub 安装此 skill 后,通常位于:

  • ~/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py

请勿猜测更短的路径,如 ~/.aigenlabs/skills/openclaw-migration/...

运行辅助脚本前:

  1. 优先使用 ~/.aigenlabs/skills/migration/openclaw-migration/ 下的已安装路径。
  2. 如果该路径失败,检查已安装的 skill 目录,并相对于已安装的 SKILL.md 解析脚本路径。
  3. 仅在已安装位置缺失或 skill 被手动移动时,才使用 find 作为备用方案。
  4. 调用终端工具时,不要传入 workdir: "~"。请使用绝对目录(如用户主目录),或完全省略 workdir

使用 --migrate-secrets 时,还将导入一小组 AigenLabs 兼容的白名单 secret,目前包括:

  • TELEGRAM_BOT_TOKEN

默认工作流

  1. 首先通过 dry run 进行检查。
  2. 呈现简洁摘要,说明哪些内容可以迁移、哪些不能迁移、哪些将被归档。
  3. 如果 clarify 工具可用,使用它处理用户决策,而非要求自由格式的文字回复。
  4. 如果 dry run 发现已导入 skill 目录存在冲突,在执行前询问处理方式。
  5. 在执行前,请用户在两种支持的迁移模式中选择一种。
  6. 仅在用户希望迁移工作区指令文件时,才询问目标工作区路径。
  7. 使用匹配的 preset 和标志执行迁移。
  8. 汇总结果,重点说明:
    • 已迁移的内容
    • 已归档待手动审查的内容
    • 已跳过的内容及原因

用户交互协议

AigenLabs CLI 支持 clarify 工具进行交互式提示,但有以下限制:

  • 每次只能处理一个选择
  • 最多 4 个预定义选项
  • 自动提供 Other 自由文本选项

支持在单个提示中进行真正的多选复选框操作。

每次 clarify 调用:

  • 必须包含非空的 question
  • 仅对真实可选提示包含 choices
  • choices 限制为 2-4 个纯字符串选项
  • 不得输出占位符或截断选项,如 ...
  • 不得在选项中填充或添加额外空白
  • 不得在问题中包含虚假表单字段,如 在此输入目录、空白行或下划线 _____
  • 对于开放式路径问题,只询问纯文本句子;用户在面板下方的普通 CLI 提示符中输入

如果 clarify 调用返回错误,检查错误文本,修正 payload,并使用有效的 question 和干净的 choices 重试一次。

clarify 可用且 dry run 揭示任何需要用户决策的情况时,下一个动作必须是 clarify 工具调用。 不得以如下普通助手消息结束对话:

  • "让我来呈现选项"
  • "您希望怎么做?"
  • "以下是选项"

如果需要用户决策,在生成更多文字之前通过 clarify 收集。 如果存在多个未解决的决策,不要在它们之间插入解释性助手消息。收到一个 clarify 响应后,下一个动作通常应是下一个必要的 clarify 调用。

当 dry run 报告以下情况时,将 workspace-agents 视为未解决的决策:

  • kind="workspace-agents"
  • status="skipped"
  • 原因包含 No workspace target was provided

在这种情况下,必须在执行前询问工作区指令问题。不得静默地将其视为跳过的决策。

由于上述限制,使用以下简化决策流程:

  1. 对于 SOUL.md 冲突,使用 clarify,选项如:
    • keep existing
    • overwrite with backup
    • review first
  2. 如果 dry run 显示一个或多个 kind="skill" 项的 status="conflict",使用 clarify,选项如:
    • keep existing skills
    • overwrite conflicting skills with backup
    • import conflicting skills under renamed folders
  3. 对于工作区指令,使用 clarify,选项如:
    • skip workspace instructions
    • copy to a workspace path
    • decide later
  4. 如果用户选择复制工作区指令,追加一个开放式 clarify 问题,要求提供绝对路径
  5. 如果用户选择 skip workspace instructionsdecide later,继续执行而不添加 --workspace-target
  6. 对于迁移模式,使用 clarify,提供以下 3 个选项:
    • user-data only
    • full compatible migration
    • cancel
  7. user-data only 表示:迁移用户数据和兼容配置,但导入白名单 secret。
  8. full compatible migration 表示:迁移相同的兼容用户数据,并在存在时导入白名单 secret。
  9. 如果 clarify 不可用,以普通文本提出相同问题,但仍将答案限制为 user-data onlyfull compatible migrationcancel

执行门控:

  • 当由 No workspace target was provided 导致的 workspace-agents 跳过仍未解决时,不得执行。
  • 唯一有效的解决方式为:
    • 用户明确选择 skip workspace instructions
    • 用户明确选择 decide later
    • 用户在选择 copy to a workspace path 后提供了工作区路径
  • dry run 中缺少工作区目标本身并不构成执行许可。
  • 当任何必要的 clarify 决策仍未解决时,不得执行。

使用以下精确的 clarify payload 形式作为默认模式:

  • {"question":"Your existing SOUL.md conflicts with the imported one. What should I do?","choices":["keep existing","overwrite with backup","review first"]}
  • {"question":"One or more imported OpenClaw skills already exist in AigenLabs. How should I handle those skill conflicts?","choices":["keep existing skills","overwrite conflicting skills with backup","import conflicting skills under renamed folders"]}
  • {"question":"Choose migration mode: migrate only user data, or run the full compatible migration including allowlisted secrets?","choices":["user-data only","full compatible migration","cancel"]}
  • {"question":"Do you want to copy the OpenClaw workspace instructions file into a AigenLabs workspace?","choices":["skip workspace instructions","copy to a workspace path","decide later"]}
  • {"question":"Please provide an absolute path where the workspace instructions should be copied."}

决策到命令的映射

将用户决策精确映射到命令标志:

  • 如果用户对 SOUL.md 选择 keep existing添加 --overwrite
  • 如果用户选择 overwrite with backup,添加 --overwrite
  • 如果用户选择 review first,在执行前停止并审查相关文件。
  • 如果用户选择 keep existing skills,添加 --skill-conflict skip
  • 如果用户选择 overwrite conflicting skills with backup,添加 --skill-conflict overwrite
  • 如果用户选择 import conflicting skills under renamed folders,添加 --skill-conflict rename
  • 如果用户选择 user-data only,使用 --preset user-data 执行,添加 --migrate-secrets
  • 如果用户选择 full compatible migration,使用 --preset full --migrate-secrets 执行。
  • 仅在用户明确提供绝对工作区路径时,才添加 --workspace-target
  • 如果用户选择 skip workspace instructionsdecide later,不添加 --workspace-target

执行前,用简洁语言重述精确的命令计划,并确保其与用户的选择一致。

运行后报告规则

执行后,将脚本的 JSON 输出作为事实来源。

  1. 所有计数基于 report.summary
  2. 仅当 status 恰好为 migrated 时,才将该项列入"已成功迁移"。
  3. 除非报告显示该项为 migrated,否则不得声称冲突已解决。
  4. 除非 kind="soul" 的报告项 status="migrated",否则不得声称 SOUL.md 已被覆盖。
  5. 如果 report.summary.conflict > 0,包含冲突部分,而非静默暗示成功。
  6. 如果计数与列出的项不一致,在回复前修正列表以匹配报告。
  7. 在可用时包含报告中的 output_dir 路径,以便用户检查 report.jsonsummary.md、备份和归档文件。
  8. 对于记忆或用户档案溢出,除非报告明确显示归档路径,否则不得声称条目已被归档。如果 details.overflow_file 存在,说明完整溢出列表已导出到该位置。
  9. 如果 skill 以重命名文件夹导入,报告最终目标并提及 details.renamed_from
  10. 如果 report.skill_conflict_mode 存在,将其作为所选已导入 skill 冲突策略的事实来源。
  11. 如果某项 status="skipped",不得将其描述为已覆盖、已备份、已迁移或已解决。
  12. 如果 kind="soul"status="skipped" 且原因为 Target already matches source,说明其保持不变,不提及备份。
  13. 如果重命名的已导入 skill 的 details.backup 为空,不得暗示现有 AigenLabs skill 已被重命名或备份。仅说明已导入的副本被放置在新目标位置,并将 details.renamed_from 作为保持原位的已有文件夹引用。

迁移 preset

正常使用时优先选择以下两个 preset:

  • user-data
  • full

user-data 包含:

  • soul
  • workspace-agents
  • memory
  • user-profile
  • messaging-settings
  • command-allowlist
  • skills
  • tts-assets
  • archive

full 包含 user-data 中的所有内容,另加:

  • secret-settings

辅助脚本仍支持类别级别的 --include / --exclude,但将其视为高级备用方案,而非默认用户体验。

命令

完整发现的 dry run:

python3 ~/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py

使用终端工具时,优先使用绝对调用模式,例如:

{"command":"python3 /home/USER/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py","workdir":"/home/USER"}

使用 user-data preset 的 dry run:

python3 ~/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py --preset user-data

执行 user-data 迁移:

python3 ~/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py --execute --preset user-data --skill-conflict skip

执行完整兼容迁移:

python3 ~/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py --execute --preset full --migrate-secrets --skill-conflict skip

包含工作区指令的执行:

python3 ~/.aigenlabs/skills/migration/openclaw-migration/scripts/openclaw_to_aigenlabs.py --execute --preset user-data --skill-conflict rename --workspace-target "/absolute/workspace/path"

默认情况下不要使用 $PWD 或主目录作为工作区目标。请先明确询问工作区路径。

重要规则

  1. 除非用户明确表示立即执行,否则在写入前先运行 dry run。
  2. 默认不迁移 secret。Token、认证 blob、设备凭据和原始 gateway 配置应保留在 AigenLabs 之外,除非用户明确要求迁移 secret。
  3. 除非用户明确要求,否则不得静默覆盖非空的 AigenLabs 目标。辅助脚本在启用覆盖时会保留备份。
  4. 始终向用户提供跳过项报告。该报告是迁移的一部分,而非可选附加内容。
  5. 优先使用主 OpenClaw 工作区(~/.openclaw/workspace/)而非 workspace.default/。仅在主文件缺失时才使用默认工作区作为备用。
  6. 即使在 secret 迁移模式下,也只迁移具有干净 AigenLabs 目标的 secret。不支持的认证 blob 仍须报告为已跳过。
  7. 如果 dry run 显示大型资产复制、冲突的 SOUL.md 或溢出的记忆条目,在执行前单独指出这些情况。
  8. 如果用户不确定,默认选择 user-data only
  9. 仅在用户明确提供目标工作区路径时,才包含 workspace-agents
  10. 将类别级别的 --include / --exclude 视为高级逃生通道,而非正常流程。
  11. 如果 clarify 可用,不得在 dry run 摘要结尾使用含糊的"您希望怎么做?"。改用结构化的后续提示。
  12. 当真实选择提示可用时,不要使用开放式 clarify 提示。优先使用可选选项,仅对绝对路径或文件审查请求使用自由文本。
  13. dry run 后,如果仍有未解决的决策,不得在摘要后停止。立即对最高优先级的阻塞决策使用 clarify
  14. 后续问题的优先顺序:
    • SOUL.md 冲突
    • 已导入 skill 冲突
    • 迁移模式
    • 工作区指令目标
  15. 不得在同一消息中承诺稍后呈现选项。通过实际调用 clarify 来呈现它们。
  16. 在收到迁移模式答案后,明确检查 workspace-agents 是否仍未解决。如果是,下一个动作必须是工作区指令的 clarify 调用。
  17. 在任何 clarify 答案之后,如果还有其他必要决策待处理,不要叙述刚刚决定的内容。立即提出下一个必要问题。

预期结果

成功运行后,用户应拥有:

  • 已导入的 AigenLabs persona 状态
  • 已填充转换后 OpenClaw 知识的 AigenLabs 记忆文件
  • ~/.aigenlabs/skills/openclaw-imports/ 下可用的 OpenClaw skill
  • 显示任何冲突、遗漏或不支持数据的迁移报告