和 Coding Agent 协作:把问题说清楚,把事情做完整
用 Coding Agent 做个人网站、讨论科研项目时,我留下了不少零散记录。有的是一句提示词,有的是一次报错,还有一些是在问:为什么这一步又要我手动操作?项目到底做到什么程度,才可以先停下来?
这些问题逐渐连在了一起。一次协作从表达需求开始,接着要了解实际环境、作出选择、执行和验证,最后还得有一个可以交付的结果。任何一个环节没说清楚,后面都可能变成反复追问、补充上下文,或者临时补上本来没有意识到的步骤。
把真正想解决的问题说出来
我有过一次很典型的表达偏差。之前设计过一套长期科研工作管理流程,打算让 Codex 设计、Claude Code 管理使用,后来却没有用起来。等服务器上也装上了 Codex,我心里想问的是:现在还需不需要原来的流程?能不能保留其中有用的部分?又该怎样把现状介绍给服务器上的 Codex,让它结合实际情况判断?
实际发出去的却是:“现在干到哪了,好久没开这个会话了”“当前实现了什么功能,都给我说说。”
这些问题只能问出进度,没有说明我想重新评估原方案。我的目的、背景变化和希望得到的结果,都没有真正说出来。所以后来我给自己记了一句:有话给 Codex 直说。还没想清楚的地方也可以直接描述,不必先把它改写成一个看起来很规范、实际却偏离原意的问题。
接续上下文也可以少一些手工搬运。如果要换会话继续做,可以直接让 Codex 总结当前进展,带着关键决定和未解决问题作为新会话背景。原来的记录还提出,能否由它完成总结和创建新会话的衔接,而不需要我反复追问、复制、粘贴;具体能做到哪一步,要看当时工具提供的能力。
需要我决定时,把选择说清楚
复杂项目里确实有一些取舍需要我来决定。例如优先快速交付还是长期可维护,沿用现有数据结构还是重构,先做最小可用版本还是先完成完整设计。Agent 可以梳理方案和影响,我来确认真正重要的目标与约束。
但我在《claudecode使用》里记录的问题更具体:它一次抛出很多信息密集的选项和追问,随后在等待反馈时结束了当前流程,把“待确认”当成了“已完成”。我还没有作出选择,项目却已经停在那里了。
当时留下的办法,是把开放式追问收成少量清楚的选项,每个选项附上简短的影响说明。如果交互界面支持,可以做成可点击的弹窗或按钮;我选定后,它接着生成下一步执行计划,不要再对同一个选择重复追问。
这里要保留的要求有两层:选项要让我看得懂、选得动;等待我的选择时,任务仍然是待确认。按钮本身并不能保证会话持续运行,真正需要延续的是前面的目标、已有决定和下一步该做什么。
先了解真实环境,再决定怎么做
在 Scan-to-BIM 这类项目里,做方案设计的一方可能看不到服务器、数据集和既有工程环境。如果只按“通用科研项目”的印象安排目录、数据治理、训练和实验记录,实施时才发现与实际情况不符,返工就会很被动。
我记录过一种补齐信息的办法:设计者先列出影响方案的关键问题,让有访问权限的 Agent 到目标环境中收集事实,把结构化结果带回来,再据此设计。需要了解的包括:代码和目录怎样组织;点云、图像、模型放在哪里;训练、评估和实验记录怎么做;标注、版本管理和论文资料是否已有流程。
这可以看作上下文工程的一种做法。我希望补给 Agent 的不只是更多文字,还包括它作判断所缺少的现场事实。
日常排障也有同样的问题。一次网卡排查中,Agent 没先扫描确认设备能力,就让我把 Intel AX200 的首选频带改为 2.4 GHz,再手动尝试连接。我当时指出网卡支持双频,也追问过新买的外置网卡支持 5 GHz,是否可以使用。值得留下的是这个判断缺口:硬件支持什么、当前连接状态怎样,还没查清楚,就已经让我执行一套操作。
运行环境也会影响 Agent 的表现。我在 Windows 下记录过 PowerShell 转义和命令兼容问题,因此给当时的开发流程记下了优先用 Git Bash 的办法。我也写过“Mac 电脑使用 Agent 更友好”这样的判断,但不能由此推出某种系统对所有 Agent 都更好。依赖版本、命令行工具、权限、路径、编码,以及测试服务能否正常启动和关闭,都需要放回当前机器检查。
找不到工具或原方案跑不通时,我问过能否改在 Docker 里运行,找 Windows 兼容的开源工具,使用国内镜像;如果问题足够简单,是否可以自己写一个小工具。这些都是当时寻找替代路径的想法。
讲解和审查,也要有合适的深度
用 ChatGPT 学基础知识时,我发现不一定需要把推理强度开到很高。我曾记下 extra high、6-pro 这类选择带来的问题:只是想理解简单概念,却收到很长、过程很多、很专业的工程化回答,反而更看不懂。
这时我真正需要的是教学、概念拆解和深入浅出的解释。等问题涉及多处代码关系、复杂并发、事务状态或源码审查,再考虑更深入的分析。我还问过:“根据我的水平,需要哪种注释?”这个问题仍需要结合具体代码讨论。说明和注释应该帮助我理解当前问题,不能只增加术语和篇幅。
我提出过让子 Agent 审核讲解,发现错误就重写;也提出过审核修复实施计划,并在审查提示词中明确加上“知识过时风险审查+联网验证机制”。Next.js、Prisma、Docker、Nginx、安全规范和云平台策略这类内容变化较快,审查不能只重复模型记忆中的旧结论,需要结合当前版本和依据判断。
审查对象也要说具体。有一次,我要求检查新增 MCP 的功能代码,以及其他对项目的修改,同时看看当阶段的功能需求是否已经实现完整。这个问题把代码审查和交付判断连起来了:除了某一段代码是否有错,还要看这些改动是否把原先要做的事做完。
哪些地方需要我参与,哪些不该再交回给我
我反复问过:“为什么不给你自动操作,还留手动?”测试、检查输出、整理文件、提交结果,如果目标明确、权限允许、风险可控,Agent 应该继续把能够完成的部分做完。我希望的过程是理解任务、修改或生成、验证结果,再整理交付。
网卡那次排查里,除了没有先查设备信息,它还反复让我手动尝试连接,把结果告诉它。我问过:“你不能自动化尝试?”我还怀疑过,这是否与自己在系统提示词里写的“不清楚、不明确、不清晰的问我”有关。这个因果关系当时没有验证,只能保留为疑问;但它提醒我,需要分清真正缺少我的判断,和本来可以由工具完成的执行步骤。
也有需要我补充反馈的场景。一次 VirtualBox 安装弹出“Installation failed”“无效的命令行参数”,并提示查阅 Windows Installer SDK。当时使用的模型被我记作 v4flash,程序弹出界面后,我把看到的结果反馈给它,帮助继续排查。那次我是这样参与的。至于工具能否自行看见和操作那个窗口,也需要实际确认,不能看到有人工参与就认定它多余。
所以,“不清楚就问我”和“不要留手动尾巴”需要一起理解。真正涉及目标、取舍或需要我介入的地方,要把原因讲清楚;已经能够继续执行的步骤,也不应仅仅因为习惯追问,就又交回给我。
交付前,把首次启动和验证一起考虑进去
个人网站的一次部署故障,让“手动尾巴”的问题变得很具体。按照当时保存的对话,计划写了“首次部署需手动标记 migration”,但 Dockerfile 的 CMD 没有处理这一步,也没有在交付前明确询问我是否要把它自动化。部署后,网站出现了 502。
后续回复称,补上了与 migrate resolve --applied 有关的处理,解决了当时的问题,并回头承认自动 baseline 逻辑本该在那次任务交付时就考虑进去。这是历史对话里的故障解释和修复说法,需要结合当时的数据库、迁移记录和部署配置理解,不能把一条命令当成其他 502 问题的通用答案。
这个案例真正需要保留的是前后关系:影响首次启动的前置步骤,被埋在计划中的一句话里;实现和交接没有接住它;等部署失败后,才补上处理。一个方案写到了某个步骤,不等于交付已经覆盖了这个步骤。
我当时留下的要求是:“交付要完整闭环。如果某一步需要手动操作,要么自动化它,要么在交付前明确问我确认。不要留隐含的手动步骤。”对需要生产环境介入的部分,这种判断应在交付前完成,不能等上线失败后才出现。
验证也要推进到结果。命令运行结束之后,要确认服务是否正常、关键功能能否使用。如果任务还在运行,我还提过“低 token 态监控”:继续关注结果,同时减少等待期间的无效消耗。
安全检查也属于交付里的具体工作。我曾要求检查网站项目的 Git 历史,因为当前代码里删除的配置、测试密钥、访问令牌或内部地址,可能还留在旧提交中。Agent 可以辅助搜索特征、检查历史配置,并区分示例值、失效凭据和真实敏感信息,提出清理或历史重写建议。涉及真实凭据时,还需要撤销或轮换,不能把删除文本当成全部处理。
产品够用,交付稳定,就可以先停下来
我后来问过两个相近的问题:什么时候已经达到用户可用的最小形态?什么时候可以暂时停止与 Agent 持续讨论和迭代?
前一个问题关心产品是否达到最小可用产品(MVP)的状态:核心用户需求是否得到满足,用户是否能完成真正要做的任务。只要已经够用,就不必为了更多功能、更漂亮的界面或更复杂的设计无限扩展。
后一个问题关心后续交付。我当时希望正常修改代码后,能通过 CI/CD 自动构建、部署、更新云端服务器,并验证部署结果;服务稳定运行,出问题时能定位和回退,不再每次都依赖 Agent 手工处理服务器。
这两条停止线需要分别检查。做出了用户能用的功能,还要确认后续怎么交付;部署流程能够自动运行,也还得确认用户的核心问题是否解决。对这个阶段,我希望达到的是“用户能用、系统能稳定跑、代码能持续发布”。
Less is more,对我也包括知道什么时候可以先不继续加东西。把当前这一版做得够用,把交付中没有说清楚的步骤补齐,就有了一个可以停下来使用和观察的阶段性结果。