Claude CodeからCodexへ移行する方法:AGENTS.md、スキル、MCP
Claude Codeの指示、スキル、MCP設定をCodexへ移す手順を解説。公式インポーターで見つかった問題と、同期用スクリプトも紹介します。
更新(2026年11月9日):Claude Fable 5.2とMythos 5.2がリリースされ、料金・提供範囲・ベンチマークはClaude Fable 5.2まとめで解説しています。
👁 111閲覧数
11月3日、ChatGPTの最上位プランであるPro 500を契約しましたが、すぐに問題に直面しました。ここ数カ月、ブログやミュージックビデオ、アプリの作業はすべてClaude Codeで進めていました。プロジェクトに関するメモが数百件、自作スキルが6つ、複数のフォルダーにCLAUDE.mdがあり、MCPサーバーも接続していました。初回起動時のCodexは、そうした情報を何も知りませんでした。私は長年、通常のハイフンだけを使っていますが、Codexは別のダッシュ記号を使い、Claudeなら覚えていることまで質問してきました。
移行にかかったのは午後のひとときです。単にファイルをコピーするより、Codexが指示をどこから読み込むかを理解することが重要でした。ここでは、公式インポーターで遭遇したエラーと、現在使っているスクリプトを含め、手順を紹介します。
移行の概要
- 指示: 全体に適用するルールは
~/.codex/AGENTS.mdへ。設定ファイルに1行追加すれば、Codexはプロジェクト内のCLAUDE.mdも読み込めます。 - スキル: SKILL.mdを含むフォルダーを
~/.agents/skillsにコピーします。形式は共通です。 - MCP:
codex mcp add 名前 --url アドレスで追加し、codex mcp loginでOAuthログインします。 - 移行しないもの: スクリーンショットが大量に含まれる長い過去のセッション。
- スクリプト: 下記からダウンロードできる
synchronizuj-skille.pyを利用します。
Claude CodeとCodexで異なる設定名
Claude CodeとCodexは、ファイルを読み、コマンドを実行し、コードや文章を書くツールです。違いは設定の置き場所や名前にあります。ClaudeはCLAUDE.md、CodexはAGENTS.mdから指示を読み込みます。Claudeのスキルは~/.claude/skills、Codexのスキルは~/.agents/skillsに置きます。ClaudeはMCPサーバーの設定をJSONに、CodexはTOMLに保存します。日常的な使い方の違いを知りたい場合は、CodexとClaude Codeの比較をご覧ください。この記事では、両方を使っていて、同じように動作させたい方を対象にしています。
Codexは2か所からAGENTS.mdを読み込みます。1つ目はCodexのホームフォルダーにある~/.codex/AGENTS.mdで、すべての会話に適用されます。2つ目はプロジェクト内です。リポジトリーのルートから現在のフォルダーまで順に確認し、それぞれのフォルダーから最大1つのファイルを読み込みます。現在のフォルダーに近いファイルが後から適用され、より一般的なルールを上書きします。既定の指示ファイルの上限は32 KiBで、超過分は警告なしに切り捨てられます。
手順1:全体に適用するAGENTS.mdを作る
私は全体に適用するCLAUDE.mdを使っていませんでした。ルールは、Claude Codeの記憶に個別のメモとして保存されていました。たとえば「ポーランド語で書く」「ハイフンだけを使う」「最後にリンクを載せる」「数字を捏造しない」「許可なくストアに公開しない」といった内容です。これらをまとめ、60行の~/.codex/AGENTS.mdを作りました。すべてを貼り付けるより、要点をまとめるほうがよいでしょう。指示が短いほど、メッセージごとに消費するコンテキストを抑えられます。
ファイルの末尾に追加した設定が、最も大きな違いを生みました。Claude Codeの記憶フォルダーを読み取り専用の知識ベースとしてCodexに指定したのです。コピーはしていないため、Claudeが随時保存するメモの最新状態をCodexから参照できます。
## プロジェクトの知識
プロジェクトに関する情報はClaude Codeの記憶にあります(読み取り専用):
C:\Users\ty\.claude\projects\<プロジェクト名>\memory\
- まずMEMORY.md(目次)を読み、その後に関連ファイルを確認します。
- プロジェクトに関する作業では、最初にこのフォルダーを検索します。
手順2:プロジェクトのCLAUDE.mdをそのまま使う
独自のCLAUDE.mdがあるプロジェクトでも、別のファイルを作る必要はありません。~/.codex/config.tomlに次の2行を追加します。
project_doc_fallback_filenames = ["CLAUDE.md"]
project_doc_max_bytes = 65536
1行目は、AGENTS.mdがない場所でCodexにCLAUDE.mdを読み込ませます。2行目は上限を32 KiBから64 KiBへ引き上げます。私のプロジェクトファイルには長いものがあるためです。OpenAIのドキュメントにある例でも、同じ値の65536が使われています。
手順3:スキルを~/.agents/skillsへ移す
スキルはSKILL.mdを含むフォルダーで、スクリプトや資料を一緒に置くこともできます。形式は共通なので、Claudeのスキルは変更せずにCodexで使えます。CodexではSKILL.mdのヘッダーにnameとdescriptionの2項目が必要です。説明はモデルがスキルを自動で選ぶ判断材料になるため、用途を明確に書きましょう。
最初は古いガイドに従い、スキルを~/.codex/skillsにコピーしました。Codexは読み込みましたが、現在のドキュメントでは個人用スキルの保存先として~/.agents/skillsが案内されているため、そちらへ移しました。スキルは$に続けて名前を入力するか、/skillsで手動実行できます。また、作業内容が説明に合致する場合は、モデルが自動で選ぶこともあります。
スキルが多い場合に意外なのは、説明を含む一覧がコンテキストウィンドウの最大2%を占めることです。数が多いとCodexは説明を短くし、一部を警告付きで省略することがあります。完全なSKILL.mdが読み込まれるのは、スキルを使うときです。
同期スクリプト:synchronizuj-skille.py
Claudeのスキルは頻繁に更新するため、一度だけコピーする方法では不十分でした。そこで、Codexで手作業で作ったスキルには触れずに、1つのコマンドで同期するスクリプトを作りました。スクリプト自身がコピーした項目を記録し、そのフォルダーだけを上書きします。各SKILL.mdにnameとdescriptionがあるかも確認します。
synchronizuj-skille.pyをダウンロード(Python 3.8以降、追加ライブラリー不要、Windows・macOS・Linux対応)
公開前に、空のフォルダーで5つのケースをテストしました。書き込みなしのプレビュー、初回コピー、スキル変更後の再実行、ヘッダーのないスキル、存在しないコピー元フォルダーです。Codexにすでに同じ名前のスキルがあった場合は変更されませんでした。ヘッダーのないスキルは警告と終了コード1を出しながらコピーされました。ポーランド語の文字を含む名前や説明も問題なく処理できました。
使い方:
python synchronizuj-skille.py --na-sucho # 実行内容を表示。ファイルは変更しない
python synchronizuj-skille.py # ~/.claude/skills から ~/.agents/skills へ
python synchronizuj-skille.py --zrodlo D:/moje-skille --zrodlo ~/.claude/skills
python synchronizuj-skille.py --cel ./projekt/.agents/skills
スクリプト全文:
"""Claude CodeからCodexへスキルを同期します。
SKILL.mdを含むスキルフォルダーを、Claude CodeからCodexのユーザースキル用フォルダーへコピーします。既定値:
コピー元: ~/.claude/skills
コピー先: ~/.agents/skills
コピーしたスキルは、コピー先フォルダーの.synchronizuj-skille.jsonに記録します。
次回実行時は記録されたスキルだけを上書きし、Codexで手動作成したスキルは変更しません。
Codexが読み込むために必要なnameとdescriptionがSKILL.mdにあるかも確認します。
使い方:
python synchronizuj-skille.py # 既定のフォルダーを使用
python synchronizuj-skille.py --na-sucho # 変更せず、実行内容だけを表示
python synchronizuj-skille.py --zrodlo D:/skille --zrodlo ~/.claude/skills
python synchronizuj-skille.py --cel ./projekt/.agents/skills
Python 3.8以降が必要です。追加ライブラリーは不要です。Windows、macOS、Linuxで動作します。
同期後、スキルを読み込ませるためCodexを再起動してください。
"""
import argparse
import json
import re
import shutil
import sys
from pathlib import Path
REJESTR_PLIK = ".synchronizuj-skille.json"
POMIJAJ = shutil.ignore_patterns("__pycache__", ".git", "node_modules", ".DS_Store")
def sciezka(tekst):
return Path(tekst).expanduser().resolve()
def sprawdz_frontmatter(skill_md):
"""SKILL.mdのヘッダーに不足している項目を返します(問題がなければ空のリスト)。"""
tekst = skill_md.read_text(encoding="utf-8", errors="replace")
m = re.match(r"^---\s*\n(.*?)\n---", tekst, re.S)
if not m:
return ["ファイルの先頭に---ヘッダーがありません"]
naglowek = m.group(1)
return [f"{pole}項目がありません" for pole in ("name", "description")
if not re.search(rf"^{pole}\s*:\s*\S", naglowek, re.M)]
def main():
p = argparse.ArgumentParser(description="Claude CodeからCodexへスキルをコピーします。")
p.add_argument("--zrodlo", action="append", type=sciezka,
help="スキルのフォルダー(複数指定可)。既定値は~/.claude/skills")
p.add_argument("--cel", type=sciezka, default=sciezka("~/.agents/skills"),
help="Codexのスキルフォルダー。既定値は~/.agents/skills")
p.add_argument("--na-sucho", action="store_true", help="ファイルを変更せず、実行内容だけを表示")
a = p.parse_args()
zrodla = a.zrodlo or [sciezka("~/.claude/skills")]
rejestr_plik = a.cel / REJESTR_PLIK
nasze = set()
if rejestr_plik.exists():
nasze = set(json.loads(rejestr_plik.read_text(encoding="utf-8")))
skopiowane, pominiete, ostrzezenia = [], [], []
for zrodlo in zrodla:
if not zrodlo.is_dir():
print(f"見つかりません {zrodlo} - フォルダーがないためスキップします")
continue
for skill in sorted(x for x in zrodlo.iterdir() if (x / "SKILL.md").is_file()):
cel = a.cel / skill.name
if skill.name in skopiowane:
pominiete.append(skill.name)
print(f"重複 {skill.name} - 先に指定したコピー元からすでにコピーしたためスキップします")
continue
if cel.exists() and skill.name not in nasze:
pominiete.append(skill.name)
print(f"スキップ {skill.name} - コピー先に同名の手動作成スキルがあります")
continue
for brak in sprawdz_frontmatter(skill / "SKILL.md"):
ostrzezenia.append(f"{skill.name}: {brak}")
if not a.na_sucho:
a.cel.mkdir(parents=True, exist_ok=True)
if cel.exists():
shutil.rmtree(cel)
shutil.copytree(skill, cel, ignore=POMIJAJ)
skopiowane.append(skill.name)
print(f"{'予定' if a.na_sucho else '完了'}{' ' * (7 if a.na_sucho else 5)}{skill.name} <- {zrodlo}")
if not a.na_sucho and skopiowane:
rejestr_plik.write_text(json.dumps(sorted(nasze | set(skopiowane)), ensure_ascii=False, indent=1),
encoding="utf-8")
print(f"\n{'コピー予定' if a.na_sucho else 'コピー済み'}: {len(skopiowane)}、スキップ: {len(pominiete)}、コピー先: {a.cel}")
for o in ostrzezenia:
print(f"警告 {o} - CodexではSKILL.mdのヘッダーにnameとdescriptionが必要です")
if skopiowane and not a.na_sucho:
print("スキルを読み込ませるためCodexを再起動してください。")
return 1 if ostrzezenia else 0
if __name__ == "__main__":
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8")
sys.exit(main())
手順4:MCPサーバーを設定する
MCPサーバーは1つのコマンドで追加できます。新しいサービスの多くが採用する、アドレスから接続するサーバーの場合は次のとおりです。
codex mcp add flashboards --url https://flashboards.yaroflasher.com/api/mcp
codex mcp login flashboards
codex mcp list
私がFlashBoardsを追加したときは、サービスにすでにログインしていたため、CodexがブラウザーでOAuthログインを自動的に開きました。ローカルで起動するサーバーはcodex mcp add 名前 -- コマンドで追加します。環境変数は区切り文字の前に--envを使って指定します。設定はすべてconfig.tomlの[mcp_servers.名前]セクションに保存されます。独自のサーバーの作り方は、MCPサーバーを15分で作る方法で説明しています。
インポーターのエラーと、移行しないほうがよいセッション
Codexには組み込みのインポーターがあります。アプリの設定に「インポート」があり、その裏ではmigrate-to-codexスキルが--scan-only、--plan、--dry-runの各モードで動作します。私のコンピューターで実行したところ、スキル6つだけが見つかり、コマンド、サブエージェント、全体用のCLAUDE.mdは検出されませんでした。プロジェクトの記憶はインポート対象ではありませんでしたが、私にとって最も重要な情報はそこにありました。
--planモードは、ポーランド語の文字を含む最初のスキルで失敗しました。エラーはUnicodeDecodeError: 'charmap' codec can't decode byte 0x98です。スクリプトがシステムの既定の文字コードでファイルを読み込むために発生します。ポーランド語版Windowsではcp1250が使われます。環境変数PYTHONUTF8=1を設定して実行すれば回避できます。私のスクリプトは常にUTF-8で読み込むため、この問題は起きません。
インポーターでは、過去30日間の会話をCodexのスレッドとして移すこともできます。私は実行しませんでした。長いセッションの場合はおすすめしません。会話に貼り付けたスクリーンショットは、すべてトランスクリプトに含まれます。以前、Codex Desktopで1つのスレッドが33 GBに達し、アプリがメモリーに読み込もうとしたことがありました。AGENTS.mdを整え、メモを参照できるようにしてから、Codexを新しい状態で使い始めるほうがよいでしょう。
Codexが設定を読み込んだか確認する
最後に、ターミナルからCodexへ4つの確認質問をしました。ダッシュ記号に関するルール、利用できるスキル、メモの目次の冒頭にある内容、FlashBoardsのツールを使えるかどうかです。ルールとスキルにはすぐ正しく答えました。メモのファイルを読み込めたのは、完全なアクセス権(-s danger-full-access)を与えた後でした。Windowsの読み取り専用モードでは、サンドボックスのエラーが発生したためです。アプリでも完全なアクセス権を有効にすれば、追加フラグなしで動作します。
これでCodexは、Claudeと同じルールと知識を使えるようになりました。メッセージごとの費用や、週間上限を使い切らない方法は、Codexの使用上限を使い切らない設定で解説しています。次に取り組んだのは逆方向の連携です。Claude CodeからCodexへタスクを依頼する方法は、OpenAI公式プラグインの記事をご覧ください。
Google · あなたの情報源GoogleでKiramesuをもっと上位に表示-ワンクリックで設定お気に入りの情報源に追加 →出典
- OpenAI「AGENTS.mdを使ったカスタム指示」: https://learn.chatgpt.com/docs/agent-configuration/agents-md
- OpenAI「エージェントスキル」: https://learn.chatgpt.com/docs/build-skills
- OpenAI「Codex CLIのModel Context Protocol」: https://learn.chatgpt.com/docs/extend/mcp?surface=cli
- OpenAI「設定リファレンス」: https://learn.chatgpt.com/docs/config-file/config-reference
- Daniel Vaughan「Codex CLIのエージェント移行システム」: https://codex.danielvaughan.com/2026/05/13/codex-cli-agent-migration-system-import-claude-code-sessions-skills-config/
- 独自のインポート・設定テスト、Codex CLI 0.162.1、2026年11月3日


