2458 字
约 8 分钟
1
搬家只搬对得上的字段
无标签

OpenAI Codex · 插件市场 搬家只搬对得上的字段 换到 Codex 的第一周,最怕去年攒的 hook、MCP 和插件还在不在。检测会列出一份清单。导入只收下能映射的那一部分。 一句话速览 换到 Codex 的第一周,最怕去年攒的 hook、MCP 和插件还在不在。检测会列出一份清单。导入只收下能映射的那一部分。

课程目标 读完能说清三件事。搬家源只有 Claude Code 和 Cursor。每条字段走原样搬走、改写、丢掉三条出口之一。插件只从用户级装,远程市场和会话要等后台。

先玩一遍 · 逐字段看搬走还是丢掉

一份家当过白名单:原样、改写、搬不了

播放 单步 重置

源

Claude Code Cursor

memory

关 开

会话

10 天 40 天

点卡片可移出家当。切源、开关或会话年龄会重跑。Cursor 不支持 memory,仓库里的插件会被丢掉。

检测 映射 重写 导入

原样 0 改写 0 搬不了 0 后台 0

源字段

Codex 落点

逻辑轨迹 · 动画每一步对应源码里的哪一段

按字符串选择 Cla 或 Cur,对不上就落到 Claude Code migration_source.rs L59 先扫用户级配置,仓库范围不跑插件检测 detect/mod.rs L330 会话按 30 天和 50 条过滤,太旧的丢掉 sessions/common.rs L43 memory 要源支持,还要单独打开特性开关 detect/mod.rs L59 hook 只留同步 command,prompt 整条跳过 hooks_cla.rs L135 MCP 命令里出现 ${,整台 server 不要 mcp.rs L208 市场来源只收 git 家族和本地目录,npm 丢掉 source_cla.rs L270 说明文件改名,产品名按词边界改写成 Codex rewrite.rs L39 同步 import 对 Sessions 直接返回成功 service.rs L437 后台再写 thread,远程插件后装;开关关则拒绝 memory processor.rs L184

点播放,看每条字段走原样搬走、改写,还是丢掉。

三条出口 对得上的字段走拷或改。prompt hook、npm 市场、带占位符的 MCP,不会出现在成功清单里。 插件只从 home 装 仓库里的启用名单不能当安装权威。远程市场推进待装队列,不在同步阶段装完。 同步先回执 会话可以出现在检测清单里。同步 import 什么都不写,thread 留给后台。

教学示意:家当为课程化样例,hook 与 MCP 只用无害命令。逻辑轨迹右侧行号对应 openai/codex 仓库 commit 4f39251a01。

思路一 · 三条出口:原样、改写、丢掉

它解决什么问题 有人告诉你会自动从 Claude Code 搬家。你以为是把整个配置目录拷过来。第二天 hook 少了一条,MCP 少了一台,memory 没出现在清单里。少掉的 hook 用了 type: prompt 。少掉的 MCP 命令里写了 ${API_KEY} 。 再换一个同事。他用的是 Cursor。Codex 能看见他的 skill 和 hook,看不见他的 memory。仓库里的 Cursor 插件配置会被直接丢掉。

思路是什么 搬家 crate 只负责把外部配置读进来。插件怎么跑,在旁边的 core-plugins 。源在类型上只有两个变体: Cla 是 Claude Code, Cur 是 Cursor。字符串对不上 cursor ,就落到 Claude Code。调用方漏传源,检测会去翻 ~/.claude 。 出处: codex-rs/external-agent-migration/src/migration_source.rs 第 51 至 67 行 一次检测最多产出十种条目。每种后面的导入必须给一个去处。字段先过白名单。Codex 认 11 个 hook 事件,Claude Code 发出 27 个。名字对不上的组,整组消失。单条 hook 的 type 默认当 command ,对不上就跳过。MCP 的 command 或 url 里出现 ${ ,整台不要。市场来源只收 github、git、本地目录。 file 、 url 、 npm 、 settings 直接丢掉。 出处: codex-rs/external-agent-migration/src/model.rs 第 53 至 64 行 · codex-rs/hooks/src/lib.rs 第 23 至 35 行 · restored-src/src/entrypoints/sdk/coreSchemas.ts 第 355 至 383 行 · codex-rs/external-agent-migration/src/hooks_cla.rs 第 131 至 137 行 · codex-rs/external-agent-migration/src/mcp.rs 第 204 至 210 行 · codex-rs/external-agent-migration/src/source_cla.rs 第 270 至 274 行 然后说明文件要改名。 CLAUDE.md 变成 AGENTS.md 。产品名按词边界改成 Codex。Cursor 只用大小写敏感的 Cursor ,避免把普通英文 cursor 一起改掉。 出处: codex-rs/external-agent-migration/src/rewrite.rs 第 38 至 49 行

源字段 hook / MCP / 市场

白名单 名字、类型、来源

原样搬走 同步 command hook

改写 CLAUDE.md 改名,MCP 改成 TOML

丢掉 prompt hook、npm 市场、${} MCP 输入是一条竞品字段。发生的是白名单判定。输出是拷、改、丢之一。

教学化结构图:搬家不是整目录拷贝,每条字段单独走出口。

为什么长期成立 导入器的通用形状是白名单加三条出口。对不上的字段丢掉,不要改写成近似物。prompt hook 不会被塞进 command。带占位符的 MCP 不会被瞎展开。换个语言重写,这份表还用得上。

思路二 · 插件只从用户级装,慢活进后台

它解决什么问题 Claude Code 允许仓库 settings 带着启用插件名单,同事克隆之后自动有同一批插件。对 Codex 来说,仓库里的启用名单不能当安装权威。装上去会进用户配置。不可信仓库想在你机器上装可执行内容,这条路要先切断。

思路是什么 检测只在 home 扫插件。注释写死了:仓库控制的 settings 不能当安装权威。Cursor 只要看见仓库根,插件检测直接返回空。导入看见非空工作目录,报 repository-scoped plugin migration is not allowed 。 出处: codex-rs/external-agent-migration/src/detect/mod.rs 第 330 至 332 行 · codex-rs/external-agent-migration/src/migration_source.rs 第 116 至 125 行 · codex-rs/external-agent-migration/src/plugins.rs 第 26 至 36 行 本地插件当场装。远程市场推进待装队列。会话也是两截:检测清单里可以有,同步 import() 对 Sessions 直接返回成功,什么都不写。真正写成 Codex thread 的,是 app-server 里的后台任务。调用方先拿到 import_id 。 出处: codex-rs/external-agent-migration/src/service.rs 第 437 行 · codex-rs/app-server/src/external_agent_migration/session_importer.rs 第 100 至 111 行 Codex 认市场清单时,按固定相对路径找第一个存在的文件。四条路径里两条是自己的,两条是竞品的。同一套查找同时服务「用户主动加市场」和「从竞品搬市场」。 出处: codex-rs/core-plugins/src/marketplace.rs 第 20 至 25 行

检测 home 加仓库

同步导入 配置、hook、本地插件

import_id 先回一张收据

后台写 thread Sessions 同步是空操作

后台装远程插件 git clone 可能要几十秒

输入是检测清单。发生的是能立刻落盘的先做完。输出是收据加后台任务。

教学化时序图:同步阶段承认「看见了」,慢活留给后台。

为什么长期成立 可执行内容的安装权威必须落在用户级。面向任意 git clone 的产品,home-only 更稳。同步先回执、慢活进后台,是长任务接口的通用形状。

思路三 · 目标非空不覆盖

它解决什么问题 换产品最怕把已经改过的新配置盖掉。目标 hooks.json 里已经有内容,整文件替换会把用户手写的 hook 冲掉。

思路是什么 目标 hook 文件非空,整项取消。已有 config.toml 只补缺失键。MCP 同名 server 保留旧的。第一次搬家像填空。第二次再点迁移,多数条目会因为已经有了而不出现。 出处: codex-rs/external-agent-migration/src/hooks_common.rs 第 13 至 19 行 memory 另有一道门。特性开关默认关,阶段是 UnderDevelopment。检测函数不看这个开关,导入前处理器会查。关着就回 external agent memory import is disabled 。导入按字节拷贝,不脱敏。 出处: codex-rs/features/src/lib.rs 第 998 至 1003 行 · codex-rs/app-server/src/external_agent_migration/processor.rs 第 180 至 185 行

对得上的字段走拷或改,对不上的丢掉。

为什么长期成立 导入是填空。用户已经写过的文件,搬家碰不得。memory 默认关,是因为另一家 agent 的项目记忆会按明文进盘。

横向对比 · 同一批扩展,要不要读进来

DeepSeek Harness:不搬家,再装一次 DSH 的插件入口是 thin pnpm forwarder。初始化 profile,在 profile 目录里跑 pnpm,再按安装结果调和清单。插件是 npm 包。没有检测 Claude Code,没有导入 Cursor hook。换产品要自己重装。代价是用户税。好处是不用对一家不断加字段的 settings schema 做永久兼容。 已核对 apps/cli/src/plugin.ts 第 120 至 133 行 · 2026-08-22

Grok:自建市场,不搬竞品 Grok 从市场根加相对路径拷进自己的安装登记,并写下 provenance。相对路径禁止 .. 、绝对路径和盘符。没有 plugin.json 但根上有 SKILL.md 时,它会补一份合成清单。市场对象是一份自己的目录加来源记录。它不读用户在另一家里启用过的插件。 已核对 crates/codegen/xai-grok-plugin-marketplace/src/installer.rs 第 36 至 45 行 · 2026-08-22 · Grok · 插件市场的发现与信任

课堂练习

01

哪些字段会进清单 桌上有四条 Claude Code 资产: PreToolUse 的 type: command hook、同事件的 type: prompt hook、一台 command 含 ${API_KEY} 的 MCP、一条 40 天前的会话。对照上面的白名单,列出检测清单里应出现和不应出现的条目。 再补一问:调用方何时收到 import_id ,这条会话何时变成 thread。开关关着的 memory 若被送去导入,会在哪一扇门被挡回来。

Takeaway: 搬家是检测加映射加重写。对得上的字段走拷或改,对不上的丢掉。插件只从用户级装,会话和远程市场进后台。目标非空不覆盖。

搬家只搬对得上的字段
http://www.clxhxhhr.top/posts/4070/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。