Claude Code Skill 搬到 Codex 不用重寫?同一套標準,差在這三個地方

左右各一個資料夾圖示,中間垂直線分隔,水平箭頭穿越中線,象徵 Claude Code Skill 遷移到 Codex 的過程

你是否也有跟我遇過一樣的問題,在 Claude Code 裡累積了一批 skill,現在可能因為 Claude code 的額度用完,所以想嘗試把相關的 skill 放到 ChatGPT 的 Codex 來使用,這時通常浮現的第一個問題是「這樣我要從頭重寫嗎?」其實大多數情況下不用。但有幾個地方如果不知道,複製過去會默默失效。

兩個工具用的是同一套規格

中心六邊形向外延伸連線,接到多個方塊,象徵 Agent Skills 開放標準被多個 AI 工具採用

2025 年 12 月,Anthropic 把 Agent Skills 的格式發布為開放標準。規格公開後 48 小時內,OpenAI 的 Codex CLI 就加入支援,Microsoft 的 VS Code Copilot 也是。截至 2026 年 3 月,這套格式已被 32 個工具採用,包括 Gemini CLI、JetBrains Junie 和 AWS Kiro。

這套標準刻意維持極簡。一個 skill 就是一個資料夾,裡面放 SKILL.md,前言(frontmatter)只有兩個必填欄位:

---
name: skill-name
description: 說明這個 skill 做什麼、在什麼情境使用
---

body 是 markdown,可以是任何指令格式。這個最小結構,Claude Code 和 Codex 都完全支援。

直接複製就能用的部分

基礎格式相容代表下面這些不需要改:

  • frontmatter 的 namedescription
  • 整個 markdown 指令 body
  • scripts/references/assets/ 目錄結構
  • body 裡寫的步驟列表、範例、邊界條件說明

唯一需要調整的是儲存路徑。Claude Code 從 ~/.claude/skills/.claude/skills/ 讀取 skill;Codex 放在 ~/.agents/skills/。內容一樣,只是資料夾位置不同。

搬到 Codex 會出問題的三個地方

1. 動態上下文注入(! 語法)

Claude Code 有一個自己擴充的功能:在 SKILL.md 裡用 !command 語法,Claude Code 會在把指令傳給模型之前先執行 shell 指令,把輸出嵌入進去。例如:

## 目前的改動
!`git diff HEAD`

這行在 Claude Code 裡會變成實際的 diff 內容再送給模型。Codex 看到的卻是原始文字,不會被執行。這是 Claude Code 的專屬語法,Agent Skills 基礎標準不包含它,OpenAI 也沒有相對應的機制。

移植時最直接的做法是把這些行改成指令,讓模型自己去執行:

## 目前的改動
請先執行 git diff HEAD,再根據輸出繼續。

效果接近,差別是動態注入在模型看到任何東西之前就執行完了,改成指令則需要一個工具呼叫的來回。

2. Claude Code 專屬的 frontmatter 控制欄位

Claude Code 在 SKILL.md frontmatter 裡加了許多自己的控制欄位,Codex 遇到這些欄位直接忽略:

Claude Code frontmatter用途Codex 的對應做法
disable-model-invocation: true關掉 AI 自動觸發,只能手動用 /name 呼叫agents/openai.yamlallow_implicit_invocation: false
context: fork用獨立 subagent 執行無直接對應,拿掉即可
user-invocable: false隱藏,只讓 AI 自動載入無對應
argument-hintarguments定義命名參數無對應,在 body 說明參數格式即可
paths限定特定檔案路徑才觸發無對應

最需要注意的是 disable-model-invocation: true。如果你的 skill 設了這個,搬到 Codex 之後 Codex 看不懂,預設把 skill 當成可以自動觸發的,跟你原本想要的相反。需要另外在 skill 資料夾加一個 agents/openai.yaml

policy:
  allow_implicit_invocation: false

Codex 把 UI 設定和觸發控制放在這個獨立檔案,而不是塞進 SKILL.md frontmatter,兩個工具的設計概念不一樣。

3. 儲存路徑

前面提過,但值得單獨確認一次。Codex 的 skill 放在 ~/.agents/skills//SKILL.md,Claude Code 放在 ~/.claude/skills//SKILL.md。兩個工具不會互相讀對方的目錄,所以複製時要把整個 skill 資料夾複製到對的位置。

從 Codex 搬回 Claude Code 更容易

方向反過來反而沒什麼障礙。Codex 的 agents/openai.yaml 在 Claude Code 裡完全被忽略,不會壞任何東西。Codex 的 SKILL.md 通常只有標準的 namedescription,Claude Code 完全支援。

搬進 Claude Code 之後,如果想用 Claude Code 的進階功能,才需要另外加 frontmatter 欄位或 !command 注入語法,但這是選擇要不要加,不是必須改才能動。

學術論文有研究這件事嗎?

專門研究「CLI skill 跨工具移植性」的論文目前沒有,Agent Skills 標準到 2025 年底才出現,這個問題太新。

比較相關的是這篇 arXiv 論文,研究的是 agentic coding assistant 裡 skill 生態圈的安全問題。Snyk 的研究團隊在測試過的 skill 裡發現 36% 有 prompt injection 風險,在公開 skill 倉庫裡抓到 1,467 個惡意 payload。這跟移植性無關,但如果你是從公開倉庫搬別人寫的 skill,這個數字值得知道。

還是不確定怎麼改?讓 Codex 幫你轉

如果看完還是不確定自己的 skill 哪裡需要改,最省事的做法是直接把 SKILL.md 的內容貼給 Codex,然後說:「這是一個 Claude Code skill,請幫我改成 Codex 相容的版本,並把檔案存到正確的資料夾。」Codex 認得 Claude Code 的專屬語法,通常能幫你處理掉動態注入和 frontmatter 欄位的轉換,不用自己逐行對照。