木智利
13 篇在线开始阅读
Codex · 图文教程

把 Claude 的项目和记录,迁移到 Codex

先保住资料,再选一种接入方式,把手头的工作接着做下去。

作者:小佛爷 · 智能体先锋队成员7 步按图操作一页看完
FIG 09 · MIGRATE.MORPHLIVE
Claude 迁移到 Codex7 步
资料来源
操作环境

切换后,下面每一步都会显示对应路线的内容。

01

STEP 01 / 07

先确认手里有哪些资料

这次要带走的是项目文件、可读取的聊天和工作背景。先确认资料在哪,再按下面的步骤处理;账号订阅和工具的登录状态需要另行设置。

准备能正常登录的 Codex;已有则直接继续,尚未安装可查看官方 CLI 安装说明。

先找到用来做什么
原项目目录代码、素材、未提交修改;后面让 Codex 打开这个目录
%USERPROFILE%\.claude\projects本地会话 JSONL 和项目记忆
CLAUDE.md、.claude/项目规则、技能和配置;缺项时再整理

如果在 WSL、Docker 或 SSH 服务器运行 Claude Code,请到原环境找记录。设置过 CLAUDE_CONFIG_DIR 或 autoMemoryDirectory 时,以实际目录为准。history.jsonl 只记录输入历史,不能代替完整会话。

先保存正在编辑的内容,暂时保留原目录和缓存。下一步先做副本。

这次要带走的是项目文件、可读取的聊天和工作背景。先确认资料在哪,再按下面的步骤处理;账号订阅和工具的登录状态需要另行设置。

准备能正常登录的 Codex;已有则直接继续,尚未安装可查看官方 CLI 安装说明。

先找到用来做什么
原项目目录代码、素材、未提交修改;后面让 Codex 打开这个目录
~/.claude/projects/本地会话 JSONL 和项目记忆
CLAUDE.md、.claude/项目规则、技能和配置;缺项时再整理

如果在 WSL、Docker 或 SSH 服务器运行 Claude Code,请到原环境找记录。设置过 CLAUDE_CONFIG_DIR 或 autoMemoryDirectory 时,以实际目录为准。history.jsonl 只记录输入历史,不能代替完整会话。

先保存正在编辑的内容,暂时保留原目录和缓存。下一步先做副本。

这次要带走的是项目文件、可读取的聊天和工作背景。先确认资料在哪,再按下面的步骤处理;账号订阅和工具的登录状态需要另行设置。

准备能正常登录的 Codex;已有则直接继续,尚未安装可查看官方 CLI 安装说明。

本路线适合 Claude 网页或 Chat 聊天。网页记录与 Claude Code 本地会话是两套数据,不需要为了导出网页记录去找 .claude/projects/。

  • 准备原账号、绑定邮箱,以及独立的备份文件夹。
  • 有正在做的项目时,另外准备代码、附件和 Projects 指令的现存副本。
  • 聊天可以补充思路,不能代替最新代码和上传文件。

下一步从 Claude 的导出入口取得压缩包。只有现成导出包时,也可以直接保留副本继续。

这次要带走的是项目文件、可读取的聊天和工作背景。先确认资料在哪,再按下面的步骤处理;账号订阅和工具的登录状态需要另行设置。

准备能正常登录的 Codex;已有则直接继续,尚未安装可查看官方 CLI 安装说明。

本路线适合只有旧磁盘、项目文件夹或现成备份的情况。先把能找到的内容列清楚:

  • 代码、素材、未提交修改和当前可用的部署或仓库副本。
  • CLAUDE.md、memory/、聊天导出和任务笔记。
  • 旧路径与新路径的对应关系,以及缺失的资料。

如果已找回完整 Claude Code 数据,并希望使用导入器,可以切到“Claude Code 本地记录”路线。只有代码和文档时,也可以直接交接,不必等待找齐聊天。

完成标志
  • 我已完成本步核对。
02

STEP 02 / 07

先留一份独立备份申请导出,保存原始文件把项目和原始备份分开保存

先保存未落盘的修改,关闭仍在写入的 Claude Code 会话。把示例里的项目路径改成自己的路径;备份目录放在项目和 Claude 数据目录之外。

在 PowerShell 运行。没有 F 盘时,也把 F:\AI\claude-rescue 换成自己的备份位置。

$sourceProject = 'F:\AI\my-project'
$backupBase = 'F:\AI\claude-rescue'
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
$backupRoot = Join-Path $backupBase $stamp
$claudeRoot = if ($env:CLAUDE_CONFIG_DIR) {
  $env:CLAUDE_CONFIG_DIR
} else {
  Join-Path $env:USERPROFILE '.claude'
}

