claude code 调用 codex skill

接入与开发

讲清怎么让 Claude Code 在干活时复用 Codex 那边的技能能力,给一套可落地的封装、调用与排错做法。

你大概率遇到过这种场面:Claude Code 在终端里改代码很顺手,但某个活儿你已经在 Codex 那边攒好了技能或套路,不想重写一遍;或者反过来,想让 Claude Code 把 Codex 当外包工人使唤。直接硬拼两边很容易卡在进程通信、超时、上下文传参上。这篇不聊协议兼容层,只讲工程上怎么把 Codex 的技能包成 Claude Code 能稳定调用的形态:边界怎么划、参数怎么传、日志怎么记、跑偏了怎么退回。

你在 Claude Code 里改代码正顺,突然要干一件已经在那边的 Codex 攒好技能的事。重写一遍不甘心,直接硬拼又容易卡在进程通信、超时和上下文传参上。这篇只讲工程做法:怎么把 Codex 的技能包成 Claude Code 能稳定调用的形态,边界划在哪,参数怎么传,跑偏了怎么退回。不聊协议兼容层。

先说清定位:这是把另一边的技能当外部命令来用,不是把两个工具焊成一个。只要你能接受多一跳进程开销,并且技能本身的输入输出是文本或文件这种好传的形态,这套做法就能落地。具体某条链路值不值得走,得到站内页面按当时的数字核对,别凭感觉拍板。

先判断该不该这么绕:哪些活儿值得跨工具复用

值得复用的信号比较明确:那段技能已经在 Codex 侧稳定跑过多次,逻辑和业务数据解耦,输入输出是文本或文件这种好传的形态。反过来,只是偶尔用一次、还要读本地私有状态的,直接重写更快也更好查,别为了复用而复用。

  • 该复用:技能稳定跑过多次、逻辑干净、输入输出是文本或文件、以后还会反复用
  • 别复用:技能依赖 Codex 侧的会话记忆、依赖多轮交互状态、对延迟很敏感
  • 替代方案:把规则抽成一份共享提示词或脚本,两边各自加载,不做运行时桥接
  • 动手前先拿一个最简单、无副作用的输入,从 Claude Code 侧打通一轮,链路通了再上复杂的

把 Codex 技能包成可调用单元:约定输入输出与退出码

核心思路是:Claude Code 侧只认「命令 + 参数 + 返回文本」这一层,不要让它直接去猜 Codex 内部的文件结构。把技能包成一个命令行入口或一层薄封装,两边就靠这个接口对话,内部怎么实现随你改。

输入
统一收成一个结构化参数,JSON 字符串最省事,字段名固定,别让模型自由拼
输出
固定成两段:给模型看的结果摘要、给程序判断的状态码
状态码
至少区分成功、输入有问题、执行超时三类,失败不要用自然语言表达
参数校验
路径、模型名、执行动作都限定枚举值或白名单,挡住模型自由发挥生成危险参数
技能清单
把技能名、用途、参数说明单独放一份小清单,方便多个技能统一注册

一个容易被忽略的点:给模型看的摘要要写成人能读的短句,给程序判断的状态码要保持机器可解析。两者混在一起,后面日志和校验都做不干净。

调用时的护栏:超时、并发、降级与结果校验

跨进程调用最大的风险是「挂着不动」和「返回垃圾」。护栏就是把这两件事提前挡住。超时按分档设:连接超时短一点,整体执行超时按技能最慢那一次再留些余量。宁可让它明确失败,也别让 Claude Code 一直等。

风险点具体做法判断标准
超时连接超时短、整体超时按最慢一次留余量到点未返回就判失败,不让会话干等
并发同技能同工作目录尽量串行,必须并发时用独立临时目录和输出文件出现互相覆盖输出就是没隔离好
降级把调用不通和结果没意义分两类处理调用不通退回自己干,结果没意义退回重写参数
结果校验拿到返回值先做结构校验,字段齐不齐、格式对不对校验不过就当失败,别把废话当结论用
  1. 定超时先量一遍技能最慢跑多久,整体超时设在这个基础上留余量;跑一次故意超时的输入,确认会明确报错而不是一直挂
  2. 压并发默认串行;确实要并发时给每个任务独立的临时目录和输出文件名,跑完检查输出有没有串
  3. 设降级给「调用不通」和「调用通了但结果没意义」分别写好回退动作,让 Claude Code 知道该自己干还是该重试
  4. 加校验在拿到返回值后插入一次结构校验,字段不全或格式不对直接判失败,不进入下一步

日志与评测:出问题能复盘,改完知道变好没有

没有日志,跨工具调用出了问题基本靠猜。每次调用至少记这几样:技能名、入参摘要、耗时、状态码、返回体积,以及由哪次会话触发的。最后一项最容易被漏,少了它事后根本对不上是哪一步带偏的。

  • 日志字段:技能名、入参摘要、耗时、状态码、返回体积、触发会话标识
  • 准备十到二十条小用例,覆盖正常、边界、故意传错三类,改完封装或提示词后全跑一遍
  • 比对通过率和耗时,而不是凭感觉说「好像顺了」
  • 把高频失败模式整理成对照表:报错特征、大概率原因、下一步先查什么
  • 长期看成本和稳定性走势,到站内页面按当时口径核对,别拿一次观察当结论
跨工具复用不是把两边焊死,而是让一边能像调外部命令一样,稳定地喊另一边干活,并且在它不干活的时候知道怎么退。
下一步想先看看中转站和工具的实际表现,再决定要不要把 Codex 技能桥接过来,可以从工具目录和可信度检测页入手,那里有可横向对比的检测口径。

常见问题

让 Claude Code 直接调 Codex 的技能,和两边各配一份提示词,哪个更省事?

看复用频率。技能逻辑稳定、要被多次调用、且输入输出干净,封装成可调用单元更省事;只是偶尔用一次、依赖会话上下文,那不如各写一份提示词。判断标准是「这段逻辑以后还会不会再用」,答案是否就不用做桥接。

调用返回的结果看着像对但其实是废话,怎么提前拦住?

在返回值进模型之前加一道结构校验:必填字段有没有、格式对不对、长度是否在预期区间。校验不过就按失败处理并让它重试参数,别把未经校验的文本直接喂回对话。绝大多数「模型被带偏」其实是这一步省了。

调试这套桥接,第一步该看什么?

先单独在终端手动跑一遍那个封装命令,确认不经过 Claude Code 也能出正确结果。这一步过了,问题就只在参数传递和返回值解析上;过不了,就先修技能本身,别在集成层瞎调。顺序反了最容易白折腾。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。