Codex 两台 Mac 同步会话与配置的可行方案
同一个账号在办公室和家里两台 Mac 上使用 Codex,常遇到配置、会话和运行任务对不上。问题在于状态主要保存在本地,且会话存在路径和锁差异。下面拆分配置同步、会话迁移与单一远程环境三类做法,并给出 Git、rsync、SSH+tmux、远程控制的选择和检查清单。
办公室一台 Mac、家里一台 Mac,同一个账号使用 Codex,期望走到哪都能接着上一次会话继续。实际常见情况是:规则、技能和配置对不上,历史会话看不到,一端打开的会话另一端被锁,正在跑的任务更无法靠文件夹同步搬走。
笼统说“同步”会掩盖差异。需要区分机器级配置、项目级规则、历史会话和运行中进程,它们适合的办法完全不同。
先分清要同步什么
| 状态 | 内容 | 适合方式 |
|---|---|---|
| 机器级配置 | 配置文件、技能、提示词、登录状态 | 私有仓库或手动备份,认证文件单独处理 |
| 项目级规则 | 仓库中的规则文件、项目说明 | 跟着 Git 走最稳 |
| 历史会话 | 会话记录、日志、索引 | 备份恢复或单一远程机,不建议双向实时同步 |
| 运行中任务 | 正在执行的进程、终端状态 | 不能靠文件同步,只能远程接管 |
真正影响连续工作的是后两层,配置不一致往往只是表象。
为什么很难做到无缝
- Codex 的状态主要保存在本地用户目录,不同版本、App 与 CLI 的目录结构和读写方式可能不同。
- 会话记录常带有项目路径、时间等信息,两台 Mac 的用户名或目录不一致时,恢复后可能找不到原项目。
- 同一个会话在两端同时打开,容易出现锁、覆盖或只读,App 和 CLI 的行为也不完全一样。
- 登录凭证和令牌属于敏感数据,不适合直接放进 iCloud、Git 或普通同步盘。
- 不同端拿到的模型和功能上线节奏可能不同,这属于服务侧差异,不是同步能解决的。
因此先接受一个现实:目前没有通用做法,能让两台机器上的所有会话和运行状态像云文档一样自动合并。官方是否提供新的同步或设备连接能力,以其最新文档和客户端为准。
方案一:只维护一台始终在线的开发机
这是最接近“无缝”的做法:代码、配置、会话和进程都在同一台机器上,两台本地 Mac 只是连接终端。
CLI 用户可以用 SSH 加 tmux:
ssh -o ServerAliveInterval=60 user@host
tmux new -s codex
codex
临时断开按 Ctrl-b 再按 d,下次重连后执行:
tmux attach -t codex
任务不会因为本地合盖或断网而立即消失。需要图形界面时,可以用远程桌面或客户端自带的设备连接功能接管那台机器。注意不要在两端同时打开同一个会话;CLI 和 App 混用时尤其容易触发锁。
如果不想自己维护公网入口,或者本地机器性能、网络不稳定、需要长期在线跑任务,也可以选择一台托管在机房的远程 Mac,例如整台 Mac mini 放在新加坡机房、按月租用、通过远程连接使用。它适合把运行环境固定下来,但选型时要重点确认延迟、磁盘加密、账号隔离、备份和网络出口,不要只测试能否连上。
方案二:把配置拆成项目级和机器级
最值得先做的是把项目规则放进代码仓库。很多规则、说明和提示词本来就该跟项目走,放在仓库里的规则文件会随 Git 提交、拉取,天然完成同步。
机器级配置则可以放进私有的 dotfiles 仓库。先看清目录内容:
cd ~/.codex
ls -la
确认存在哪些配置、技能和提示词目录后,再有选择地纳入版本控制。.gitignore 至少应排除认证文件、日志、缓存和临时文件,例如:
auth.json
*.log
sessions/
tmp/
cache/
换机后重新登录,不要把登录凭证提交到任何仓库。两台 Mac 的项目路径尽量保持一致,例如都放在 /Users/你的用户名/work/项目名,这样恢复会话时更不容易出现路径错位。
方案三:用 Syncthing、rsync 或网盘同步
文件同步适合配置和技能,不适合正在写入的会话数据库。使用前先完全退出 Codex,并只在一个方向修改,避免两端同时写。
用 rsync 推送配置时,建议排除认证和会话目录:
rsync -av --exclude auth.json --exclude sessions/ --exclude log/ --exclude tmp/ ~/.codex/ user@host:~/.codex/
第一次执行前先备份目标目录,不要直接加 --delete。Syncthing 适合两台机器长期同步,但同样要排除认证文件、锁文件和日志;iCloud 更适合放手动导出的压缩包,不建议把活跃的 ~/.codex 直接放进网盘让两端同时读写。
方案四:做一套会话备份与恢复脚本
如果只是偶尔换机,手动备份比实时同步更稳妥。步骤是:
- 退出 Codex,确认没有任务在写会话。
- 打包配置和会话,排除认证、日志和临时文件。
- 通过加密磁盘、加密压缩包或可信传输方式搬到另一台 Mac。
- 恢复前先备份目标机器的
~/.codex。 - 解开后启动 Codex,用一个测试会话验证能否打开、路径是否正确。
示例打包命令:
cd ~
tar --exclude='.codex/auth.json' --exclude='.codex/log' --exclude='.codex/tmp' -czf ~/codex-backup-$(date +%F).tgz .codex
恢复时不要直接覆盖原目录,先把现有目录改名留底,再解压。两台机器的 Codex 版本尽量接近;跨版本恢复前,先用不重要的工作区测试。第三方同步工具或开源项目也可以评估,但要先确认它是否读取认证文件、是否上传会话内容,并用无敏感数据的项目验证。
方案五:远程桌面与设备连接怎么选
远程桌面适合需要图形界面、偶尔接管、查看同一屏幕的场景,优点是任务留在原机器,缺点是延迟、分辨率和剪贴板体验不稳定。
SSH 加 tmux 更适合 CLI,资源占用低,断线重连方便,但需要自己管理密钥、防火墙和访问控制。不要为了图方便把 SSH 直接暴露到公网,优先使用可信网络、VPN 或组网工具,并开启密钥登录和最小权限。
官方客户端提供的设备连接或远程控制功能,入口和名称会随版本变化。它适合临时从另一台设备接管已授权的机器,使用前确认受控设备、锁屏策略和会话锁行为,不要把它当成多账号共享工具。
选择建议与检查清单
| 做法 | 适合场景 | 主要代价 |
|---|---|---|
| 单一远程开发机 | 需要持续运行、频繁换设备 | 依赖网络,需维护安全 |
| SSH + tmux | CLI 为主、任务不能停 | 无图形界面,需运维 |
| 远程桌面/设备连接 | 偶尔接管、图形操作 | 延迟和会话锁 |
| Git 管理项目规则 | 团队和项目配置一致 | 不解决历史会话 |
| 网盘/rsync/Syncthing | 配置和技能同步 | 冲突、锁和密钥风险 |
| 备份恢复脚本 | 低频换机、可控迁移 | 手动,版本和路径敏感 |
落地前检查:
- 两台机器的 Codex 版本是否接近。
- 同步前是否完全退出 Codex。
- 认证文件、令牌、日志是否被排除。
- 项目路径是否一致。
- 是否只在一个方向写入,避免双向冲突。
- 重要会话是否保留原始备份。
- 远程入口是否启用加密、强认证和访问限制。
- 公司设备是否符合数据出境、保密和账号使用规定。
- 官方同步、设备连接和模型能力是否有更新,以官方最新说明为准。
小结
两台 Mac 之间不存在一个适用于所有人的“Codex 一键同步”。配置和项目规则可以用 Git 管好;历史会话适合备份恢复或固定在单一机器;运行中任务最稳妥的解法是远程接管一台始终在线的开发机。先明确自己是要“配置一致”“会话可查”还是“任务不停”,再选方案,通常比追求全自动同步更可靠。