不敢让 Codex 直接改代码?我先让它只读分析一个 Node.js 项目

上一篇我把 Codex CLI 的版本、帮助、doctor 和功能列表都检查了一遍。环境能用了,这次开始进项目。

但我没有马上把写权限交给 Codex。我准备了一个很小的 Node.js 项目,让它先读目录、README、npm 脚本和源码,再把自己看到的东西说清楚。

这次是真实运行:npm test 通过 2 项,Codex CLI 0.147.0 返回了完整分析,最终退出码是 0。运行前后 5 个示例文件的 SHA-256 哈希一致。

示例项目:5 个文件,0 个第三方依赖

项目叫 tiny-books-api,目录如下:
源码地址:https://gitee.com/heihei_66/codex-example-project

example-project/
├── README.md
├── package.json
├── src/
│   ├── books.js
│   └── server.js
└── test/
    └── server.test.js

它只有两个 GET 接口:

  • /health 返回服务状态。
  • /api/books 返回内存中的两本书。

在这里插入图片描述

图 1:根据真实目录整理,示例项目一共 5 个文件,不包含 Key 和第三方依赖。

先跑测试,别把项目自己的错误算给 Codex

进入示例项目后先执行:

npm test

在这里插入图片描述

图 2:本次运行 2 项通过、0 项失败,总耗时约 241 毫秒。

测试覆盖 /health/api/books。这一步先确认项目本身能跑,再看 Codex 能不能读懂。

用 read-only 执行 Codex 分析

本机 codex exec --help 已确认当前版本支持:

  • --sandbox read-only:限制项目写入。
  • --skip-git-repo-check:允许在独立示例目录中运行。
  • --ephemeral:不保留本次会话文件。

我最开始让 Codex 自己运行 rg --files,但当前 Windows 沙箱启动子 PowerShell 时返回 1312。后来我把 5 个无密钥文件通过标准输入交给 Codex,并明确要求它不要调用工具。

先准备文件内容:

$root = (Get-Location).Path
$files = Get-ChildItem -Recurse -File | Sort-Object FullName
$bundle = ($files | ForEach-Object {
  $relative = [System.IO.Path]::GetRelativePath($root, $_.FullName)
  "`n=== FILE: $relative ===`n"
  Get-Content -Raw -LiteralPath $_.FullName
}) -join "`n"

再执行只读分析:

$prompt = @'
下面的标准输入包含当前 Node.js 项目的全部文件。
不要调用任何工具,不要创建、修改或删除文件,只根据标准输入分析。

请说明文件职责、npm 脚本、第三方依赖、GET /api/books 的调用路径,
并列出 3 个有文件依据的缺口。不要补全文件里没有的信息。
'@

$bundle | codex exec --sandbox read-only --skip-git-repo-check --ephemeral $prompt

在这里插入图片描述

图 3:本次成功使用的命令。输入只包含示例项目的 5 个无密钥文件。

Codex 实际分析出了什么

Codex 正确识别了 5 个文件的职责:

  • package.json:项目元数据、启动和测试脚本。
  • README.md:接口、命令和端口说明。
  • src/books.js:内存图书数据。
  • src/server.js:HTTP 服务和路由。
  • test/server.test.js:两个 GET 接口测试。

它确认启动命令是 npm start,测试命令是 npm test,项目没有第三方依赖。

GET /api/books 的调用路径也说对了:

http.createServer
→ 匹配 GET /api/books
→ 读取 books
→ JSON.stringify
→ response.end

Codex 还列出三个有源码依据的缺口:

  1. request.url 使用精确匹配,/api/books?limit=1 会返回 404。
  2. 非 GET 的 /api/books 仍返回 404,没有区分 405。
  3. 测试只检查状态码和数组长度,没有检查响应内容、Content-Type 和未知路由。

在这里插入图片描述

图 4:真实 Codex 输出节选,模型、Provider、会话 ID、本机路径和服务地址已经隐藏。

怎么确认它没有改文件

我在运行前后分别计算了 5 个文件的 SHA-256 哈希。最终结果是:

CODEX_EXIT=0
FILES_UNCHANGED=True

read-only 参数和实际文件结果是一致的。它返回了分析,但没有修改项目。

使用 llapi.org 时的边界

示例项目本身不需要 Key,但 Codex 调用模型仍需要已经配置好的认证和服务入口。

如果你的 Codex 使用 llapi.org,可以到 llapi.org 创建账号并申请自己的 API Key。Base URL、模型名称、价格和服务规则以官网当前页面为准。

文章、截图和仓库里都不要放真实 Key、Authorization 头或后台页面。只使用类似 <YOUR_LLAPI_API_KEY> 的占位符。

这次只读分析完成以后,我才愿意进入下一步:让 Codex 修改一个小问题,再用 git diff 检查它到底动了什么。

你第一次让 Codex 读项目时,更担心它看错目录、依赖,还是权限?

更多推荐