# 发动机 · 把一个真实报错修到好 · Warp · 一台终端形状的元工具

**作者** Aklman · **章节** 04 / 12 · **首发** 2026.08 · **语言** 中文为主, 中英双语
**原文** https://library.aklman.com/books/warp/04-agent-mode
**全书 markdown** https://library.aklman.com/books/warp/llms.md
**上一章** https://library.aklman.com/books/warp/03-blocks/llms.md
**下一章** https://library.aklman.com/books/warp/05-beyond-code/llms.md

> 本章来自 Aklman · Library, 完整免费阅读。允许 AI 摘读、引用、问答; 转载请保留作者署名与原文链接 (CC BY-NC-ND 4.0, https://library.aklman.com/license)。

---

> Agent Mode 不是更聪明的补全,是一个会读你终端状态、会多步动手的发动机。这章从头到尾跑通一件事:dev server 起不来,从交办开始,看它读报错、提命令、你审、它跑、出错自己改,直到修复验收。附任务合同模板和喂上下文的方法。

上一章的底座只能到「找回命令」为止。这一章开始是 Warp 真正的发动机:一个会读你终端状态、把活拆成多步、跑命令、读输出、出错自己改的 agent。光讲机制没用,所以这章从头到尾跑通一件真事 —— dev server 起不来,报 EADDRINUSE,从交办开始,到修复验收结束。你盯着看:它每一步干什么,你每一步审什么。

### I · 主线:把 EADDRINUSE 修到好

场景:`npm run dev` 起不来,终端里躺着一块报错。传统路径是:复制错误、开浏览器、搜、在三个 Stack Overflow 答案里挑一个、回来试、不行再搜。这次我们把它交办出去,一步一步看。[^1]

- **⌘↩ 开会话,@ 指上报错那块**:
 在终端里按 `⌘↩` 起一个新 agent 会话。第一件事不是打字,是喂上下文:用 `@` 把刚才那块 EADDRINUSE 输出指进 prompt —— 让它就着真实报错答,而不是凭印象答。然后贴上下面 PromptBox 示例 tab 里那段话。

- **审它的计划,不审它的措辞**:
 它先回一份计划:查谁占了 3000 端口、判断进程身份、给你建议、等你确认再动手、最后重跑验证。你审三件事:方向对不对、第一步是不是只读、它有没有打算跳过你直接 kill。都对,才放行。

- **每条命令摆出来,逐条放行**:
 它要跑 `lsof -nP -i :3000` —— 只读,放行。它读完输出,告诉你占端口的是上周那个没关干净的 node 进程,然后提议 `kill 41782` —— 这一步是写操作,它会停下来等你。你确认那是自己的残留进程,放行。这就是「交办」的真实手感:方向盘在你手里,油门在它脚上。

- **出错它自己改,改完你要复验**:
 如果 kill 之后端口仍占着,它会自己读新报错、换 `kill -9` 或换思路再试 —— 自纠错是发动机的标配。[^2]但「它说好了」不算好:最后它重跑 `npm run dev`,你要亲眼看到 `Ready on http://localhost:3000` 才算验收通过。验收标准在交办那句话里就写死了。

**提示词 · EADDRINUSE 交办词:只读先行,动手先问**

```text
@<报错那块输出> dev server 起不来。
1. 只读排查:找出是什么占了端口,它是什么进程;
2. 每条命令先给我看我确认再跑;
3. 杀进程之前必须问我,我说杀才杀;
4. 修好后重跑启动命令,把「起起来了」的证据给我看。
```

**示例**

```text
@上面那块 EADDRINUSE 输出 dev server 起不来。
1. 只读排查:找出是什么占了 3000 端口,它是什么进程;
2. 每条命令先给我看我确认再跑;
3. 杀进程之前必须问我,我说杀才杀;
4. 修好后重跑 npm run dev,把 Ready on localhost:3000 给我看。
```

一次真实交办的样子(删节版 transcript —— 注意每条命令前的确认点,和最后那条验收证据):

_EADDRINUSE 从交办到验收的完整对话(删节)_
```text

```text
$ npm run dev
> my-app@0.1.0 dev
> next dev
Error: listen EADDRINUSE: address already in use :::3000
 at Server.setupListenHandle [as _listen2] (node:net:1940:16)

─── Agent 会话(⌘↩)────────────────────────────
你: @上面的报错输出 dev server 起不来。只读排查,杀进程前问我。

Agent: 计划 —
 1. lsof 查 3000 端口占用(只读)
 2. 判断进程身份
 3. 给你建议,等你确认再动手
 4. 重跑 npm run dev 验收

Agent: 执行 → lsof -nP -i :3000 [你: 放行 ✓]
 COMMAND PID USER FD TYPE NAME
 node 41782 you 23u IPv6 TCP *:3000 (LISTEN)

Agent: 执行 → ps -p 41782 -o pid,etime,command [你: 放行 ✓]
 PID ELAPSED COMMAND
 41782 6-04:12 node /Users/you/proj/node_modules/.bin/next dev

Agent: 结论 — 是 6 天前启动的 next dev 残留进程,占着 3000。
 建议 kill 41782。这是写操作,等你确认。

你: 杀。

Agent: 执行 → kill 41782 [你: 已确认 ✓]
Agent: 执行 → npm run dev [你: 放行 ✓]
 > next dev
 ✓ Ready on http://localhost:3000

Agent: 验收 — Ready on http://localhost:3000,端口已释放,服务正常。
```

```

#### 浏览器路径的同一晚

复制错误、新开标签页、搜「EADDRINUSE 3000」;第一个答案说 killall node —— 差点把你另一个项目的 dev server 也带走;第二个答案给的 lsof 参数在你的系统上报错;四十分钟后服务是起来了,你没搞懂刚才哪一步真正起了作用,下周再犯还是从头搜。

#### 刚才这四分钟

它读的是你那块真实报错,查的是你这台机器的端口,杀的是你能确认的进程,验收证据摆在你面前。全程你没有离开终端,并且每一步你都说了「可以」才发生 —— 这就是发动机和补全的区别:补全猜你这一行的下半句,agent 接你整件事的意图。

> 可截图判断:**Warp Agent 省的是把意图翻成命令和排障步骤的成本;它增加的是你审查命令的责任。**

---

### II · 喂上下文,决定它准不准

主线里它一次到位,不是它神,是那块 @ 进去的报错喂得准。它不会自动读你整个会话 —— 你喂多少准上下文,它就回多准。三层上下文要会喂:

一是**当场指**:`@` 把文件、某块输出、某段选区贴进 prompt,让它就着具体的东西答。二是**代码库索引**:Warp 索引你 Git 跟踪的代码帮它理解项目,不在 Warp 服务器存你的代码,尊重 `.gitignore` / `.warpindexingignore` 等忽略文件;注意它消耗 credits,且 SSH / WSL 会话暂不支持。[^4]三是**Rules**:项目里放全大写的 `AGENTS.md`(`/init` 生成),写清栈、规范、禁区;子目录的 `AGENTS.md` 自动生效且优先于根目录;已有的 `CLAUDE.md` / `.cursorrules` 可以直接链接,不用重写。命中的规则会在对话里标来源,你看得见它遵守了哪条。[^3]

> 卡壳时先看你喂了什么,再换措辞。一条好 prompt 的骨架:`@` 指上相关文件或输出 + 一个明确目标 + 一句验收标准 + 「先给命令,我确认再跑」。同一件事,「光打一句话」和「@ 文件 + AGENTS.md」跑两次对比,那个差就是你以后信不信它的依据。

---

### III · 任务合同:交办大活的模板

EADDRINUSE 是小活,一句话够。活一大 —— 要写入、跨目录、有禁区 —— 就把下面这份合同填进去。它把成熟工作流的四个阶段(生成 → 审查 → 执行 → 验收)压成一段 prompt:

**提示词 · Warp Agent 任务合同模板**

```text
目标:<一句话说清要完成什么>
目录:<只允许在这个目录工作>
上下文:@<文件/Block/日志/截图>
写入边界:<只读 / 可改哪些文件 / 禁止改哪些文件>
禁止命令:rm -rf、sudo、curl | sh、生产数据库写入、deploy、secret 输出
执行方式:先给计划和命令;需要写入、删除、网络、sudo、生产操作时等我确认
验收标准:<测试命令 / 统计结果 / diff 要求 / dry-run 输出>
```

**示例**

```text
目标:把过期 30 天以上的临时上传文件清理掉,释放磁盘
目录:只允许在 ./storage/tmp 里工作
上下文:@scripts/cleanup.sh @df -h 的输出
写入边界:只能删 ./storage/tmp 下的文件,禁止改其他目录、禁止改任何源码
禁止命令:rm -rf、sudo、curl | sh、生产数据库写入、deploy、secret 输出
执行方式:先给计划和命令;需要写入、删除、网络、sudo、生产操作时等我确认
验收标准:先用 find 列出待删清单和总大小,我确认后再删;删完给出释放的空间和 df -h 对比
```

| 阶段 | 你要它做 | 你审什么 |
| :-- | :-- | :-- |
| 生成 | 先解释计划与命令,不执行 | 目标是否对、目录是否对、会不会写入 |
| 审查 | 列出风险命令和 dry-run 方式 | 是否碰生产、密钥、删除、网络、sudo |
| 执行 | 小范围先跑,通过再全量 | 退出码、输出、diff、样本 |
| 验收 | 按你给的标准证明完成 | 测试、统计、文件 diff、回滚方案 |

---

### IV · 它会在哪儿跑偏

它会自纠错,但也会自信地跑错 —— 意图越模糊、会话越长、动作越不可逆,越容易出事。

| 危险信号 | 为什么危险 | 默认处理 |
| :-- | :-- | :-- |
| `rm -rf`, `find ... -delete` | 批量删除不可逆 | 必须人工确认,先列清单 |
| `sudo`, `chmod -R`, `chown -R` | 扩大权限或改坏系统状态 | 解释影响范围,禁止自动跑 |
| `curl ... | sh`, `wget ... | bash` | 网络代码直接执行 | 下载后审查,或走包管理器 |
| 生产数据库 UPDATE / DELETE / DROP | 影响真实数据 | SELECT 样本、事务、备份、人工批准 |
| deploy / force-push / secret 输出 | 外部后果或泄密 | 每次停下解释 |

三种情形要收住:意图含糊(「优化一下」它会乱猜方向)、长会话漂移(开太久它会忘了最初要什么)、不可逆操作(批量删、改生产、强推)。「能自己再试」也意味着它会在错误方向上多走几步。[^2]对策两层:这一章的 —— 把验收标准写进 prompt、别开漫无目的的长会话;危险动作那层 —— 让它自动跑什么、绝不让它碰什么 —— 在**「管住它」**那章用 profile、allowlist / denylist 配。什么时候不如自己敲?你已经记得的一行、只读低风险的一步、或者你比 agent 更清楚现场状态时,直接敲比开口快。

验收这一章 —— 主线那四分钟,你自己也要能复现:

- 我用 ⌘↩ 开会话、@ 指上一块真实报错,交办成功了一次只读排障。

- 它的每条命令我都先看到再放行,写操作那条我让它停下来等过我。

- 我用自己写的验收标准(不是它说的「好了」)确认了修复。

- 我的项目里有一个 AGENTS.md,写清了栈、规范、禁区。

- 我对比过「光打一句话」和「@ 上下文 + AGENTS.md」两次的结果差。

- 任务合同模板我存下来了,下次大活直接填。

> 你喂的是上下文,
> 它接的是意图

## 引用与参考

01 · Warp Docs · Terminal and Agent modes —— 截至 2026-08-06:Terminal(默认,跑 shell)与 Agent(多轮对话视图)两种模式;auto-detection 新用户默认开,提交前以 magenta 的 (autodetected) 标注分流;⌘↩ 起新 agent 会话,⌘Y 继续上一段,⌥⌘↩ 起云端 agent 会话;⌘I 是语境键(见第三章)。  (Warp Docs · Terminal and Agent modes)
02 · Warp Docs · Warp Agents overview —— 本地 agent 嵌在终端里,能写代码、debug、运行命令、自动化开发任务;用户保持控制权;对话可带代码库、Warp Drive、连接工具与上下文。  (Warp Docs · Agents overview)
03 · Warp Docs · Rules for agents —— 截至 2026-08-06:项目规则文件是全大写 AGENTS.md(WARP.md 仍支持;两个都存在时 WARP.md 优先);子目录 AGENTS.md 自动生效,优先级:子目录 > 根目录 > 全局;/init 生成 AGENTS.md 并可链接 CLAUDE.md、.cursorrules、GEMINI.md 等;命中的规则会作为对话引用显示来源。  (Warp Docs · Rules)
04 · Warp Docs · Codebase Context —— 截至 2026-08-06:索引 Git 跟踪的代码(worktree 算独立仓库),不在 Warp 服务器存代码;尊重 .gitignore / .warpindexingignore / .cursorignore 等忽略文件;所有档每仓库至少索引 5,000 文件;SSH / WSL 会话暂不支持;消耗 credits。  (Warp Docs · Codebase Context)

---

*发动机 · 把一个真实报错修到好 · Warp · 一台终端形状的元工具 · Aklman 著 · CC BY-NC-ND 4.0 · https://library.aklman.com/books/warp/04-agent-mode*
