
最近我这边经历了两次工作流的“大搬家”先是把 Claude Code 的插件从十几个精简到三个然后又花了一整天把整套配置迁移到 Codex。网上关于 Claude Code 插件怎么选、要不要迁移到 Codex 的讨论炸成一锅粥但大多是安装教程和功能罗列真正聊“选择逻辑”和“迁移坑位”的少之又少。这篇就当作一次踩坑复盘把我在插件选型、dsh plugin 管理、cc switch 配置切换以及 Codex 迁移过程中遇到的问题一次说清楚。我会按实际操作的顺序来先讲 Claude Code 插件的底层机制再给一套筛选插件的判断标准接着对比 Codex 和 Claude Code 的核心差异给出迁移前要盘点的四样东西然后记录从安装到切换的完整实操流程最后把那些高频报错和排查方法整理成速查表。无论你是刚接触 CLI 编程助手的新手还是已经在生产环境重度使用 Claude Code 的老手这篇文章应该都能帮你少走几小时弯路。1. 先搞清楚Claude Code 插件到底在解决什么问题1.1 插件机制的本质MCP、Hooks 与自定义命令Claude Code 的插件机制本质上是给这个基于命令行的 AI 编程助手“外挂工具箱”。它目前主要由三块组成MCPModel Context Protocol服务器、Hooks 钩子规则以及自定义 Slash Commands。MCP 服务器是其中最核心的部分你可以把它理解成“快递接口”。Claude Code 本身不内置浏览器、不内置数据库客户端但它可以通过 MCP 协议去连接一个外部服务让模型获得搜索网页、读取数据库、操作文件系统的能力。选插件的时候优先看它是不是纯 MCP 实现因为有标准协议保证之后迁移到别的支持 MCP 的工具比如 Codex 也支持 MCP时可以直接复用不用推倒重来。Hooks 则是让 Claude Code 在特定事件发生时执行自定义脚本的机制。比如任务开始前自动拉取最新代码、生成提交信息前跑一遍 lint、每次响应结束后把 token 消耗写入本地日志。这类插件和你的开发环境强绑定迁移成本最高我一般不建议选太多带 Hooks 的插件除非它解决的是硬性刚需。自定义命令就很好理解了相当于给 Claude Code 扩展一套“快捷指令”比如/review触发代码评审流程/commit按团队规范生成提交信息并自动执行。这部分逻辑在迁移到 Codex 时不能直接搬需要改写成 Codex 的指令文件我后面会详细说。1.2 为什么突然要面对“怎么选”这个问题插件数量暴增是真的让“选”变成了一个难题。早期 Claude Code 刚火的时候插件不过几十个扫一眼 awesome 列表就差不多心里有数。现在你在搜索引擎里搜 Claude Code plugin能翻出几百个项目还有各种“awesome dsh plugin”这种按话题聚合的资源清单鱼龙混杂。更麻烦的是很多工具名字里带 plugin但根本不是 Claude Code 的插件。比如 dsh plugin 是另一套开发环境管理工具cc switch 是配置切换器它们虽然经常和 Claude Code 一起出现在讨论里但作用的层级完全不同。如果这一步没分清后面选型、迁移、排错都会很痛苦。选择错误的代价也不低。插件机制给了 AI 很强的执行能力也就意味着插件本质上拥有你本地环境的操作权限。一个没人维护的插件可能带着过时的依赖、不安全的脚本甚至会在你不知不觉中修改项目文件。我在实践中见过一个“代码统计”插件会在分析完项目后自动向外发送 HTTP 请求这种插件我是绝对不敢用的。1.3 选插件的四个硬指标我自己在筛选插件时固定看四个指标可以做成一张表直接对照指标判断标准不达标的表现活跃度最近三个月内是否有 release 或 commitIssues 是否有维护者回复一年不更新Issues 堆积没人管权限边界是否明确声明了所需权限是否只读取必要路径安装时无提示就要求全局读写、允许执行任意命令协议标准性是否基于 MCP、是否在配置中声明 MCP server大量依赖自有协议、锁死自家生态可迁移性配置是否集中在单一 JSON / TOML 文件绑定特定目录、深度依赖 Claude Code 内部 API这四条里很多人只看前两条忽略后两条。但实际上“可迁移性”才是决定你半年后要不要再折腾一次大迁移的根源。你想想如果你选的每个插件都是 MCP 标准协议那么 Codex 支持 MCP 的今天你的插件事项基本可以平移过去。如果全是绑定 Claude Code 私有 API 的插件那迁移成本会高到让你宁可留在原地。2. 插件怎么选别追星按工作流来2.1 分类看你大概率只需要这几类插件聊完机制聊聊具体选型。网络上热词里经常出现“awesome dsh plugin”“dsh market”这类列表但我的建议是插件不是越多越好按工作流缺口来补。我总结下来日常开发真正高频用到的大概就这几类第一类是搜索和网页读取能力。Claude Code 默认对本地代码库理解很强但对“最新文档里某个 API 怎么用”这种事搜索能力有限。这时候加一个带网页搜索功能的 MCP 插件就能让它自动拉取官方文档再回答而不是靠训练数据里的过时记忆。第二类是记忆和上下文管理。比如在多个项目之间切换时让 Claude Code 记住你常用的一些偏好设置比如“测试文件放tests/目录”“变量命名用下划线风格”。这类记忆插件对长期使用很有价值但要注意它本质上是在写配置文件侵入性如果太强会导致项目里到处是它的元数据文件。第三类是执行和验证插件比如让它跑测试、做静态检查、自动修复 lint 错误。这类插件最能提升效率但如果权限管控不好也是最危险的尽量只让它操作当前项目目录不要给它全局权限。第四类是代码评审和架构分析。通过 MCP 服务把自己代码库的依赖关系和调用链暴露给模型让 Claude Code 能回答“这个改动会影响哪些模块”这样的问题。这类插件对老旧项目尤其有用。2.2 看见“名字像插件但不是插件”的工具在选型过程中一定绕不开三个高频热词dsh plugin、cc switch、Codex。它们之间容易混淆我明确说一下它们的定位。dsh 是一套开发环境的插件管理系统常见命令形如dsh plugin --profile web add dshmarket。它管理的对象是开发环境本身——比如你的 shell profile、工具链版本、项目启动脚本。它不是 Claude Code 的插件但有些社区会通过 dsh 来批量管理 Claude Code 的配置模板相当于在环境层面做一键初始化。cc switch 则是典型的“配置切换器”解决的是多环境并存问题。你可能在不同项目中用不同的 Claude Code 配置一个项目用默认 Anthropic API另一个项目要走本地模型比如 ollama还有一个项目要临时接兼容接口。cc switch 可以集中管理这些配置按项目快速切换同时它也逐步支持切换到 Codex 的配置。所以你真正需要选的 Claude Code 插件是那些能给模型增加能力的 MCP serverdsh 和 cc switch 更像是“管理这些配置和环境”的上位工具。理解这个层级关系后你就会发现网上的报错——比如dsh: plugin tree failed to load或者cc switch local proxy failed——其实跟 Claude Code 插件本身没关系问题出在环境管理器或配置切换器上。排查方向完全不同。2.3 选型清单与试用方法我建议所有插件都先过一遍试用流程再进生产环境别看到 awesome 列表里有就直接装。第一步先研究它的 README 和配置说明。重点看安装命令里有没有往全局路径写文件配置是否集中在一个文件里启动时是否会运行带副作用的脚本。第二步在一个隔离目录里安装并启用跑一个最简单的任务确认它能工作。第三步观察它生成的配置和日志确认没有偷偷修改项目其他目录。第四步跑完一周后看它有没有拖慢响应速度或产生大量无意义调用。如果你管理的是一个多人协作仓库还需要检查插件配置是否会被提交到仓库里影响别人。我个人倾向于把插件配置放在用户级目录而不是项目级目录这样团队成员各自有各自的工具选型也能减少“我这边跑得好好的你那边报错”的问题。3. 迁移到 Codex核心差异与迁移图谱3.1 为什么从 Claude Code 迁到 Codex这个问题我被人问过很多次Codex 和 Claude Code 到底哪个强正确答案是——看场景。Claude Code 的优势在代码理解深度和长链路任务的执行稳定性尤其是超大仓库、跨多文件的复杂重构Claude 模型在规划能力上给我的体感更好。Codex 的优势则在批量任务执行效率、沙箱隔离机制和 OpenAI 系模型的原生支持而且它的 AGENTS.md 规则体系更轻量团队分发规则时更清爽。促使我实际动手迁移的其实有两个现实原因。一是资源管理更顺滑Codex 的配置更集中一个配置文件就能管住模型选择、指令文件、沙箱模式不像 Claude Code 这边要同时维护很多插件的分散配置。二是团队协作需要我们组的代码评审流程开始转向 Codex 的指令文件体系同一个模型、同一套规则在本地 CLI 和 CI 里表现一致这个优势对多人协作很关键。但我也要泼一盆冷水如果你深度使用了 Claude Code 的 Hooks 体系和大量非 MCP 插件迁移会非常痛苦。建议先把迁移成本预估出来再决定动不动。3.2 迁移前要盘点四样东西迁移不能拍脑袋直接删配置我列了一个盘点清单按依赖程度倒序处理第一样插件清单按 MCP 和非 MCP 分类。所有基于 MCP 的插件理论上 Codex 都能复用只需将插件配置里的mcpServers部分导出并重新注册即可。非 MCP 插件比如依赖 Claude Code 私有 API 的基本要放弃或寻找替代方案。第二样CLAUDE.md 规则文件。这是 Claude Code 的项目级行为规范文件迁移时需要改写为 Codex 的 AGENTS.md。语法和读取逻辑不完全一样Claude Code 里的path/to/file引用、权限描述表达式都需要逐条检查。第三样自定义命令。Claude Code 的自定义 Slash Commands 是一套交互层的快捷指令Codex 没有完全对应的机制但它支持通过配置文件定义指令模板也可以靠支持codex exec的脚本封装成 shell 命令绕过去。第四样环境变量和 API 配置。比如ANTHROPIC_API_KEY换成OPENAI_API_KEYANTHROPIC_BASE_URL换成 Codex 的 endpoint 配置模型名也要顺手核对。如果之前接的是 ollama 这类本地模型还要确认 Codex 客户端能否直接支持 OpenAI 兼容的本地端点。3.3 用 cc switch 管理两个 CLI 的配置切换我在迁移过程中没有完全扔掉 Claude Code而是用 cc switch 做“双工具并行”的管理层。cc switch 的核心价值在于把分散的配置文件集中到一个管理界面下为一个工作区创建多个 profile比如profile-anthropic、profile-codex、profile-local-ollama。每个 profile 里记录对应工具的 API endpoint、模型名、认证信息、插件开关状态。切换时执行一条命令所有配置即刻生效不需要手动去改环境变量。对于还在观望、不想立刻全量迁移的团队这个方案非常友好。但也要注意社区版 cc switch 的本地代理机制偶尔会有问题。我遇到过cc switch local proxy failed while handling codex endpoint /responses的报错后面我会展开讲排查思路。这里只提醒一点cc switch 的 local proxy 本质是把请求转发给指定的 endpoint如果你配的 endpoint 本身不通或者本地代理监听的端口被占用就会报这类错误不是 Codex 本身的问题。3.4 迁移后的启动检查迁移完成后先别急着在真实项目里跑我建议按下面几步做启动检查先执行codex --version确认命令行工具可用。然后运行codex login确认认证状态或者检查环境变量OPENAI_API_KEY是否已正确设置。接着新建一个临时测试目录写一个极简的 AGENTS.md让 Codex 执行一个最简单的任务确认它能读取指令并正常响应。最后再用codex exec describe this repository在真实仓库里跑一次观察它能否在沙箱内正常读取文件。如果你的目标是接入 OpenAI 兼容接口比如 DeepSeek 或者本地 ollama还要额外核对 endpoint 路径。Codex 默认请求的是/responses端点很多兼容服务只实现了老式的/chat/completions端点两边对不上自然跑不通。这个细节非常关键我见过太多人卡在这一步。4. 实操记录从安装到切换的完整流程4.1 Claude Code 安装与插件目录基线先说 Claude Code 的安装基线和插件目录因为后面排查报错时你会频繁用到这些路径。Claude Code 官方安装方式是通过 npm 全局安装npm install -g anthropic-ai/claude-code claude --version安装完成后插件相关的配置主要落在用户目录下~/.claude/plugins/ # 全局插件配置目录 ~/.claude/plugins/config.json # 插件启停和 MCP server 声明 ~/.claude.json # 项目和用户级配置的混合文件如果你在 VS Code 里也想用 Claude Code可以直接在扩展市场搜 “Claude Code” 安装官方扩展它会复用命令行版本的登录态和插件配置。这里唯一要注意的是 VS Code 扩展的 Node 版本要求太老的运行时会导致插件加载失败。4.2 dsh plugin 的安装与常见命令作为环境管理工具dsh plugin 在流程里解决的是“一键装好整套开发环境”的问题。常见用法是dsh plugin --profile web add dshmarket dsh plugin list dsh run第一条命令是从 dsh market 里给当前 profile 添加插件添加后能在dsh plugin list里看到。如果你看到dsh: plugin tree failed to load: failed to apply loader entry include意思是插件树在加载某个配置时出错多数是某个插件的include指令指向了不存在的文件。解决方案是找到对应 profile 里的插件配置文件注释或删除有问题的 include 行再重新运行dsh plugin list验证。dsh plugin 和 Claude Code 插件属于两个层级但实际操作中它们会互相影响。比如你的 dsh profile 里配置了node版本 16但 Claude Code 最新版要求 Node 18 以上那启动时就会莫名报错。排查思路永远是先看环境层再看工具层顺序不能反。4.3 cc switch Codex endpoint 配置实战我迁移时的核心配置动作都集中在 cc switch下面给一份可直接照抄的配置参考。先安装 cc switchnpm install -g cc-switch cc-switch list创建 profile 之后编辑 profile 配置核心字段大致如下{ profiles: { codex-openai: { provider: codex, apiKeyEnv: OPENAI_API_KEY, baseUrl: https://api.openai.com/v1, model: gpt-5-codex, endpoint: /responses }, codex-deepseek: { provider: codex, apiKeyEnv: DEEPSEEK_API_KEY, baseUrl: https://api.deepseek.com/v1, model: deepseek-chat, endpoint: /chat/completions }, local-ollama: { provider: codex, apiKeyEnv: OLLAMA_API_KEY, baseUrl: http://localhost:11434/v1, model: qwen2.5-coder, endpoint: /chat/completions } } }重点看endpoint这个字段。Codex 官方默认走/responses端点而 DeepSeek 和许多本地模型服务只兼容/chat/completions。如果混用就会出现cc switch local proxy failed while handling codex endpoint /responses这类报错。出现这个错误时第一反应是去确认 endpoint 是否匹配不是去重装工具。配置完成后建议在目标项目目录先执行一条基本命令验证codex exec list the top-level files and summarize the project structure如果能正常输出说明认证、endpoint、沙箱三项都没问题。4.4 迁移后的 AGENTS.md 改写模板最后给一份 CLAUDE.md 迁移到 AGENTS.md 的对照示例帮助你理解两边规则文件的核心差异。Claude Code 的规则文件常见长这样# CLAUDE.md ## 项目说明 这是一个电商后端服务使用 Go 编写。 ## 代码风格 - 错误处理必须显式返回 error禁止 panic - 包名使用短小单词避免缩写 ## 常用命令 - 构建: go build ./... - 测试: go test ./...迁移到 Codex 的 AGENTS.md 时除了格式转换还需要考虑执行层# AGENTS.md ## 项目说明 电商后端服务Go 语言。 ## 编码约定 - 显式返回 error禁止 panic - 包名短小避免缩写 ## 工作流 - 代码变更前先运行: go build ./... - 代码变更后必须运行: go test ./...从实际效果看Codex 对 AGENTS.md 的指令遵守度很高尤其是“变更后必须跑测试”这类约束性描述比 Claude Code 更稳定。但反过来Claude Code 对“自然语言描述的架构理解”更强所以迁移时不要盲目照搬要重新审视每条规则在目标工具下是否还有必要。5. 高频报错与排查经验5.1 三个让新手崩溃的启动报错整理一下我遇到过的、以及社区里高频出现的几个报错。这些报错在搜索引擎里排名很靠前很多人第一眼就懵了。报错一dsh: plugin tree failed to load: failed to apply loader entry include这个和 Claude Code 没有任何关系是 dsh 环境管理器在加载插件树时某个插件的 include 指令失效了。常见原因是插件配置文件里include指向的文件被移动或删除或者是目录权限不够。排查步骤先用dsh plugin list --verbose看加载路径找到报错的插件然后打开对应的 profile 配置文件检查include路径是否存在临时修复可以先注释掉这一行重新加载。报错二cc switch local proxy failed while handling codex endpoint /responses这个报错我在 4.3 里提过本质是本地代理转发失败。常见的三个原因endpoint 路径不匹配、本地代理端口被占用、认证信息没注入。排查步骤先确认你选的 profile 用的 endpoint 是/responses还是/chat/completions再看本地代理日志确认请求有没有发出最后检查 API Key 环境变量是否正确传入。报错三error: agent harness runtime codex is unavailable because its plugin registry failed to load这个报错比较新和 Codex 插件注册表加载失败有关。Codex 的 harness 是它的沙箱运行时插件注册表里记录了可用的能力扩展。注册表配置损坏或者某些插件依赖缺失就会导致 runtime 整体不可用。排查步骤清理或重置 Codex 的插件注册表缓存然后恢复到默认配置再逐个添加插件确认是哪一个导致问题。5.2 排查思路日志、配置路径、最小复现遇到报错别慌也不要急着去网上复制卸载重装命令。按照日志定位、配置核对、最小复现三步来大部分问题都能在 10 分钟内解决。先说日志。Claude Code 的日志通常在~/.claude/logsCodex 的日志在~/.codex/log或终端内嵌的 tracing 输出。cc switch 也会有自己的 log 目录。排查时先看最后 20 行日志基本能定位到是配置问题还是网络问题。再核对配置。我见过太多人折腾了半天最后发现是环境变量写错位置或者配置文件被格式化成非法 JSON。所以任何一个配置调整后先跑一条最简单的命令验证再跑复杂的。最后是最小复现。如果你改了插件或者 profile先把所有插件禁用只留核心配置跑一次能跑通再逐个启用插件定位元凶。这个方法虽然笨但在插件数量多的时候反而是最快的排错策略。5.3 一句话避坑清单下面是我在实际操作中沉淀下来的一小段经验每一条都对应过我踩过的坑值得截图收藏node 版本优先考虑到 20 LTS很多插件加载问题其实是版本不一致引起的。插件配置、API Key、模型名这类信息统一放在环境变量和集中配置文件里不要散落在 shell rc 文件到处 export。迁移到 Codex 之前把 CLAUDE.md 和插件清单一起备份万一要回滚是救命稻草。看到带 plugin 字样的报错先确认报错来自哪个程序是 dsh、cc switch还是某个 MCP server对象搞错了排查方向就全错了。搜索引擎里混着大量与 AI 编程无关的同名 plugin 报错比如 MySQL 认证插件加载失败、Flutter Gradle 插件应用失败这些和 Claude Code / Codex 完全不搭边先对一下报错来源的程序名再浪费时间。用 cc switch 这类工具时每次修改配置后先跑一次codex exec的最小任务能通再继续否则你知道是配置改坏了而不是模型出了问题。搞完这一轮迁移我自己最大的感受是工具永远在变但沉淀下来的选择标准、配置管理习惯和排错方法论不会变。今天你为了 Claude Code 选插件琢磨的那套判断框架明天换到 Codex、换到其他 AI 编程工具照样用得上。所以与其纠结哪个工具是最终答案不如把时间花在怎么建立一套“不依赖具体工具”的工作流上——规则文件怎么提炼、MCP 配置怎么复用、插件权限怎么管控这些才是以后真正省时间的地方。