# 让 Codex 在你睡觉时自己写代码

> Codex 真能替你熬夜写代码，前提是你不能把它当资深工程师，要当一个不知疲倦、边界感需要你提前写清楚的执行者。文章讲怎么写夜班工单、哪些任务适合夜里跑、哪些不能，以及第二天怎么验收。

- 原文链接: https://laojin.blog/blog/20260518_codex_overnight_coding
- 作者: 老金
- 发布日期: 2026-05-18
- 标签: Codex, AI 自动化, 夜班工单, 工程实践

---

![让 Codex 在你睡觉时自己写代码](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20260518/00_cover.png)

我最开始用 Codex 做自动化时，有一个很朴素的幻想：

睡前丢给它一个需求，第二天早上醒来，代码写好了，测试跑完了，PR 也准备好了。

听起来很爽。

但真正跑了半年后，我的结论反而更克制：**Codex 确实可以在你睡觉时帮你写代码，但前提是你不能把它当成一个通宵加班的资深工程师，而要把它当成一个不知疲倦、但边界感需要你提前写清楚的执行者。**

这篇文章不讲概念，不念文档。只讲一件事：怎样让 Codex 在你睡觉时真的产出代码，而不是第二天早上给你留下一堆半成品、冲突和权限弹窗。

## 睡前任务，最怕一句"帮我优化一下"

很多人第一次尝试夜间自动化，都会这样写：

```text
帮我优化一下这个项目。
```

或者：

```text
帮我 Review 一下代码，看看怎么优化。
```

这类任务白天都不靠谱，晚上更不靠谱。

因为你睡着以后，它遇到任何一个模糊点，都只能自己猜：哪些文件能改？能不能装依赖？测试失败要不要继续？发现旧代码有问题要不要顺手重构？UI 风格按谁的标准算好？

第二天醒来，你看到的往往不是惊喜，而是一串很长的改动：一半有用，一半说不清为什么动。

真正适合睡前交给 Codex 的任务，必须满足三个条件：

1. 输入清楚；
2. 写入范围清楚；
3. 验收命令清楚。

换句话说，睡前不要许愿，要派工。

![睡前不要许愿，要派工](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20260518/01_wish_vs_workorder.png)

## 一个真实例子：让它夜里补 ShipReady 的安全检查

拿我手边的 `ShipReady` 项目举例。

这是一个 SaaS 落地页审计 MVP：用户输入 URL 或手动粘贴页面文案，系统生成 12 项审计报告；用户再回答 3 个定位问题，解锁更具体的 Hero 和 CTA rewrite pack；付费后可以生成一个公开报告链接。

这个项目不大，但刚好有几个适合交给 Codex 夜里做的任务：

- `/api/share` 必须确认用户已经 unlock，不能让未付费用户生成公开报告；
- 公开报告会输出用户页面里的 title、hero、evidence、recommendation，必须持续保证 HTML escape；
- URL 抓取失败时，前端必须打开手动粘贴兜底；
- 默认 memory storage 在 serverless cold start 后可能丢数据，README 里必须讲清楚 KV/Upstash 的生产配置；
- 当前 `npm run check` 只做 Node 语法检查，还没有真正的业务测试。

这些任务都不是"让项目更好"这种空话，而是有明确风险点、有明确文件范围、有明确验收标准。

睡前我不会这样写：

```text
优化一下 ShipReady 的后端代码。
```

我会这样写：

```text
审计 ShipReady 后端，确保公开报告的安全。

审计范围：
审查以下文件： src/app.js、src/audit.js、src/store.js、public/app.js、README.md。

修改限制： 如果有必要，仅修改测试用例或少量的校验逻辑。
依赖限制： 请不要添加任何运行时依赖。
UI 限制： 请不要更改产品文案或 UI 样式。

核心关注点：
权限控制： 未付费用户绝不能创建公开报告；
安全防御： 公开报告的 HTML 必须对用户可控的字段进行转义（防止 XSS）；
容错机制： URL 抓取失败时，必须保留手动粘贴的兜底逻辑（Fallback）；
存储机制： 必须记录并说明内存存储（Memory）与 KV 存储（KV storage）的行为差异。

验证要求：
运行 npm run check；

总结发现的风险、修改的文件，以及任何仍需人工介入审查的事项。
```

