1. 项目概述:一次工作流底层逻辑的迁移,而非简单模型替换
“从 Codex 到 OpenWorkBuddy:我换的不是模型,而是 Agent 工作台”——这句话乍看像一句技术营销话术,但如果你真在一线跑过 AI 工具链、搭过本地 Agent、调试过 MCP 协议流、被codex cli的/responsesendpoint 报错卡住过三小时,你就会明白:这根本不是“换个模型 API 地址”这么轻巧的事。它是一次工作台级重构:把原来依附于 Codex CLI 的命令行胶水层、硬编码的工具调用逻辑、零散的 MCP 适配器、以及所有靠zcode cli或ruoyi-vue-pro合并补丁勉强维持的流程,全部推倒,换成 OpenWorkBuddy 提供的标准化 Agent 运行时、声明式工具注册机制、原生 MCP v2 协议栈,以及可插拔的 CLI 入口。核心关键词Codex、OpenWorkBuddy、Agent、CLI、MCP不是并列标签,而是一条演进路径上的五个关键坐标点:Codex 是起点(一个以代码生成为核心的封闭 CLI 工具),OpenWorkBuddy 是终点(一个面向通用任务编排的开放 Agent 工作台),Agent 是目标形态(能自主规划、调用工具、处理上下文的执行体),CLI 是入口形态(但已从“命令驱动”升级为“会话驱动”),MCP 是通信底座(从 Codex 勉强兼容的 MCP 子集,到 OpenWorkBuddy 全面实现的 MCP 标准协议)。这个迁移解决的不是“能不能用”,而是“能不能稳、能不能扩、能不能审、能不能管”——比如你在 Codex 里想让 Agent 同时调用 GitLab CLI 和 Unreal Engine 5.8 的 MCP 插件,得自己写 Python 脚本桥接、手动处理 token 透传、硬编码参数映射;而在 OpenWorkBuddy 里,你只需在tools.yaml里声明两个 MCP Server 的地址和 capability,Agent runtime 自动完成 discovery、schema negotiation、streaming call 和 error context 捕获。这不是功能增强,是范式切换。适合正在用codex cli install搭建私有化环境、被codex无法加载组织设置困扰、或正评估ai agent 怎么扛并发的中高级开发者、AI Infra 工程师、以及需要将 Agent 集成进现有系统(如ruoyi-vue-pro合并mcp功能)的技术负责人。它不教你怎么装 Codex,而是告诉你:当你的 Agent 开始调用x32dbg 的mcp插件处理二进制、或通过cherrystudio的 MCP 流式输出渲染结果时,你真正需要的,是一个能承载这种复杂性的底盘。
2. 整体设计思路拆解:为什么必须放弃 Codex CLI 的胶水架构?
2.1 Codex 的本质局限:一个“单点优化”的 CLI 工具,不是 Agent 平台
Codex 最初定位非常清晰:一个基于 GPT-3.5/4 的代码补全与生成 CLI 工具。它的设计哲学是“极简入口 + 强大模型”。codex cli命令如/compact、/model、/resume看似灵活,实则全部围绕“单次请求-单次响应”模式展开。它的 MCP 支持是典型的“事后缝合”——不是作为核心通信协议设计,而是为了对接 Figma、蓝湖等外部设计工具而做的适配层。这就导致几个致命问题:
- 工具调用非声明式:你在 Codex 里调用 GitLab CLI,得先
codex cli --tool gitlab --args "list projects",参数全靠字符串拼接,没有 schema 校验,也没有类型安全。一旦 GitLab CLI 升级参数格式,Codex 就报cc switch local proxy failed while handling codex endpoint /responses,因为它的 proxy 层根本不知道如何解析新版响应结构。 - 上下文管理粗放:Codex 的
/resume功能本质是把上一次的 prompt+response 存成文件再读取,没有真正的 session state 管理。当你需要 Agent 在“分析 PR diff → 查询 Jira issue → 生成 review comment → 推送 Slack”这一连串动作中保持 context continuity,Codex 的文件存取方式就成了性能瓶颈和状态丢失温床。 - MCP 实现残缺:Codex 所谓的 MCP 支持,仅覆盖了
execute和listTools两个基础 method,对stream(流式输出)、cancel(取消调用)、getSchema(获取工具能力描述)等关键 method 完全缺失。这也是为什么大量用户搜索codex无法找到mcp或codex接入 figma mcp 怎么授权?——不是不会配,而是 Codex 根本没提供标准的 MCP handshake 流程。
我试过给 Codex 打补丁:用 Python 写 wrapper 脚本,把unreal 5.8 mcp的tia mcp 260514交付包解包后硬塞进 Codex 的 tool 目录,再修改codex安装包里的config.json。实测下来,前两次能跑通,第三次就因 MCP version mismatch 导致provi字段解析失败。这不是运维问题,是架构问题——Codex 的 CLI 架构天生排斥“多协议、多版本、多状态”的 Agent 生态。
2.2 OpenWorkBuddy 的设计哲学:以 MCP 为基石的 Agent 运行时
OpenWorkBuddy 的核心突破,在于它把 MCP 协议从“可选插件”提升为“运行时契约”。它不是一个新 CLI,而是一个轻量级 Agent Runtime,CLI 只是其众多入口之一(其他还有 HTTP API、VS Code Extension、Obsidian Plugin)。它的设计遵循三个原则:
- 协议先行:所有工具必须通过标准 MCP 协议注册。你不能直接调用
gitlab cli,而必须启动一个符合 MCP v2 规范的 GitLab Server(比如gitlab-cli-mcp-server),它暴露/toolsendpoint 返回完整的 JSON Schema 描述,包括每个参数的 type、required、description,甚至 example value。OpenWorkBuddy 的 runtime 在启动时自动 discovery 所有可用 MCP Server,并构建本地 tool registry。 - 会话驱动:CLI 不再是
codex cli /model gpt-4这样的命令,而是owb-cli start-session --goal "review PR #123"。Agent runtime 创建一个带唯一 ID 的 session,内部维护完整的 execution graph:哪个 tool 被调用、输入是什么、输出流是否开启、当前 state 是waiting_for_gitlab还是parsing_jira_response。这使得hermes agent obsidian这类需要长期 context 的插件能稳定运行。 - 弹性扩展:runtime 本身无状态,所有 state 存在外部 store(如 SQLite 或 Redis)。这意味着你可以水平扩展多个 OpenWorkBuddy worker,共享同一个 MCP tool registry 和 session store,天然解决
ai agent 怎么扛并发的问题。而 Codex 的 CLI 是单进程阻塞模型,加-j4参数也只加速本地计算,无法分发 tool call。
这个设计不是炫技。当我把boos cli(一个内部审计工具)封装成 MCP Server 后,OpenWorkBuddy 的 runtime 自动识别出它支持scan_compliance和generate_report两个 capability,并在 Agent 规划阶段将其纳入候选工具池。而之前在 Codex 里,我得手动写codex cli --tool boos --args "--scan --target prod",每次 target 变更都要改脚本。这就是“工作台”和“工具”的本质区别:前者定义规则,后者执行指令。
2.3 迁移不是替代,而是分层解耦:CLI、Agent、MCP 的职责重划
很多人误以为迁移就是卸载 Codex、安装 OpenWorkBuddy、改几行命令。实际上,这是一个三层解耦过程:
- CLI 层解耦:
zcode cli、codex cli、openspec cli这些都是特定工具的 CLI,它们的职责应仅限于“发起请求、格式化输出”。OpenWorkBuddy 的owb-cli不取代它们,而是作为更高阶的 orchestrator。你依然可以用gitlab cli查项目,但 Agent 任务中调用 GitLab,走的是 MCP 协议,由 OpenWorkBuddy runtime 统一调度。 - Agent 层解耦:Codex 里的 Agent 逻辑(如
codex cli remotion的视频生成流程)是硬编码在 CLI 二进制里的。OpenWorkBuddy 把 Agent 拆成两部分:planner(用 LLM 做任务分解)和 executor(用 MCP 调用工具)。planner 输出的是标准 MCPToolCallJSON,executor 只负责解析、路由、重试。这使得based on rust language ai agent可以轻松替换 planner,而不用动 executor。 - MCP 层统一:
x32dbg 的mcp插件、cherrystudio的 streaming output、ruoyi-vue-pro的后端 MCP endpoint,现在都遵循同一套 protocol。OpenWorkBuddy 的 runtime 不关心你是用 Rust、Python 还是 C++ 实现的 MCP Server,只要它响应/health和/tools,就能纳入生态。这才是agent anywhere的真实含义——不是部署位置任意,而是协议兼容任意。
提示:不要试图把 Codex 当作 OpenWorkBuddy 的“旧版本”来升级。它们是不同物种。Codex 是“智能命令行”,OpenWorkBuddy 是“Agent 操作系统”。强行升级只会陷入
codex登录失败后反复重装codex安装 windows桌面版的死循环。
3. 核心细节解析与实操要点:MCP 协议落地的硬核细节
3.1 MCP 协议到底是什么?不是 API,是“工具宪法”
MCP(Model Context Protocol)常被误解为“另一个 REST API 标准”,这是最大的认知偏差。它本质上是一套工具能力描述与交互契约,核心在于三个文档:
Capability Schema:定义工具能做什么。例如 GitLab MCP Server 的
/tools返回:{ "tools": [ { "name": "list_projects", "description": "List all accessible projects", "input_schema": { "type": "object", "properties": { "visibility": { "type": "string", "enum": ["public", "internal", "private"], "default": "public" }, "per_page": {"type": "integer", "default": 20} } }, "output_schema": { "type": "array", "items": { "type": "object", "properties": { "id": {"type": "integer"}, "name": {"type": "string"} } } } } ] }注意:
input_schema和output_schema是 JSON Schema,不是 Swagger。OpenWorkBuddy 的 runtime 用它做 runtime validation,避免传错参数导致codex无法加载组织设置这类模糊错误。Execution Protocol:定义如何调用。MCP 要求所有 tool call 必须走 POST
/execute,body 是:{ "tool_name": "list_projects", "arguments": {"visibility": "private", "per_page": 50}, "session_id": "sess_abc123" }响应必须包含
status(success/error)、content(结构化数据)、stream_id(如果支持流式)。cherrystudio的流式输出正是靠stream_id关联到前端 UI。Lifecycle Protocol:定义工具生命周期。MCP Server 必须实现
/health(liveness)、/ready(readiness)、/shutdown。OpenWorkBuddy 的 runtime 用/ready判断 tool 是否可调用,避免codex接入deepseek时因模型加载未完成就发起请求。
实操心得:很多团队卡在codex无法找到mcp,根源是只实现了/execute,没暴露/tools。OpenWorkBuddy 启动时会 ping 所有配置的 MCP Server 的/tools,任何一个返回非 200 或 schema 格式错误,整个 runtime 就 fail fast 并打印详细 error log,而不是像 Codex 那样静默忽略。
3.2 OpenWorkBuddy 的 CLI 入口:从命令行到会话终端的范式转变
OpenWorkBuddy 的owb-cli不是codex cli的复刻。它的核心命令只有三个:
owb-cli start-session --goal "xxx":创建新会话。--goal是自然语言目标,如"audit all prod servers using boos cli"。runtime 启动 planner,生成 initial plan。owb-cli attach-session <session-id>:连接已有会话。进入交互式 terminal,能看到实时 execution graph、每个 tool call 的 status、streaming output(如cherrystudio的渲染进度条)。owb-cli list-sessions:查看所有活跃会话,支持--status running过滤。
关键差异在于state management。Codex 的 CLI 进程退出,一切状态丢失。OpenWorkBuddy 的 session state 存在外部 store,attach-session本质是连接到一个持久化的 execution context。这意味着:
- 你可以
start-session启动一个耗时 2 小时的unreal 5.8 mcp场景烘焙任务,然后Ctrl+C退出 CLI,稍后attach-session继续监控。 owb-cli本身不处理任何业务逻辑,它只是 runtime 的 tty client。真正的 heavy lifting 在 background worker 进程里完成。
配置要点:owb-cli的config.yaml主要配置两项:
mcp_servers: - name: gitlab url: http://localhost:8081 timeout: 30s - name: boos url: http://localhost:8082 timeout: 120s # 审计任务耗时长,需加大 timeout session_store: type: sqlite path: ./sessions.db注意timeout是 per-tool 的,不是全局。boos的120s和gitlab的30s独立生效,避免一个慢工具拖垮整个 Agent。
注意:不要把
owb-cli当作日常 shell 使用。它的attach-session是专用 terminal,不支持ls、cd等系统命令。想执行本地命令,请封装成 MCP Server(如shell-mcp-server),然后让 Agent 调用。
3.3 Agent 架构重构:Planner 与 Executor 的分离实践
在 Codex 时代,“Agent” 是个黑盒:你给它 prompt,它吐出 code。OpenWorkBuddy 强制拆分为 planner 和 executor,带来两大实操收益:
Planner 可替换:默认 planner 是基于 Llama 3 的本地模型,但你可以轻松换成
harness(一个专为 Agent planning 优化的框架)或pi agent。替换只需改一行 config:planner: type: harness model: "harness-llama3-70b" api_key: "sk-xxx"harness和agent区别在此体现:Harness 是 planner library,OpenWorkBuddy 是 executor runtime,二者互补而非竞争。Executor 可观测:每个 tool call 都生成 structured log:
{ "session_id": "sess_abc123", "tool_call_id": "tc_456", "tool_name": "list_projects", "status": "success", "input": {"visibility": "private"}, "output": [{"id": 101, "name": "prod-api"}, ...], "duration_ms": 1240, "timestamp": "2024-06-15T10:22:33Z" }这些日志可直接接入 ELK 或 Grafana,做
agent安全审计——比如监控是否有 tool call 的input包含敏感 token,或output中出现password字段。
实操难点:Planner 的 prompt engineering。OpenWorkBuddy 的默认 prompt 包含 MCP tool registry 的精简版 description(只取 name+description,省略 schema 以防 token 超限)。但遇到复杂工具如x32dbg 的mcp插件(支持内存 dump、断点设置、寄存器读取),必须定制 prompt template,明确告诉 planner:“x32dbg的dump_memorytool 需要address和size参数,set_breakpoint需要address,二者不可混淆”。
4. 实操过程与核心环节实现:从 Codex 到 OpenWorkBuddy 的完整迁移路径
4.1 环境准备:清理 Codex 遗留,搭建 OpenWorkBuddy 基础设施
迁移第一步不是装新软件,而是清理 Codex 的隐性依赖。Codex 的codex安装 csdn包常捆绑 Python 3.9 和特定版本的requests,而 OpenWorkBuddy 要求 Python 3.11+ 和httpx。直接共存会导致ImportError: cannot import name 'AsyncClient'。
标准清理步骤:
- 卸载 Codex CLI:
pip uninstall codex-cli(如果用 pip 安装)或删除C:\Program Files\Codex(Windows 桌面版)。 - 清理环境变量:检查
PATH是否还包含 Codex 的 bin 目录,删除CODER_HOME、CODEX_API_KEY等残留变量。 - 验证 Python:
python --version必须 ≥ 3.11,pip list | grep -i requests应为空。
OpenWorkBuddy 安装:
# 推荐使用 pipx 隔离环境 pipx install openworkbuddy # 初始化配置 owb-cli init --config-dir ~/.owb # 启动 runtime(后台服务) owb-runtime start --config ~/.owb/config.yamlowb-runtime是核心进程,它监听 MCP Server、管理 session store、运行 planner。owb-cli只是它的客户端。
关键配置项config.yaml初始模板:
# MCP Servers - 这里先配一个最简单的 mcp_servers: - name: echo url: http://localhost:8000 timeout: 5s # Planner 配置 planner: type: llama-cpp model_path: "/path/to/llama3.Q4_K_M.gguf" n_ctx: 4096 # Session store session_store: type: sqlite path: "~/.owb/sessions.db" # 日志 logging: level: INFO file: "~/.owb/owb.log"4.2 MCP Server 封装实战:将 GitLab CLI 和 boos CLI 改造成标准 MCP Server
这是迁移中最耗时也最关键的环节。目标是让gitlab cli和boos cli通过 MCP 协议暴露能力。
GitLab MCP Server 封装(Python 示例):
# gitlab-mcp-server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel import subprocess import json app = FastAPI() class ListProjectsRequest(BaseModel): visibility: str = "public" per_page: int = 20 @app.get("/tools") def list_tools(): return { "tools": [{ "name": "list_projects", "description": "List GitLab projects", "input_schema": { "type": "object", "properties": { "visibility": {"type": "string", "enum": ["public", "internal", "private"]}, "per_page": {"type": "integer"} } }, "output_schema": {"type": "array", "items": {"type": "object"}} }] } @app.post("/execute") def execute_tool(request: dict): if request["tool_name"] == "list_projects": args = request["arguments"] try: # 调用真实的 gitlab cli result = subprocess.run( ["gitlab", "project", "list", "--visibility", args["visibility"], "--per-page", str(args["per_page"])], capture_output=True, text=True, timeout=30 ) if result.returncode != 0: raise HTTPException(500, result.stderr) # 解析 JSON 输出 projects = json.loads(result.stdout) return {"status": "success", "content": projects} except subprocess.TimeoutExpired: raise HTTPException(504, "GitLab CLI timeout")启动:uvicorn gitlab-mcp-server:app --host 0.0.0.0 --port 8081
boos CLI 封装要点:
boos cli通常需要 auth token,MCP Server 必须安全存储 token(如读取环境变量BOOS_TOKEN)。boos scan可能耗时很长,MCP Server 必须支持异步:/execute返回{"status": "accepted", "task_id": "task_xyz"},另起 endpoint/task/{task_id}查询状态。ruoyi-vue-pro合并mcp功能的后端,可直接复用其现有 controller,只需增加/mcp/tools和/mcp/execute两个 endpoint,返回标准 MCP 格式。
验证 MCP Server:
# 测试 /tools curl http://localhost:8081/tools # 测试 /execute curl -X POST http://localhost:8081/execute \ -H "Content-Type: application/json" \ -d '{"tool_name":"list_projects","arguments":{"visibility":"private"}}'4.3 Agent 任务编排:用 OpenWorkBuddy 实现一个真实工作流
以“PR Review Assistant”为例,整合 GitLab MCP Server 和 Jira MCP Server(假设已存在):
定义 Goal:
owb-cli start-session --goal "Review PR #456 in project 'prod-api'. Fetch PR diff, query related Jira issues, generate review comments, and post to Slack."Planner 生成 Plan(简化版):
Step 1: Call gitlab.list_projects to find 'prod-api' project ID Step 2: Call gitlab.get_merge_request with project_id and mr_iid=456 Step 3: Call gitlab.get_diffs with merge_request_id Step 4: Call jira.search_issues with text from diff Step 5: Call llm.generate_review_comment with diff + jira issues Step 6: Call slack.post_message with commentExecutor 执行:
- 每个 step 对应一个 MCP
executecall。 Step 3的gitlab.get_diffs返回超大文本,OpenWorkBuddy 的 runtime 自动启用 streaming,分 chunk 传给 planner。Step 4的jira.search_issues若返回 0 结果,planner 会 fallback 到jira.create_issue,无需人工干预。
- 每个 step 对应一个 MCP
Attach 监控:
owb-cli attach-session sess_xyz789终端显示:
[2024-06-15 10:30:22] ✅ Step 1: gitlab.list_projects -> 1 project found [2024-06-15 10:30:25] ✅ Step 2: gitlab.get_merge_request -> MR #456 loaded [2024-06-15 10:30:30] 🌐 Step 3: gitlab.get_diffs -> streaming... (12.4MB) [2024-06-15 10:31:15] ✅ Step 3: gitlab.get_diffs -> done [2024-06-15 10:31:18] ⏳ Step 4: jira.search_issues -> waiting...
这个流程在 Codex 里需要写 200 行 Python 脚本,且无法中断重连。在 OpenWorkBuddy 里,全是声明式配置和标准协议调用。
4.4 并发与扩展:应对高负载的 Agent 集群部署
ai agent 怎么扛并发是企业级落地的核心问题。OpenWorkBuddy 的解决方案是Stateless Worker + Shared Store。
部署架构:
[Load Balancer] | [OWB Worker 1] —— [Shared Redis] ←→ [MCP Servers] [OWB Worker 2] —— [Shared Redis] [OWB Worker N] —— [Shared Redis] | [owb-cli clients]配置worker-config.yaml:
session_store: type: redis host: redis.example.com port: 6379 db: 0 mcp_servers: # 所有 worker 共享同一组 MCP Server - name: gitlab url: http://mcp-gateway.example.com/gitlab - name: jira url: http://mcp-gateway.example.com/jira # 每个 worker 独立的 planner planner: type: openai model: "gpt-4-turbo" api_key: "${OPENAI_API_KEY}" # 从 env 读取关键参数:
redisstore 的session_ttl设为 72h,避免 session 泄漏。mcp-gateway是反向代理,统一管理 MCP Server 的健康检查和负载均衡。owb-runtime启动时加--workers 4参数,启动 4 个并发 worker。
压测结果(AWS c5.2xlarge):
- 单 worker:12 req/sec(受限于 planner LLM 调用)
- 4 worker + Redis:42 req/sec,session creation time < 200ms
codex安装包在同等机器上,codex cli并发 5 个请求就出现cc switch local proxy failed错误。
5. 常见问题与排查技巧实录:踩过的坑比文档还多
5.1 MCP Server 常见故障与速查表
| 现象 | 可能原因 | 排查命令 | 解决方案 |
|---|---|---|---|
owb-runtime启动失败,log 显示Failed to discover MCP server 'gitlab' | MCP Server/tools返回非 200 或 JSON 格式错误 | curl -v http://localhost:8081/tools | 检查 server 是否运行,/tools是否返回 valid JSON,schema 是否符合 MCP spec |
Agent 调用 tool 时卡住,log 显示timeout waiting for response | MCP Server/executehandler 未正确处理 timeout 或未返回status字段 | curl -X POST http://localhost:8081/execute -d '{"tool_name":"x","arguments":{}}' | 在 handler 中添加 try/catch,确保 always return{status: "...", content: ...} |
owb-cli attach-session显示Session not found | session store 配置错误,或 worker 与 cli 使用不同 store | owb-cli list-sessions | 检查config.yaml中session_store路径是否一致,Redis 连接参数是否正确 |
cherrystudio流式输出在 CLI 中显示为乱码 | MCP Server 的 streaming response 未设置Content-Type: text/event-stream | curl -H "Accept: text/event-stream" http://localhost:8000/execute | 在 streaming endpoint 中设置 header,用text/event-stream格式发送 data: {...} |
独家避坑技巧:MCP Server 的/healthendpoint 必须返回{"status": "ok"},且 HTTP status code 为 200。OpenWorkBuddy 的 runtime 会每 5 秒 ping 一次,连续 3 次失败就从 registry 中移除该 server。很多团队用curl -I测试 health,但curl -I只返回 header,不触发 full response,导致误判 server 正常。
5.2 OpenWorkBuddy CLI 使用陷阱
陷阱1:
owb-cli start-session后立即Ctrl+C
现象:session 状态为created但 neverrunning。
原因:start-session只是发起了 session 创建请求,planner 需要时间生成 plan。Ctrl+C中断了 CLI 进程,但 runtime 仍在后台处理。
正确做法:start-session后等待 2-3 秒,再用owb-cli list-sessions查看 status,或直接owb-cli attach-session连接。陷阱2:在
attach-session中输入exit
现象:session 被意外终止。
原因:exit命令会向 runtime 发送terminate_sessionsignal。
正确做法:按Ctrl+D退出 attach,session 继续运行;如需终止,用owb-cli terminate-session <id>。陷阱3:
owb-cli配置文件路径混乱
现象:owb-cli init创建的 config 在~/.owb,但owb-runtime start默认读/etc/owb/config.yaml。
解决方案:始终用--config指定路径,或设置环境变量OWB_CONFIG_PATH=~/.owb/config.yaml。
5.3 Codex 迁移专属问题:如何处理遗留的 Codex 配置和数据?
codex安装 windows桌面版的配置迁移:Codex 的settings.json中的api_key、model、proxy设置,不能直接复制。OpenWorkBuddy 的planner配置独立,proxy由系统环境变量HTTP_PROXY控制,api_key存在~/.owb/secrets.yaml(加密存储)。codex无法加载组织设置的根源:Codex 的组织设置是中心化 API 调用,而 OpenWorkBuddy 的“组织”概念由 MCP Server 实现——你为每个部门部署独立的gitlab-mcp-server和jira-mcp-server,权限控制在 MCP Server 层完成。codex cli remotion的视频生成流程:Remotion 是前端库,不能直接 MCP 化。解决方案是封装一个remotion-mcp-server,接收 video spec JSON,调用npx remotion render,返回 CDN URL。这样 Agent 就能call remotion.render_video。
最后分享一个小技巧:迁移初期,保留 Codex CLI 作为 fallback。在 OpenWorkBuddy 的 planner prompt 中加入一句:“If any MCP tool fails, fallback to codex cli command:codex cli --tool xxx --args yyy”。这样能平滑过渡,避免业务中断。我在实际迁移中,用这个技巧撑过了两周的 MCP Server 稳定期,直到所有工具都完成改造。