if (-not (Test-Path -LiteralPath $sourceProject -PathType Container)) {
  throw '项目目录不存在,请检查 sourceProject'
}
$projectFull = (Resolve-Path -LiteralPath $sourceProject -ErrorAction Stop).Path.TrimEnd('\')
$claudeFull = [IO.Path]::GetFullPath($claudeRoot).TrimEnd('\')
$backupFull = [IO.Path]::GetFullPath($backupRoot).TrimEnd('\')
foreach ($sourceFull in @($projectFull, $claudeFull)) {
  if ($backupFull.Equals($sourceFull, [StringComparison]::OrdinalIgnoreCase) -or
      $backupFull.StartsWith($sourceFull + '\', [StringComparison]::OrdinalIgnoreCase)) {
    throw '备份位置在源目录内,请改到独立目录或磁盘'
  }
}
if (Test-Path -LiteralPath $backupRoot) {
  throw '备份目录已存在,停止以避免覆盖'
}
New-Item -ItemType Directory -Path $backupRoot -ErrorAction Stop | Out-Null
Copy-Item -LiteralPath $sourceProject -Destination (Join-Path $backupRoot 'project') -Recurse -Force -ErrorAction Stop
if (Test-Path -LiteralPath $claudeRoot -PathType Container) {
  Copy-Item -LiteralPath $claudeRoot -Destination (Join-Path $backupRoot 'claude-data') -Recurse -Force -ErrorAction Stop
} else {
  Write-Warning '项目已备份;Claude 数据目录未找到,请检查原运行环境后补充备份'
}
$extraConfig = Join-Path $env:USERPROFILE '.claude.json'
if (Test-Path -LiteralPath $extraConfig) {
  Copy-Item -LiteralPath $extraConfig -Destination $backupRoot -ErrorAction Stop
}
Get-ChildItem -LiteralPath $backupRoot -Force

完成后打开备份里的 project 和 claude-data,抽查文件确实能读。Claude 数据目录没找到时,项目仍会备份,但需要回到原环境补找记录。外置记忆、符号链接或 junction 指向的其他位置要另存副本。

有 Git:记录当前工作区状态

这些命令只查看状态。没有 Git 时跳过,仍要保存未提交文件和本地素材。

git status --short
git branch --show-current
git log -5 --oneline
git diff --stat

完整备份可能含私人聊天和凭据,留在自己控制的存储中;不要整包提交到公开仓库。

先保存未落盘的修改,关闭仍在写入的 Claude Code 会话。把示例里的项目路径改成自己的路径;备份目录放在项目和 Claude 数据目录之外。

在 Bash 或 Zsh 运行。WSL 请使用运行 Claude Code 的 Linux 用户环境。

source_project='/path/to/my-project'
claude_root="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
backup_root="$HOME/claude-rescue/$(date +%Y%m%d-%H%M%S)"

backup_claude() {
  [ -d "$source_project" ] || { printf '项目目录不存在\n' >&2; return 1; }
  [ ! -e "$backup_root" ] || { printf '备份目录已存在\n' >&2; return 1; }
  project_full=$(cd "$source_project" && pwd -P) || return 1
  mkdir -p "$(dirname "$backup_root")" || return 1
  backup_parent=$(cd "$(dirname "$backup_root")" && pwd -P) || return 1
  backup_full="$backup_parent/$(basename "$backup_root")"
  case "$backup_full/" in
    "$project_full/"*) printf '备份位置在项目内,请换位置\n' >&2; return 1 ;;
  esac
  if [ -d "$claude_root" ]; then
    claude_full=$(cd "$claude_root" && pwd -P) || return 1
    case "$backup_full/" in
      "$claude_full/"*) printf '备份位置在 Claude 数据内,请换位置\n' >&2; return 1 ;;
    esac
  fi
  mkdir "$backup_root" || return 1
  cp -a "$source_project" "$backup_root/project" || return 1
  if [ -d "$claude_root" ]; then
    cp -a "$claude_root" "$backup_root/claude-data" || return 1
  else
    printf '项目已备份;Claude 数据未找到,请检查原运行环境后补充备份\n' >&2
  fi
  if [ -f "$HOME/.claude.json" ]; then
    cp -a "$HOME/.claude.json" "$backup_root/" || return 1
  fi
  printf '备份位置:%s\n' "$backup_root"
  ls -la "$backup_root"
}
backup_claude

完成后打开备份里的 project 和 claude-data,抽查文件确实能读。Claude 数据目录没找到时,项目仍会备份,但需要回到原环境补找记录。外置记忆、符号链接或 junction 指向的其他位置要另存副本。

有 Git:记录当前工作区状态

这些命令只查看状态。没有 Git 时跳过,仍要保存未提交文件和本地素材。

git status --short
git branch --show-current
git log -5 --oneline
git diff --stat

完整备份可能含私人聊天和凭据,留在自己控制的存储中;不要整包提交到公开仓库。

  1. 还能进入 Claude 设置时,打开 Settings → Privacy → Export data。网页和 Claude Desktop 支持发起导出;手机 App 不能从客户端发起。
  2. 账号受限时,登录 claude.ai,查看受限页面是否提供 Export data。可导出范围以账号实际入口为准。
  3. 到绑定邮箱下载导出 ZIP;下载时保持登录。邮件链接发出后 24 小时过期,过期可以重新申请。
  4. 原 ZIP 留作备份,再解压一份用于后面的处理。项目文件、上传附件和 Projects 指令是否包含在内,需要分别检查;缺失的从现存副本补回。
Team/Enterprise 账号

普通成员在组织所有者启用后,可以导出自己的聊天;此导出不含上传文件。组织全量数据由 Primary Owner 从组织数据与隐私入口操作。没有需要的权限时,联系组织负责人。

已经持有导出包时,保留一份未改动的原 ZIP 即可继续。

  1. 从旧磁盘或备份中复制需要的项目到当前电脑,先保留原副本。
  2. 给当前工作副本再留一份独立备份。文件管理器复制时,带上隐藏文件、未提交修改、未跟踪文件和必要素材;重新 clone 仓库并不包含这些内容。
  3. 把可用的规则、记忆、聊天和任务笔记放在同一份清单中,记录旧路径与新路径。目录链接指向的外部文件单独复制。

不要直接在唯一的备份上整理、改名或批量替换路径。没有的聊天先标为缺失,继续用现有文件交接。

完成标志
  • 我已完成本步核对。
03

STEP 03 / 07

选择一种接入方式将网页记录整理成可读资料在 Codex 打开项目副本

三种方式选一种即可。需要 Codex 直接接手项目时,优先使用本地 CLI;导入器不可用时,手工接入同样可以继续。

接入方式 · 选择一种即可

如果已能运行 Codex,可从进入项目开始。下面的 npm 更新命令需要本机已有 Node.js 和 npm;通过其他渠道安装的 Codex,按原渠道更新:

npm install -g @openai/codex@latest
codex --version

把路径改成你的项目,在 PowerShell 启动:

try {
  Set-Location -LiteralPath 'F:\AI\my-project' -ErrorAction Stop
  codex
} catch {
  Write-Error '没有成功进入项目目录,请检查路径'
}

登录 Codex 后,在它的聊天输入框输入下面这行,不是在系统终端或 Claude Code 中输入:

/import
  1. 选择 Claude Code,再选择这次要接手的项目。
  2. 查看指令、设置与最近聊天的清单,按需要导入。
  3. 记下未导入、需要重新登录或提示不兼容的项目,下一步只补这些缺项。
看不到 /import,或数据在其他机器

/import 仅用于本地、空闲的 Codex CLI 交互界面。运行中的任务、远程会话或连接本地 app-server daemon 时不可用。CLI 最多导入最近 30 天内的 50 条聊天。

更新后新建本地空闲会话再试;仍不可用就选择手工接入。远程数据、自定义 CLAUDE_CONFIG_DIR 没被识别时,可以使用那台机器上的本地 CLI,或保留备份做手工交接,不要覆盖默认目录来迁就导入器。

如果已能运行 Codex,可从进入项目开始。下面的 npm 更新命令需要本机已有 Node.js 和 npm;通过其他渠道安装的 Codex,按原渠道更新:

npm install -g @openai/codex@latest
codex --version

把路径改成你的项目,在 Bash 或 Zsh 启动:

cd '/path/to/my-project' && codex

登录 Codex 后,在它的聊天输入框输入下面这行,不是在系统终端或 Claude Code 中输入:

/import
  1. 选择 Claude Code,再选择这次要接手的项目。
  2. 查看指令、设置与最近聊天的清单,按需要导入。
  3. 记下未导入、需要重新登录或提示不兼容的项目,下一步只补这些缺项。
看不到 /import,或数据在其他机器

/import 仅用于本地、空闲的 Codex CLI 交互界面。运行中的任务、远程会话或连接本地 app-server daemon 时不可用。CLI 最多导入最近 30 天内的 50 条聊天。

更新后新建本地空闲会话再试;仍不可用就选择手工接入。远程数据、自定义 CLAUDE_CONFIG_DIR 没被识别时,可以使用那台机器上的本地 CLI,或保留备份做手工交接,不要覆盖默认目录来迁就导入器。

网页 ZIP 不能直接交给 Codex CLI 的 /import;本步骤先转为可读资料。解压后有 conversations.json 时,可以转换为 Markdown:

下载后把脚本保存到自己的工具目录。需要 Python 3.10 或更新版本,仅使用标准库;在本机离线运行,不需要登录 Claude 或调用模型。

下载 export_claude.py

以下以脚本保存在 F:\AI\claude-rescue 为例,按实际位置替换路径:

python 'F:\AI\claude-rescue\export_claude.py' 'F:\AI\claude-rescue\web-export\conversations.json' --out 'F:\AI\claude-rescue\archive-web'

--out 后必须是输入目录以外、尚不存在的新目录。已有同名目录就换名字,不要删除旧结果来重跑。转换后打开 INDEX.md,抽查一条熟悉的对话。

转换范围与退出码

脚本提取识别到的用户/助手可见文本,跳过思考块、工具调用和工具结果,不重建分叉的最终对话链。Markdown 是可读资料,不能作为 Codex 原生会话 resume,也不能替代原始日志备份。

退出码 0:本次未报告数据缺口;1:失败或没有有效会话;2:已生成部分归档但存在缺口。出现 2 时先看终端警告和 INDEX.md,再回查原始文件。即使为 0,也仅覆盖脚本支持的可见文本。

脚本不自动脱敏。只让 Codex 读取与任务有关、经过审查的资料;模型读取的内容可能进入请求。

如果没有 conversations.json,先打开导出包确认结构;保留可阅读的文件,不要仅改后缀强行转换。没有可转换聊天时,仍可用已有代码和文档继续交接。

网页 ZIP 不能直接交给 Codex CLI 的 /import;本步骤先转为可读资料。解压后有 conversations.json 时,可以转换为 Markdown:

下载后把脚本保存到自己的工具目录。需要 Python 3.10 或更新版本,仅使用标准库;在本机离线运行,不需要登录 Claude 或调用模型。

下载 export_claude.py

以下以脚本保存在 ~/claude-rescue 为例,按实际位置替换路径:

python3 ~/claude-rescue/export_claude.py ~/claude-rescue/web-export/conversations.json --out ~/claude-rescue/archive-web

--out 后必须是输入目录以外、尚不存在的新目录。已有同名目录就换名字,不要删除旧结果来重跑。转换后打开 INDEX.md,抽查一条熟悉的对话。

转换范围与退出码

脚本提取识别到的用户/助手可见文本,跳过思考块、工具调用和工具结果,不重建分叉的最终对话链。Markdown 是可读资料,不能作为 Codex 原生会话 resume,也不能替代原始日志备份。

退出码 0:本次未报告数据缺口;1:失败或没有有效会话;2:已生成部分归档但存在缺口。出现 2 时先看终端警告和 INDEX.md,再回查原始文件。即使为 0,也仅覆盖脚本支持的可见文本。

脚本不自动脱敏。只让 Codex 读取与任务有关、经过审查的资料;模型读取的内容可能进入请求。

如果没有 conversations.json,先打开导出包确认结构;保留可阅读的文件,不要仅改后缀强行转换。没有可转换聊天时,仍可用已有代码和文档继续交接。

在 Codex 中打开当前工作副本。先提供项目路径、旧备份路径和你整理的文件清单,不要求它先恢复不存在的聊天。

  1. 有 README、CLAUDE.md 或任务笔记,先作为项目资料保留。
  2. 有 Markdown 聊天档案,记下准确路径,后面只读取与任务相关的部分。
  3. 只有代码也可以继续:把已知目标与缺失背景分别记下来,在第五步形成交接。

找回完整的 Claude Code 数据且想使用导入器时,可切换数据来源;本路线不要求补装 Claude Code。

完成标志
  • 我已完成本步核对。
04

STEP 04 / 07可跳过

只补缺少的资料按需补回附件和项目资料按需补齐规则与背景

导入后没有缺项,可以直接进入下一步。手工接入或只缺少一部分资料时,按需要展开对应项:

找不到对应项目的会话或记忆

在备份的 claude-data\projects 中按时间、工作路径和一条熟悉的消息确认项目,不要只凭目录名。

Get-ChildItem -LiteralPath 'F:\AI\claude-rescue\你的备份目录\claude-data\projects' -Filter '*.jsonl' -Recurse -File |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 20 FullName, LastWriteTime, Length

memory/MEMORY.md 是索引,被引用的主题文件一起保留。需要追查子代理结论时,再查看相关 subagents/ 记录。

补齐项目规则、记忆或工具设置
缺少什么怎么补
项目 CLAUDE.md项目 AGENTS.md;已有文件先比较再合并
个人全局偏好Codex 全局 AGENTS.md;CODEX_HOME 自定义时用实际目录
项目记忆docs/ai-handoff/memory/,并在项目指令中写明读取入口
自定义技能项目 .agents/skills/ 或用户 ~/.agents/skills/,检查路径和依赖
MCP、hooks、权限和插件按 Codex 支持的配置逐项设置,需要的服务重新登录

Codex 不会因为复制了任意笔记就自动加载。核对 AGENTS.md 与同层优先的 AGENTS.override.md;全局和项目指令合计默认上限为 32 KiB,长篇历史留在归档中按需读取。若把 CLAUDE.md 配成后备文件名,同目录已找到 AGENTS.md 时,不会再自动加载两份。

不要把 settings.json 直接改名为 config.toml。两边的格式、权限和 hook 事件并不相同。凭据留在自己的存储或环境中,别从聊天里的旧 token 拼接新配置。

需要阅读未导入的历史:离线转换为 Markdown

下载后把脚本保存到自己的工具目录。需要 Python 3.10 或更新版本,仅使用标准库;在本机离线运行,不需要登录 Claude 或调用模型。

下载 export_claude.py

把路径改成实际备份位置,然后在 PowerShell 运行:

python 'F:\AI\claude-rescue\export_claude.py' 'F:\AI\claude-rescue\你的备份目录\claude-data\projects' --out 'F:\AI\claude-rescue\archive-code'

--out 后必须是输入目录以外、尚不存在的新目录。已有同名目录就换名字,不要删除旧结果来重跑。转换后打开 INDEX.md,抽查一条熟悉的对话。

转换范围与退出码

脚本提取识别到的用户/助手可见文本,跳过思考块、工具调用和工具结果,不重建分叉的最终对话链。Markdown 是可读资料,不能作为 Codex 原生会话 resume,也不能替代原始日志备份。

退出码 0:本次未报告数据缺口;1:失败或没有有效会话;2:已生成部分归档但存在缺口。出现 2 时先看终端警告和 INDEX.md,再回查原始文件。即使为 0,也仅覆盖脚本支持的可见文本。

脚本不自动脱敏。只让 Codex 读取与任务有关、经过审查的资料;模型读取的内容可能进入请求。

导入后没有缺项,可以直接进入下一步。手工接入或只缺少一部分资料时,按需要展开对应项:

找不到对应项目的会话或记忆

在备份的 claude-data/projects/ 中按时间、工作路径和一条熟悉的消息确认项目,不要只凭目录名。

find "$HOME/claude-rescue/你的备份目录/claude-data/projects" -type f -name '*.jsonl'

memory/MEMORY.md 是索引,被引用的主题文件一起保留。需要追查子代理结论时,再查看相关 subagents/ 记录。

补齐项目规则、记忆或工具设置
缺少什么怎么补
项目 CLAUDE.md项目 AGENTS.md;已有文件先比较再合并
个人全局偏好Codex 全局 AGENTS.md;CODEX_HOME 自定义时用实际目录
项目记忆docs/ai-handoff/memory/,并在项目指令中写明读取入口
自定义技能项目 .agents/skills/ 或用户 ~/.agents/skills/,检查路径和依赖
MCP、hooks、权限和插件按 Codex 支持的配置逐项设置,需要的服务重新登录

Codex 不会因为复制了任意笔记就自动加载。核对 AGENTS.md 与同层优先的 AGENTS.override.md;全局和项目指令合计默认上限为 32 KiB,长篇历史留在归档中按需读取。若把 CLAUDE.md 配成后备文件名,同目录已找到 AGENTS.md 时,不会再自动加载两份。

不要把 settings.json 直接改名为 config.toml。两边的格式、权限和 hook 事件并不相同。凭据留在自己的存储或环境中,别从聊天里的旧 token 拼接新配置。

需要阅读未导入的历史:离线转换为 Markdown

下载后把脚本保存到自己的工具目录。需要 Python 3.10 或更新版本,仅使用标准库;在本机离线运行,不需要登录 Claude 或调用模型。

下载 export_claude.py

把路径改成实际备份位置,然后在 Bash 或 Zsh 运行:

python3 ~/claude-rescue/export_claude.py ~/claude-rescue/你的备份目录/claude-data/projects --out ~/claude-rescue/archive-code

--out 后必须是输入目录以外、尚不存在的新目录。已有同名目录就换名字,不要删除旧结果来重跑。转换后打开 INDEX.md,抽查一条熟悉的对话。

转换范围与退出码

脚本提取识别到的用户/助手可见文本,跳过思考块、工具调用和工具结果,不重建分叉的最终对话链。Markdown 是可读资料,不能作为 Codex 原生会话 resume,也不能替代原始日志备份。

退出码 0:本次未报告数据缺口;1:失败或没有有效会话;2:已生成部分归档但存在缺口。出现 2 时先看终端警告和 INDEX.md,再回查原始文件。即使为 0,也仅覆盖脚本支持的可见文本。

脚本不自动脱敏。只让 Codex 读取与任务有关、经过审查的资料;模型读取的内容可能进入请求。

导出的聊天已经可读、附件也齐全时,直接进入下一步。

导出包缺少附件或 Projects 指令

查看原项目、旧磁盘、网盘或自己保存的附件副本。把找到的内容与聊天对应起来,缺失部分列在交接文档里;不能把未找到的文件当作已经迁移。

转换失败或只有部分结果

保留原 ZIP 和原 JSON,查看终端警告与 INDEX.md。退出码 2 表示有缺口;不支持的结构先按可读内容人工整理,不要覆盖原文件或仅修改后缀。

网页记录中有项目规则

挑出仍有效的目标、约定和限制,合并到项目 AGENTS.md 或交接文档。已有规则先比较;整段历史不需要塞进指令文件。

现有文档足够接手时,直接进入下一步。只补与当前任务有关的内容:

将 Claude 项目规则转给 Codex
缺少什么怎么补
项目 CLAUDE.md项目 AGENTS.md;已有文件先比较再合并
个人全局偏好Codex 全局 AGENTS.md;CODEX_HOME 自定义时用实际目录
项目记忆docs/ai-handoff/memory/,并在项目指令中写明读取入口
自定义技能项目 .agents/skills/ 或用户 ~/.agents/skills/,检查路径和依赖
MCP、hooks、权限和插件按 Codex 支持的配置逐项设置,需要的服务重新登录

Codex 不会因为复制了任意笔记就自动加载。核对 AGENTS.md 与同层优先的 AGENTS.override.md;全局和项目指令合计默认上限为 32 KiB,长篇历史留在归档中按需读取。若把 CLAUDE.md 配成后备文件名,同目录已找到 AGENTS.md 时,不会再自动加载两份。

不要把 settings.json 直接改名为 config.toml。两边的格式、权限和 hook 事件并不相同。凭据留在自己的存储或环境中,别从聊天里的旧 token 拼接新配置。

旧机器路径已经变了

保留“旧路径 → 新路径”对照,修正工作副本中的文档引用、技能脚本路径和 MCP 命令。原始备份不做批量替换。当前任务不依赖的工具可以暂不配置。

没有聊天或任务记录

从当前代码、README、Git 历史和已知需求整理能核实的事实。把推测和待确认项单列;不补写不存在的历史,也不阻塞现有项目交接。

完成标志
  • 需要补齐的内容已处理。
05

STEP 05 / 07

把当前任务交接清楚

在项目中准备 docs/ai-handoff/SUMMARY.md,用当前文件和可用记录填清目标、已完成、未完成、下一项工作。已有交接文档就更新它,不另建一份互相冲突的版本。

展开交接文档模板
# 项目交接

更新时间:<日期、时间、时区>
项目路径:<绝对路径>
分支:<当前分支;没有 Git 就写没有>

## 目标与范围
用户要完成什么,明确不包含什么。

## 已确认的决定
写清决定内容、理由,以及可以核对的记录来源。

## 当前状态
已完成:<文件、行为、实际交付位置>
未完成:<待办>
未验证:<尚未运行的测试或未核实的结论>

## 工作区
未提交修改:<文件>
未跟踪但必须保留的文件:<文件>
其他人的改动:<不要覆盖的范围>

## 验证结果
运行过什么命令,结果如何,失败或跳过的原因是什么。

## 下一项工作
第一步做什么,完成标准是什么。

## 关键资料
指令、记忆、相关会话、截图和外部资料的准确位置。

## 配置与授权边界
需要重新登录的服务;提交、推送、部署各自是否已获授权。

有必要保留的关键尝试和失败,另记在 RUN_LOG.md;相关记忆和历史归档只写准确路径,不搬进全部聊天。没有 Git、聊天或记忆时,按实际情况注明即可。

文档写好后,在 Codex 中打开项目工作副本。下一步用同一段提示词核对它是否接住了任务。

有代码项目时使用它的工作副本;只有聊天和文档时,先建一个资料工作文件夹,在 Codex 中打开它。

在项目中准备 docs/ai-handoff/SUMMARY.md,用当前文件和可用记录填清目标、已完成、未完成、下一项工作。已有交接文档就更新它,不另建一份互相冲突的版本。

展开交接文档模板
# 项目交接

更新时间:<日期、时间、时区>
项目路径:<绝对路径>
分支:<当前分支;没有 Git 就写没有>

## 目标与范围
用户要完成什么,明确不包含什么。

## 已确认的决定
写清决定内容、理由,以及可以核对的记录来源。

## 当前状态
已完成:<文件、行为、实际交付位置>
未完成:<待办>
未验证:<尚未运行的测试或未核实的结论>

## 工作区
未提交修改:<文件>
未跟踪但必须保留的文件:<文件>
其他人的改动:<不要覆盖的范围>

## 验证结果
运行过什么命令,结果如何,失败或跳过的原因是什么。

## 下一项工作
第一步做什么,完成标准是什么。

## 关键资料
指令、记忆、相关会话、截图和外部资料的准确位置。

## 配置与授权边界
需要重新登录的服务;提交、推送、部署各自是否已获授权。

有必要保留的关键尝试和失败,另记在 RUN_LOG.md;相关记忆和历史归档只写准确路径,不搬进全部聊天。没有 Git、聊天或记忆时,按实际情况注明即可。

文档写好后,在 Codex 中打开项目工作副本。下一步用同一段提示词核对它是否接住了任务。

在项目中准备 docs/ai-handoff/SUMMARY.md,用当前文件和可用记录填清目标、已完成、未完成、下一项工作。已有交接文档就更新它,不另建一份互相冲突的版本。

展开交接文档模板
# 项目交接

更新时间:<日期、时间、时区>
项目路径:<绝对路径>
分支:<当前分支;没有 Git 就写没有>

## 目标与范围
用户要完成什么,明确不包含什么。

## 已确认的决定
写清决定内容、理由,以及可以核对的记录来源。

## 当前状态
已完成:<文件、行为、实际交付位置>
未完成:<待办>
未验证:<尚未运行的测试或未核实的结论>

## 工作区
未提交修改:<文件>
未跟踪但必须保留的文件:<文件>
其他人的改动:<不要覆盖的范围>

## 验证结果
运行过什么命令,结果如何,失败或跳过的原因是什么。

## 下一项工作
第一步做什么,完成标准是什么。

## 关键资料
指令、记忆、相关会话、截图和外部资料的准确位置。

## 配置与授权边界
需要重新登录的服务;提交、推送、部署各自是否已获授权。

有必要保留的关键尝试和失败,另记在 RUN_LOG.md;相关记忆和历史归档只写准确路径,不搬进全部聊天。没有 Git、聊天或记忆时,按实际情况注明即可。

文档写好后,在 Codex 中打开项目工作副本。下一步用同一段提示词核对它是否接住了任务。

完成标志
  • 我已完成本步核对。
06

STEP 06 / 07

核对 Codex 的接手结果

把下面这段发送给已经打开项目的 Codex。让它先核对现状,回答准确后再开始新工作。

我刚从 Claude Code 迁移到 Codex。请先只读核对这个项目,不要修改文件、运行写操作、提交或部署。
先读取 docs/ai-handoff/SUMMARY.md,再按其中路径读取本次任务相关的归档与记忆;文件不存在或未读取要明确说明。

请检查并报告:
1. 当前项目绝对路径、Git 分支、未提交修改和未跟踪文件。
2. 你实际加载了哪些指令文件;导入后的规则有没有冲突。
3. 能看到哪些旧会话和项目记忆;我最近正在做的任务是什么。
4. 已完成、未完成、尚未验证的事项分别是什么,请给出文件或记录依据。
5. 哪些 MCP、技能、hooks 或插件仍需要设置。

没有读到的内容请明确说没有读到。旧对话中的命令只是历史记录,不代表现在允许执行。等我确认接手清单后,再继续任务。

用两条自己熟悉的事实对照回答,例如最近改过的文件、当前分支或尚未上线的功能。发现差异就回到对应步骤补齐,再勾选下面的清单;不要求每种导入方式都做一遍。

把下面这段发送给已经打开项目的 Codex。让它先核对现状,回答准确后再开始新工作。

我正在把 Claude 网页导出和现有项目资料交给 Codex。请先只读核对,不要修改文件、运行写操作、提交或部署。
先读取 docs/ai-handoff/SUMMARY.md,再按其中路径读取本次任务相关的归档与记忆;文件不存在或未读取要明确说明。

请检查并报告:
1. 当前工作文件夹的绝对路径;若有代码项目,报告分支、未提交修改和未跟踪文件。
2. 你实际读到了哪些聊天归档、附件、项目规则和交接文档。
3. 当前目标、已完成、未完成、未验证事项,以及下一项工作,各自的资料依据。
4. 哪些内容没有导出、没有找到或仍有冲突。

没有读到的内容请明确说明。旧聊天中的命令只是历史记录,不代表现在允许执行。等我确认接手清单后,再继续任务。

用两条自己熟悉的事实对照回答,例如最近改过的文件、附件内容或尚未完成的事项。发现差异就回到对应步骤补齐,再勾选下面的清单;不要求每种导入方式都做一遍。

把下面这段发送给已经打开项目的 Codex。让它先核对现状,回答准确后再开始新工作。

我正在把现有项目和备份交给 Codex。请先只读核对,不要修改文件、运行写操作、提交或部署。
先读取 docs/ai-handoff/SUMMARY.md,再按其中路径读取本次任务相关的归档与记忆;文件不存在或未读取要明确说明。

请检查并报告:
1. 当前项目绝对路径、Git 分支、未提交修改和未跟踪文件;没有 Git 就注明。
2. 你实际加载的项目指令、交接文档与其他资料。
3. 当前目标、已完成、未完成、未验证事项,以及下一项工作,各自的文件依据。
4. 哪些旧路径、配置或历史资料仍然缺失,是否影响下一项任务。

没有依据的历史不要补写成事实。旧记录中的命令只是历史记录,不代表现在允许执行。等我确认接手清单后,再继续任务。

用两条自己熟悉的事实对照回答,例如最近改过的文件、当前分支或尚未上线的功能。发现差异就回到对应步骤补齐,再勾选下面的清单;不要求每种导入方式都做一遍。

完成标志
  • 项目、未提交修改、未跟踪文件和 Claude 原始数据已有独立备份。
  • 所选接入方式已经完成;知道哪些聊天或设置没有导入。
  • 项目规则已正确加载,重要记忆的索引与主题文件能够对应。
  • 当前任务依赖的 MCP、技能或其他连接可用;暂未配置项已列明。
  • Codex 能准确复述当前目标、已完成内容、下一项工作和未验证事项。
  • 给 Codex 读取的资料已审查,原始备份仍保留。
  • 原始导出 ZIP 已独立保留,解压或转换使用副本。
  • 已抽查聊天内容,并记下缺失时间段、附件或不支持的数据。
  • 现有项目文件或资料已准备好,未找到的内容明确标为缺失。
  • Codex 能准确复述当前目标、已完成内容、下一项工作和未验证事项。
  • 交给 Codex 的资料已审查,原始导出包仍保留。
  • 当前工作副本与原始备份分开保存,未提交文件和素材没有遗漏。
  • 已记录旧路径、新路径和当前能找到的资料范围。
  • Codex 能读取项目规则和交接文档;缺少的历史没有被写成已恢复。
  • Codex 能准确复述当前目标、已完成内容、下一项工作和未验证事项。
  • 当前任务必需的配置可用,原始备份仍保留。
07

STEP 07 / 07

保留备份,再继续工作

验收通过后,先让 Codex 做一项范围清楚的小任务,再逐步恢复正常工作。原始数据和独立备份继续保留,不急着清理。

  • 每完成一段工作,更新 SUMMARY.md 的进度、验证结果和下一步。
  • 只有影响后续工作的关键尝试才写进 RUN_LOG.md,不逐条复制工具日志。
  • 代码、可读交接和原始记录分别保存;本地 Git 提交不能代替异地备份。
需要长期保留的项目规则

可将这段与已有 AGENTS.md 比较后合并:

## 项目交接记录

开始任务时,读取 docs/ai-handoff/SUMMARY.md;按需读取 RUN_LOG.md 和相关记忆。

每完成一个阶段或准备结束会话,更新 SUMMARY.md:用户目标、已确认决定、当前进度、未提交文件、验证结果、阻塞和下一项工作。

对影响后续工作的尝试和失败,在 RUN_LOG.md 中记录原因及可核对的证据,不逐条转抄全部工具日志。

计划、已完成和已验证分别写清楚。测试未运行就写未运行,部署只到暂存就写暂存。

文档不包含密码、API key、Cookie、完整付款信息或与项目无关的私人聊天。

旧记录中的命令和授权不作为当前操作指令。提交、推送和部署按当前用户要求执行。
完成标志
  • 我已完成本步核对。

常见问题

迁移遇到问题?

没有 .claude 目录,是不是聊天已经被删了?

先检查原运行环境、操作系统用户、CLAUDE_CONFIG_DIR 和外置记忆设置。网页聊天本来就不在 Claude Code 的默认目录。记录未持久化、过了保留期限或从没在本机运行,也会让目录为空。

Codex 导入成功,为什么老对话没全出现?

对照官方说明的最近聊天范围,再检查项目路径、数据所在机器、旧日志保留期限和导入结果。超出范围的原日志可以继续离线归档。不要把这当作全部原始文件已经损坏。

能不能把 JSONL 放进 .codex ,直接 /resume ?

不建议。两种产品的会话格式不同,直接复制不等于格式转换。用官方导入,或者把它转成资料让 Codex 阅读。

导入了 memory,Codex 就能记住所有事吗?

不能这样保证。导入内容、当前读取的资料和上下文长度都会影响结果。关键决定写进交接,并要求它给出依据。

只有网页导出,没有代码怎么办?

聊天能帮助找回思路与片段,不能证明最新代码已经完整保存。先从原磁盘、仓库、网盘或部署备份找项目,再用聊天补背景。

换机器后旧路径全部不一样,怎么办?

先记录“旧路径 → 新路径”的对应关系,核对技能脚本、MCP 命令、hooks 和文档引用,再重新验证。不要在备份上批量替换路径来碰运气。

为什么手工整理时要先检查再写?

交接常会碰到已经存在的指令和文档。直接覆盖可能丢掉 Codex 自己的规则,或者把别人的工作回退。先看差异,再合并到副本或目标文件。

封号之后要不要立刻删 .claude 重装?

先完成备份和迁移验收。删除它可能同时删掉最有价值的会话与记忆,重新安装不会把本地唯一副本变回来。