这才是能放到夜里跑的任务。

它不要求 Codex "想清楚整个产品"，只要求它沿着你定义好的边界，把一组风险检查到底。

## 夜间自动化的 3 类好任务

不是所有代码任务都适合睡觉时跑。我目前最放心的，是下面三类。

### 第一类：只读扫描，第二天给你报告

这是成功率最高的。

比如每天晚上让 Codex 扫一遍仓库：

```text
扫一下代码库里的 TODO、有风险的公开 Endpoint、漏掉的测试、Deprecated 的 API，还有 README 里前后矛盾的说明。不用改代码，出个优先级报告就行。
```

这种任务不改代码，不碰权限，不会制造冲突。它的价值是把第二天早上的注意力变得更集中。

在 `ShipReady` 这种项目里，它可以稳定提醒你：

- `package.json` 里的 `npm run check` 只是语法检查；
- `/api/share` 和 `/api/rewrite` 是付费状态相关路径；
- `renderPublicReport` 是公开 HTML 输出点；
- `src/store.js` 里 memory 和 KV 是两套存储路径；
- URL 抓取失败后依赖 manual paste fallback。

你醒来以后，只需要判断哪些问题值得动手。

### 第二类：小范围补测试

这是最实用的一类。

让 Codex 夜里补测试时，范围一定要窄。不要说"给项目补测试"，要说"只给这个模块补这几种行为"。

例如：

```text
为 ShipReady 的审计流程添加针对性的测试。

覆盖范围：
- 未付费的审计无法创建公开报告；
- 已付费的审计可以创建一份公开报告；
- 公开报告在渲染时，必须对标题（title）、主视觉（hero）、证据（evidence）和建议（recommendation）等字段进行转义；
- URL 获取失败时，应返回手写/手动粘贴（manual_paste）的数据源，并附带一条有用的提示信息。

注意事项：
除非测试暴露出真正的 Bug，否则不要重构生产环境代码。
请运行 npm run check 以及新的测试命令。
```

这里的关键不是测试数量，而是测试目标。

Codex 最怕你让它"提高覆盖率"。它会为了覆盖率写一堆价值很低的测试。你要让它盯住会出事故的路径。

### 第三类：文档和工程卫生

这类任务非常适合夜里跑。

比如：

```text
更新 README.md，方便新加入的开发者能够运行、验证和部署 ShipReady。

必须包含以下内容：
- 本地运行命令
- 校验命令
- Vercel 路由模型
- 内存存储限制
- KV / Upstash 环境变量
- 健康检查接口

注意事项：
不要修改任何应用程序代码。
```

文档任务的好处是：就算写得不完美，第二天也很容易 review。它不会破坏线上逻辑，也不会引入复杂合并冲突。

## 3 类任务，不要睡前交给它

夜间自动化真正翻车的地方，通常不是 Codex 太弱，而是你把不该无人值守的任务扔给了它。

![哪些任务适合夜里跑，哪些必须留给白天](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20260518/02_night_task_tiers.png)

### 第一类：产品判断很重的任务

比如：

```text
提升 Onboarding（新手引导）体验。
```

或者：

```text
提高定价页的转化率
```

这类任务不是不能交给 Codex，而是不适合在你睡觉时让它自己改。

因为它涉及产品判断、用户理解、视觉取舍、文案策略。你可以让它给方案、列问题、做竞品归纳，但不要让它在无人值守状态下直接大改。

### 第二类：跨前后端的大重构

比如：

```text
把 App 的架构重构一下。
```

这种任务非常容易牵一发动全身。

一个看似简单的后端状态字段，可能同时影响 API、前端渲染、存储结构、公开报告、README 和部署说明。你睡觉时让它跨层改，第二天大概率是在读 diff，而不是收成果。

夜间任务要尽量单层、单目标、少文件。

### 第三类：需要真实账号或生产权限的任务

Computer Use 很强，可以打开应用、点按钮、填写表单、读屏幕。

但这不意味着你应该让它在半夜操作真实后台、个人邮箱、客户数据或生产系统。

我的规则很简单：

