1. 项目概述:Codex 不是另一个聊天框,而是一个能“动手改代码”的终端搭档
Codex 这个名字最近在开发者圈子里反复刷屏,但很多人点开搜索结果后反而更迷糊了——它和 GitHub Copilot 什么关系?和本地部署的 Ollama 有什么区别?为什么教程里一会儿要装 Node.js,一会儿又要配神马中转 API,最后还要手动建.codex文件夹?我试过三次,两次卡在codex: command not found,一次成功启动后让它“修复一个空指针异常”,结果它把整个pom.xml给重写了。这不是 AI 编程,这是 AI 拆家。
我花了整整两周时间,从 Windows 原生环境、WSL2 Ubuntu、macOS M2 三套系统上完整跑通 Codex CLI 的全链路:安装 → 配置 → 接入第三方模型网关 → 项目实战 → 故障回溯。结论很明确:Codex 的核心价值根本不在“生成几行代码”,而在于它能把“理解项目上下文 + 执行修改操作 + 提交 Git 快照”这三件事串成一个原子动作。它不回答问题,它帮你做事。你告诉它“给用户登录接口加 JWT 校验”,它会自动扫描src/main/java/com/example/auth/下所有 Controller、Service、DTO 类,找出LoginController,定位到login()方法,在方法签名里加@AuthenticationPrincipal参数,在SecurityConfig里补http.authorizeHttpRequests()规则,最后生成一个带git add和git commit -m "feat(auth): add JWT validation to login endpoint"的执行计划——全程在终端里完成,不需要你切出 IDE。
所以这篇指南不叫“Codex 入门教程”,它叫“Codex 20 分钟速通上手指南”,因为真正卡住绝大多数人的从来不是技术门槛,而是认知偏差。你得先明白:Codex 是一个命令行工具(CLI),不是网页应用;它的配置文件路径、权限机制、模型路由逻辑,全部遵循 Unix 哲学——“一切皆文件,配置即代码”。它不提供图形界面,不内置模型,不打包运行时,它只做一件事:把你输入的自然语言指令,翻译成对当前项目目录下真实文件的读写操作,并确保每一步都可审计、可回滚、可复现。下面这 20 分钟,我们不装模作样点开网页,就打开终端,从npm install开始,用最原始的方式,把它变成你键盘边上的第四个手指。
2. 安装与环境准备:为什么必须用 Node.js LTS,而不是最新版?
2.1 Node.js 版本选择:LTS 不是保守,而是契约
Codex CLI 的官方文档明确要求 Node.js 22+,但实际测试中你会发现,直接装 Node.js 22.12.0 或 23.x 会导致npm install -g @openai/codex后codex --version报错Error: Cannot find module 'node:fs'。这不是你的网络问题,也不是 npm 权限问题,而是 Codex CLI 内部依赖的某个底层库(@openai/openapi)在非 LTS 版本中调用了尚未稳定发布的 Node.js 内置模块 API。这个问题在 GitHub Issues 里被标记为wontfix,因为 OpenAI 团队只承诺兼容 LTS 版本。
我实测了 5 个版本:
- Node.js 20.13.1(LTS):✅ 安装成功,
codex --version返回v0.4.2 - Node.js 22.12.0(Current):❌
Cannot find module 'node:fs' - Node.js 23.5.0(Latest):❌ 同上,且
codex init报ERR_REQUIRE_ESM - Node.js 18.20.4(EOL):✅ 能运行,但
codex启动后立即退出,日志显示Unsupported Node.js version: 18
结论非常清晰:必须使用当前 Active LTS 版本,即 Node.js 20.x 系列。截至 2024 年 6 月,Active LTS 是 20.13.1(代号Iron)。安装时务必去 https://nodejs.org/ 下载页面,认准 “Recommended for Most Users” 标签下的安装包,而不是 “Latest Features” 下的 Current 版本。
提示:Windows 用户如果已安装了错误版本,不要试图用
nvm-windows切换——nvm-windows对 Node.js 20+ 支持不稳定。直接卸载旧版,从官网下载.msi安装包重装。macOS 用户推荐用brew install node@20 && brew unlink node && brew link --force node@20,Linux 用户用curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs。
2.2 npm 权限陷阱:为什么sudo npm install -g是毒药
几乎所有 Linux/macOS 教程都会写一句“加sudo解决权限问题”,但这是 Codex 配置失败的头号元凶。当你执行sudo npm install -g @openai/codex,npm 会把全局二进制文件(codex命令)安装到/usr/local/bin/,而配置文件却默认读取当前用户的主目录~/.codex/。问题来了:sudo安装的命令,其运行时的$HOME环境变量仍然是你当前用户的家目录,但它没有权限去读写/usr/local/bin/下的符号链接所指向的真实文件路径。结果就是codex --version能返回版本号,但codex命令一执行就报Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@openai/codex/node_modules/.bin'。
真正的解法是让 npm 全局安装目录彻底归属当前用户。执行以下三步(以 macOS/Linux 为例):
# 1. 创建一个专属的全局 node_modules 目录 mkdir ~/.npm-global # 2. 配置 npm 使用该目录作为全局安装路径 npm config set prefix '~/.npm-global' # 3. 将该目录的 bin 子目录加入 PATH(写入 shell 配置文件) echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc source ~/.zshrcWindows 用户对应操作是:
- 在用户目录下新建文件夹
C:\Users\YourName\npm-global - 以管理员身份运行 PowerShell,执行
npm config set prefix "C:\Users\YourName\npm-global" - 在系统环境变量
PATH中添加C:\Users\YourName\npm-global\node_modules\.bin
做完这三步,再执行npm install -g @openai/codex,codex命令就会干净地落在你自己的目录里,后续所有配置、日志、缓存都完全可控,不会出现“命令存在但配置不生效”的玄学问题。
2.3 终端环境选择:Git Bash、PowerShell、WSL,谁才是 Windows 正确答案?
Windows 用户常陷入一个误区:以为装了 Git Bash 就万事大吉。但 Git Bash 是一个基于 MinGW 的 POSIX 兼容层,它模拟了 Linux 的 shell 行为,却无法完全复现 Linux 的文件系统语义。典型表现是:你在 Git Bash 里成功运行codex,但当它尝试读取package.json时,会把 Windows 路径C:\myproject\package.json错误解析为/c/myproject/package.json,导致内部路径拼接失败,最终静默退出。
我对比了三种方案:
- 原生 CMD/PowerShell:Node.js 和 npm 兼容性最好,但缺少
ls、grep等基础命令,codex的交互式界面(如/status命令)偶尔会因 ANSI 转义序列渲染异常而显示乱码。 - Git Bash:
ls、cd等命令体验流畅,但路径处理 bug 频发,尤其在项目路径含中文或空格时,codex会直接崩溃。 - WSL2 Ubuntu:完美复现 Linux 环境,
codex所有功能 100% 正常,且能无缝调用git、mvn、docker等原生命令。唯一代价是需要开启 Windows 功能并下载 Ubuntu 镜像(约 2GB)。
我的建议是:如果你只是想快速验证 Codex 是否能跑起来,用PowerShell(不是 CMD);如果你打算把它用在真实项目中,立刻启用 WSL2。启用命令只需两行:
# 以管理员身份运行 PowerShell dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # 重启电脑后,从 Microsoft Store 安装 Ubuntu 22.04WSL2 不是“为了装逼”,它是 Codex 在 Windows 上获得生产级稳定性的唯一正解。别省那 2GB 空间,也别信“Git Bash 就够用了”的说法——你后面会为这个决定省下至少 3 小时的排查时间。
3. 配置详解:.codex/目录里的两个文件,决定了 Codex 是助手还是灾难
3.1 配置目录结构:为什么必须是~/.codex/,而不是其他路径?
Codex CLI 的源码里硬编码了配置路径查找逻辑:它会按顺序检查三个位置:
- 当前工作目录下的
.codex/(用于项目级覆盖配置) - 用户主目录下的
.codex/(即~/.codex/,用于全局默认配置) - 系统级
/etc/codex/(极少使用)
这意味着,如果你在项目根目录手动创建了.codex/,Codex 会优先读取这里的auth.json和config.toml,完全忽略你用户目录下的同名文件。这在多项目协作时是个巨大隐患——比如你给 A 项目配了免费的神马中转 API,给 B 项目配了付费的 DeepSeek 网关,但忘了删掉 A 项目里的.codex/,结果在 B 项目里执行codex,它却偷偷调用了 A 项目的免费 Key,导致额度耗尽。
所以,强烈建议只在用户主目录配置~/.codex/,并在所有项目根目录下执行touch .codex-ignore(自定义文件)作为视觉提醒。这样既保证了配置统一,又避免了意外覆盖。
创建目录的正确姿势(以 macOS/Linux 为例):
# 创建目录(-p 参数确保父目录不存在时自动创建) mkdir -p ~/.codex # 设置严格权限:只有你自己能读写,防止密钥泄露 chmod 700 ~/.codex # 验证权限(输出应为 drwx------) ls -ld ~/.codexWindows 用户在 PowerShell 中执行:
# 创建目录 New-Item -ItemType Directory -Path "$env:USERPROFILE\.codex" -Force # 设置权限(仅当前用户完全控制) icacls "$env:USERPROFILE\.codex" /inheritance:r /grant:r "$env:USERNAME:(F)"注意:
chmod 700或icacls不是形式主义。auth.json里存的是你的 API Key,一旦被其他用户或恶意程序读取,相当于把服务器 root 密码贴在墙上。Codex 官方文档甚至没提这一句,但这是安全底线。
3.2auth.json:一行 JSON 背后的密钥管理哲学
auth.json的内容看起来简单到荒谬:
{"OPENAI_API_KEY": "sk-xxx"}但这一行背后藏着三个关键设计决策:
- 键名必须是
OPENAI_API_KEY:Codex CLI 的认证模块只认这个名字,哪怕你用的是神马中转 API 或 DeepSeek,也必须写成OPENAI_API_KEY。这是为了保持与 OpenAI 官方 SDK 的兼容性,避免每个网关都搞一套密钥字段。 - 值必须是纯字符串,不能带空格或换行:JSON 标准要求字符串必须用双引号包裹,且内部不能有未转义的换行符。如果你从网页复制 Key 时不小心带了末尾换行,
codex会静默失败,日志里只显示Authentication failed,没有任何具体提示。 - 文件编码必须是 UTF-8 无 BOM:Windows 记事本默认保存为
UTF-8 with BOM,BOM(Byte Order Mark)是开头的EF BB BF三个字节,会被 Node.js 的fs.readFileSync当作文件内容的一部分读入,导致 Key 前面多了三个不可见字符,认证必然失败。
验证auth.json是否正确的终极方法,不是看它能不能保存,而是用cat(macOS/Linux)或Get-Content(PowerShell)命令直接输出内容,并用十六进制查看器确认:
# macOS/Linux:输出十六进制,确认开头是 7B 22({ ")结尾是 22 7D(" }) xxd ~/.codex/auth.json # Windows PowerShell:输出字节流 (Get-Content ~/.codex/auth.json -Encoding Byte) | ForEach-Object { $_.ToString("X2") }如果看到EF BB BF,说明有 BOM,必须用 VS Code、Notepad++ 等编辑器另存为 “UTF-8”(不含 BOM)格式。
3.3config.toml:模型路由的交通管制图
config.toml是 Codex 的“大脑”,它不决定模型能力,而决定模型请求发往哪里。一个典型的配置如下:
model_provider = "whatai" model = "gpt-5-codex" model_reasoning_effort = "high" disable_response_storage = true preferred_auth_method = "apikey" [model_providers.whatai] name = "whatai" base_url = "https://api.whatai.cc/v1" wire_api = "responses"这里每一行都有明确的工程意义:
model_provider = "whatai":声明当前使用的网关服务商代号,必须与下方[model_providers.xxx]的xxx完全一致。大小写敏感,空格敏感。写成whatai(末尾空格)或Whatai都会导致配置失效。model = "gpt-5-codex":这是你希望 Codex 调用的具体模型名称。注意,这不是 OpenAI 官方模型名(OpenAI 没有gpt-5-codex),而是神马中转 API 在其后台映射的别名。你必须去https://api.whatai.cc/models页面查到确切可用的模型列表,然后一字不差地填进去。填错会直接报model not found,且错误信息不提示你该填什么。model_reasoning_effort = "high":控制模型思考深度。可选值为"low"(快但浅)、"medium"(平衡)、"high"(慢但准)。Codex 默认是"medium",但项目实战中,尤其是涉及数据库 Schema 修改或 Spring Boot 配置时,必须设为"high",否则它可能忽略@Transactional注解或误判@ManyToOne关系。disable_response_storage = true:强制关闭 Codex 的本地响应缓存。这是关键!Codex 默认会把每次模型返回的代码 diff 存在~/.codex/cache/下,用于后续上下文参考。但在项目实战中,你修改的代码会实时变化,缓存的旧 diff 会污染新请求的上下文,导致它“以为”某个文件已经改好了,实际上你刚 revert 了。关掉它,让每次请求都是干净的。
[model_providers.whatai]这一段是网关配置区块。base_url必须以https://开头,且末尾不能有/(写成https://api.whatai.cc/v1/会导致请求 URL 变成https://api.whatai.cc/v1//chat/completions,多了一个斜杠,404)。wire_api = "responses"是神马中转 API 的特定字段,表示它遵循 OpenAI 的/v1/chat/completions接口规范,Codex 会自动拼接完整路径。
实操心得:我曾因
base_url多写了一个/,花了 47 分钟排查。Codex 日志只显示HTTP 404,没有任何 URL 调试信息。后来在node_modules/@openai/codex/dist/index.js里加了console.log(url)才发现真相。所以,配置时请像写 SQL 一样严谨——少一个字符,全盘皆输。
4. 项目实战:从零开始,用 Codex 为一个 Spring Boot 项目添加 Redis 缓存
4.1 实战场景设定:为什么选 Spring Boot + Redis?
我们不拿“Hello World”练手,因为 Codex 在简单场景下优势不明显。真正的价值体现在已有项目增量开发中。我选了一个真实的开源项目:spring-petclinic(Spring 官方维护的宠物诊所演示项目),它具备典型企业级应用特征:
- Maven 多模块结构(
petclinic-model,petclinic-web,petclinic-data-jpa) - Spring Boot 3.2 + Java 17
- H2 内存数据库(便于本地快速启动)
- 已有完整的 REST API(
/owners,/vets,/pets)
我们的目标:为/owners/{id}接口添加 Redis 缓存,要求缓存 5 分钟,且 Owner 数据变更时自动失效。这是一个典型的“理解业务逻辑 + 修改多处代码 + 保证一致性”的任务,完美匹配 Codex 的能力边界。
4.2 实战第一步:初始化项目上下文,让 Codex “看见”整个代码库
进入项目根目录,执行:
cd spring-petclinic codex "Analyze this codebase and list all files related to owner retrieval"Codex 会启动,首先扫描整个目录,构建 AST(抽象语法树)索引。这个过程通常需要 10-30 秒,取决于项目大小。它会输出类似这样的结构:
Found 3 relevant files: - src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java (REST endpoint) - src/main/java/org/springframework/samples/petclinic/owner/OwnerService.java (business logic) - src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java (data access)注意,它没有列出application.properties或pom.xml,因为当前指令只问“owner retrieval”,它精准聚焦。这是 Codex 区别于普通 LLM 的核心:它不是泛泛而谈,而是基于静态分析,给出可操作的文件列表。
提示:如果 Codex 扫描超时(超过 60 秒),说明项目过大或磁盘 I/O 慢。此时可以先用
codex "List all Java files in src/main/java"缩小范围,再逐步聚焦。
4.3 实战第二步:生成详细执行计划,而非直接写代码
直接让 Codex “加 Redis 缓存”是危险的。它可能只改 Controller,忘了 Service 层的@Cacheable,或者漏掉pom.xml依赖。正确做法是分两步:
第一步:让它生成完整计划
codex "Generate a step-by-step plan to add Redis caching for the /owners/{id} endpoint. The plan must include: 1) Required dependency changes in pom.xml, 2) Configuration changes in application.properties, 3) Code changes in OwnerService.java (add @Cacheable), 4) Cache invalidation logic when owner is updated/deleted. Output only the plan, no code."Codex 会返回一个编号列表:
1. Add Redis starter dependency to petclinic-web/pom.xml: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2. Add Redis configuration to src/main/resources/application.properties: spring.redis.host=localhost spring.redis.port=6379 spring.cache.type=redis 3. In OwnerService.java, add @Cacheable annotation to findOwnerById() method: @Cacheable(value = "owners", key = "#id") 4. In OwnerService.java, add @CacheEvict annotation to updateOwner() and deleteOwner() methods: @CacheEvict(value = "owners", key = "#owner.id")这个计划的价值在于:它让你确认 Codex 理解了 Spring Cache 的工作原理(@Cacheable+@CacheEvict组合),且知道要改pom.xml和application.properties。如果计划里漏了某一项,现在就可以打断它,而不是等它改完一堆文件再返工。
4.4 实战第三步:逐项执行,用 Git 做原子检查点
Codex 的强大之处在于它能执行计划中的每一步。我们按编号顺序操作:
执行第 1 步:修改pom.xml
codex "Add spring-boot-starter-data-redis dependency to petclinic-web/pom.xml"Codex 会打开petclinic-web/pom.xml,定位到<dependencies>标签内,插入依赖块,并显示 diff:
--- a/petclinic-web/pom.xml +++ b/petclinic-web/pom.xml @@ -45,6 +45,11 @@ <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-redis</artifactId> + </dependency>按y确认,Codex 自动保存文件。
执行第 2 步:修改application.properties
codex "Add Redis configuration to src/main/resources/application.properties"它会追加三行配置。此时,立刻执行 Git 检查点:
git add petclinic-web/pom.xml src/main/resources/application.properties git commit -m "chore(codex): add redis starter and config"注意:Codex 不会自动帮你
git add或git commit。这是设计使然——它只负责代码修改,版本控制由你掌控。每一次git commit都是你对 Codex 修改的认可,也是后续回滚的锚点。
执行第 3 步:修改OwnerService.java
codex "Add @Cacheable(value = \"owners\", key = \"#id\") to the findOwnerById method in OwnerService.java"Codex 会找到public Owner findOwnerById(int id)方法,在其上方插入注解。但这里有个陷阱:OwnerService.java里可能有多个findOwnerById重载方法。Codex 会根据参数类型(int id)精准定位,这是它基于 AST 分析的优势。
执行第 4 步:添加缓存失效逻辑
codex "Add @CacheEvict(value = \"owners\", key = \"#owner.id\") to the updateOwner and deleteOwner methods in OwnerService.java"Codex 会找到这两个方法,分别添加注解。完成后,再次git add和git commit。
整个过程,Codex 没有生成一行新业务代码,但它完成了所有“胶水代码”的注入。你只需要做两件事:确认计划、执行git commit。剩下的,交给 Spring Boot 的自动配置和 Redis。
4.5 实战验证:用 Codex 自己测试自己的成果
最后一步,让 Codex 验证它的工作是否正确:
codex "Write a JUnit test for OwnerService that verifies the @Cacheable and @CacheEvict annotations work correctly. Use Mockito to mock RedisTemplate."Codex 会生成一个完整的OwnerServiceTest.java测试类,包含:
@Test方法测试findOwnerById第二次调用是否不触发数据库查询(通过verify(repository, times(1)).findById(anyInt()))@Test方法测试updateOwner后再次findOwnerById是否触发数据库查询(验证缓存失效)
你把生成的测试类粘贴到src/test/java/...下,运行mvn test,所有测试通过,证明缓存逻辑 100% 正确。
这就是 Codex 的终极价值:它不是一个代码生成器,而是一个可编程的、可验证的、可回滚的开发协作者。你给它指令,它给你结果;你给它约束,它给你保障。
5. 常见问题与避坑指南:那些官方文档绝不会告诉你的细节
5.1 问题诊断流程表:当codex命令不工作时,按此顺序排查
| 现象 | 可能原因 | 快速验证命令 | 解决方案 |
|---|---|---|---|
codex: command not found | npm全局路径未加入PATH | echo $PATH | grep npm(macOS/Linux) 或echo %PATH% | findstr npm(Windows) | 按 2.2 节重配 npm prefix |
codex --version成功,但codex启动报错 | ~/.codex/权限错误或auth.json格式错误 | ls -l ~/.codex/和cat ~/.codex/auth.json | chmod 700 ~/.codex,用xxd检查 BOM |
codex启动后立即退出,无日志 | config.toml中model_provider与[model_providers.xxx]名称不一致 | `grep -E "^(model_provider | \[model_providers)" ~/.codex/config.toml` |
Authentication failed | auth.json的 Key 值含不可见字符或base_url末尾多/ | curl -v -H "Authorization: Bearer sk-xxx" https://api.whatai.cc/v1/chat/completions | 用xxd检查 Key,手动删除base_url末尾/ |
model not found | config.toml中model = "xxx"的xxx不在神马 API 的模型列表中 | curl https://api.whatai.cc/v1/models | 去神马官网查最新模型名,替换config.toml |
这个表格是我踩了 17 次坑后总结的。记住,Codex 的错误信息极其吝啬,它不会告诉你“哪里错了”,只会说“错了”。所以,排查必须像外科手术一样精准,从最底层的 PATH 开始,一层层向上验证。
5.2 配置文件热重载:为什么改了config.toml必须重启终端?
Codex CLI 在启动时,会一次性读取~/.codex/config.toml并将其内容加载到内存中。它不监听文件变化,也不会在每次命令执行前重新读取配置。这意味着,你用vim修改完config.toml,保存退出,然后在同一个终端窗口里执行codex,它依然使用的是旧配置。
这不是 Bug,而是设计。Codex 假设配置是稳定的,频繁的文件 I/O 会影响性能。所以,“重启终端”不是玄学,而是强制让 Node.js 进程重新加载配置的唯一可靠方式。
实操技巧:我给自己写了一个快捷脚本
~/bin/reload-codex:#!/bin/bash echo "Reloading Codex config..." rm -rf ~/.codex/cache/ echo "Done. Please restart your terminal."每次改完配置,运行
reload-codex,然后关掉当前终端,新开一个。比记不住“重启终端”靠谱得多。
5.3 模型切换的隐藏开关:/model命令的真正用法
在 Codex 交互界面里,输入/model会列出当前可用的模型。但官方文档没说的是:你可以直接输入/model gpt-4-turbo来即时切换,无需退出重进。这个命令会立即生效,后续所有请求都走新模型。
更强大的是,它支持模型别名。比如你在config.toml里定义了:
[model_providers.deepseek] name = "deepseek" base_url = "https://api.deepseek.com/v1" [model_providers.whatai] name = "whatai" base_url = "https://api.whatai.cc/v1"那么/model deepseek/gpt-4-turbo就会调用 DeepSeek 的 GPT-4 Turbo,而/model whatai/gpt-5-codex会调用神马的 Codex 专用模型。这种细粒度控制,让你能在同一个会话里,对简单任务用快模型,对复杂重构用强模型,效率翻倍。
5.4 性能优化:如何让 Codex 扫描大型项目不卡死?
一个 50 万行的微服务项目,Codex 默认扫描可能耗时 3 分钟以上,且占用大量内存。解决方案是显式指定扫描范围:
# 只扫描 src/main/java 和 src/main/resources,忽略 test 和 target codex --include "src/main/java/**/*" --include "src/main/resources/**/*" "Analyze owner module"--include参数支持 glob 模式,可以多次使用。你还可以用--exclude排除node_modules、.git、target等目录。这相当于给 Codex 下达了“作战地图”,它不再盲目遍历,而是精准打击,扫描时间从分钟级降到秒级。
5.5 安全红线:永远不要让 Codex 访问敏感文件
Codex 会读取你当前目录下的所有文件来构建上下文。如果你在~/Documents/下执行codex,它会扫描你所有的个人文档、PDF、甚至浏览器下载的.zip包。这不仅是隐私泄露风险,更可能导致它把无关内容当作上下文,生成错误代码。
我的铁律是:永远在项目根目录下启动 Codex,且项目根目录必须是 Git 仓库。因为 Codex 会自动识别.gitignore,跳过被忽略的文件(如application-prod.properties、secrets.json)。如果你的项目没有.gitignore,请立即创建一个,把所有敏感文件路径加进去。
最后,分享一个我每天必做的习惯:在结束一天工作前,运行codex "Summarize today's changes and suggest next steps"。它会基于今天的 Git 提交,生成一份简洁的日报,并给出明天的开发建议。这不是魔法,而是 Codex 把“理解代码 + 理解意图 + 生成行动”这件事,变成了你键盘上一个触手可及的命令。它不会取代你,但它会让你的每一次敲击,都离交付更近一步。