- localhost 可以测；
- 测试账号可以点；
- 生产后台默认不碰；
- 个人邮箱和聊天工具默认不碰；
- "Always allow" 只给非常窄、非常确定的动作。

代码写错，最多回滚。权限给错，它可能替你做了不该做的操作。

## 睡前任务模板

我现在基本固定用这个模板：

```text
目标：
<一句话说明要完成什么>

上下文：
<项目背景、相关模块、为什么要做>

范围：
- 允许修改的文件或目录：
- 仅限读取（只读）的文件或目录：
- 明确排除在范围之外的事项（不做的事）：

规则：
- 除非明确需要，否则不要添加任何依赖。
- 不要更改无关的 UI 或文案。
- 不要重写系统架构。
- 除非列出的 Bug 要求修改，否则请保留现有的所有行为。

验证：
- 运行 <命令>。
- 如果无法运行验证，请解释原因。

最终响应输出：
- 列出已修改的文件。
- 列出已运行的命令。
- 列出残留的风险或需要人工审查的决策。
```

这个模板看起来啰嗦，但它省的是第二天早上的时间。

你不是在写 Prompt，你是在写夜班工单。

## AGENTS.md：给夜班 Codex 的员工手册

如果你真的想让 Codex 在你睡觉时自己写代码，仓库里最好有一份 `AGENTS.md`。

它不是装饰品，而是员工手册。

以 `ShipReady` 为例，我会这样写：

```md
# AGENTS.md

- 这是一个基于 Node 18 的 SaaS 落地页审计 MVP（最小可行性产品），没有任何外部运行时依赖。
- 修改 JS 文件后，请运行 npm run check。
- 除非明确要求，否则请勿添加任何生产环境依赖。
- 优先围绕以下方面排查并梳理审查发现的问题：公开 HTML 转义、URL 抓取失败的兜底机制、KV 存储与内存存储的行为差异、付费/分享状态的流转，以及缺失的测试用例。
- 除非明确要求，否则请勿将确定性的审计引擎（Deterministic audit engine）替换为 LLM（大语言模型）调用。
- 除非任务明确要求修改产品文案或进行前端开发，否则请保持 UI 文案和样式一律不变。
```

Memory 可以记住偏好，但团队硬规则应该写在仓库里。

否则你以为 Codex 在遵守规范，实际上它可能只是在复现你某次赶进度时留下的坏习惯。

## 子代理并行：适合夜里探索，不适合夜里乱改

很多人听到子代理并行，会自然想到：

一个改前端，一个改后端，一个写测试，半夜一起干活。

听起来效率很高，实际很容易翻车。

真实业务工程里，前端、后端、类型、配置、测试经常共享文件。两个代理同时写同一个文件，后完成的覆盖先完成的，第二天你会先处理冲突，再理解逻辑。

我更推荐夜间这样用子代理：

- 一个只读梳理 API 路由；
- 一个只读检查前端状态流；
- 一个只读找安全风险和缺测试点。

让它们并行探索，最后汇总报告。

真正写代码的部分，尽量串行。

## 第二天早上怎么验收

不要一醒来就看最终总结。

![验收顺序：先事实，后总结](https://pic-1258874139.cos.ap-hongkong.myqcloud.com/laojinblog/posts/20260518/03_morning_review.png)

我的顺序是：

1. 先看 `git diff --stat`，确认改动范围有没有失控；
2. 再看测试命令和失败信息；
3. 再读关键文件 diff；
4. 最后才看 Codex 的总结。

总结是线索，不是事实。

如果它说"已完成"，但没有跑验证命令，这个任务就不能算完成。如果它改了 scope 之外的文件，也要先退回去问为什么。

自动化不是把 review 省掉，而是把 review 从"从零开始找问题"变成"检查一个已经收敛的补丁"。

## 最后

让 Codex 在你睡觉时自己写代码，这件事不是玄学，也不是神话。

它真正依赖的是工程管理里最朴素的东西：清晰的任务、清晰的边界、清晰的验收。

你给它一句愿望，它大概率还你一堆猜测。

你给它一张夜班工单，它才可能在你睡醒前，把一件具体的事做完。

Codex 能替你熬夜，但不能替你想清楚什么事值得熬夜。
