本篇讲四个超出"聊天改代码"基本盘的能力:关掉终端它还在后台干活、放手让它自己干、几种工作模式、语音和看屏幕控制电脑。
10.1 关掉终端它还在干活:后台常驻是怎么做到的
正常情况下,你关掉终端窗口,里面跑的程序就跟着结束了。但有些任务(跑一晚上的测试、定时执行的检查、等待某个事件发生)需要程序脱离终端持续运行。这就是后台常驻机制。
守护进程(daemon)
项目里有个叫"守护进程"的东西------名字来源于神话里的精灵,指在后台默默运行、不依附于某个窗口的程序。你可以让助手启动一个守护进程,它独立常驻:
- 你关掉终端、退出登录,它照样在后台跑;
- 它管理着若干个"工人"(worker),每个工人干一件具体的后台任务;
- 主程序需要时和它通信,派发任务、查询状态。
工人(worker)是干什么的
工人负责的典型任务:
- 定时任务:类似闹钟,"每天早上跑一次测试""每隔一小时检查一次依赖更新";
- 监控任务:盯着某个事件,"等这个 PR 有结果了通知我""这个命令跑完了叫我";
- 远程触发的任务:手机远程发来的指令(第 7 篇讲的远程控制),由后台工人执行;
- 长耗时任务:大批量重构、全量测试这种跑很久的活。
每个工人有状态:空闲、运行中、失败、已停止,还有"上次什么时候跑的、下次什么时候跑"。失败了有重试策略。
主程序和守护进程怎么通信
主程序(你面前的对话界面)和后台守护进程是两个独立的进程,它们靠本地通信通道对话:
- 在 Mac/Linux 上用"本地套接字"(可以理解成只有本机能连的内部电话线);
- 消息一行行地收发(JSON Lines,和会话档案同样的格式);
- 定期心跳确认对方还活着。
你在对话里问"后台任务怎么样了",主程序就通过这条内部电话线问守护进程,再把状态显示给你。界面上有专门的管道/任务状态视图。
为什么要单独搞个进程,而不是在主程序里后台跑?
因为主程序的生命周期和你的终端绑定------关窗口就没了。守护进程独立存活,才能做到"人走了活还在"。而且把后台任务隔离到独立进程,它们崩了不影响你面前的对话,对话崩了也不影响后台跑着的任务。
10.2 放手让它自己干:自主模式的边界在哪
默认情况下,助手每做一个危险动作都要问你(第 4 篇的权限关卡)。但有些场景你希望它更自主:比如"帮我把这个功能完整实现了",中途问几十次"要不要读文件""要不要跑测试"会很烦。自主模式就是调整"放手程度"的机制。
自主程度是一条光谱
不是"全问"或"全不问"两个极端,而是一条可调的光谱:
- 完全手动:每个动作都确认(最安全,适合不信任的环境);
- 半自动:低风险、意图明确的动作(读文件、跑测试)自动放行,高风险动作(删文件、推代码)还是问;
- 全自动:让它自己连续干很久,只在关键节点或遇到真正拿不准的事才找你。
为什么不能无脑开全自动
放手越多,风险越大:AI 可能误解任务、走错方向后越走越远、执行不可逆的危险操作。所以自主模式通常搭配几个保险:
- 在沙盒里放开:全自动模式往往配合沙盒(隔离环境,第 4 篇提过)使用------在隔离房间里让它随便折腾,碰不到房间外的重要东西,闯祸了损失可控;
- 边界明确:告诉它任务范围,超出范围的事还是要问;
- 可观测可中断:即使在自主跑,它每一步在干什么你都能看到,随时能叫停(第 3 篇的取消机制);
- 关键决策点暂停:涉及钱、涉及删除、涉及对外发布,无论自主程度多高都会停下来确认。
主动型能力
更前沿的是"主动型"能力:助手不只是被动等你下指令,还能在合适时机主动做事------比如它判断"这个任务我可以明天定时跟进",或者发现一个潜在问题主动提醒你。这类能力通常由后台守护进程(10.1)支撑,而且默认更克制------主动打扰用户是有成本的,所以这类功能往往有开关、频率控制,默认关着或很保守。
一个设计哲学
自主模式体现了一个贯穿全书的产品哲学:把"控制权"做成可调的,而不是非黑即白。信任是逐渐建立的------你可以从每步确认开始,确认它靠谱后再逐步放手;每一次"永远允许这类操作"的点击(第 4 篇)都是在给它放权。好的自动化不是替用户做所有决定,而是让用户能精确地划出"哪些放心交给它、哪些必须我来"。
10.3 几种工作模式:先做计划再动手、自动同意改文件等
除了自主程度,助手还有几种针对不同场景的"工作模式"。
计划模式(plan mode)
最常用的特殊模式。在这个模式下,助手只能看、不能改:
- 它可以读文件、搜索、分析,但所有写文件、跑危险命令的工具都被禁用;
- 它的任务是产出一份"我打算怎么做"的计划(分几步、每步干什么、动哪些文件);
- 计划通过专门的工具提交给你审批;
- 你看完觉得靠谱,批准后才退出计划模式、真正开始动手。
这个模式特别适合"复杂任务先对齐方案":与其让它闷头改半小时发现方向错了,不如先花一分钟看它的计划,错了当场纠正。本质上是把"思考"和"执行"分成两个阶段,在执行前设一个人工检查点。
自动同意改文件模式(acceptEdits)
和计划模式相反的另一个方向:文件编辑不再逐个问你。适合你已经信任它的修改能力、正在做大量小编辑的场景(比如"把这 20 个文件里的旧 API 名换掉")。注意它只放开"改文件",跑命令(尤其危险命令)还是会问------放权是分项的,不是一放全放。
完全放开模式(bypassPermissions)
跳过所有权限确认。听着吓人,所以设计上强烈建议只在沙盒、容器、虚拟机这种"关起门来"的环境用。它对应 10.2 的全自动光谱顶端。
普通模式
默认,危险操作都问。
模式怎么切换
模式可以通过斜杠命令切换、命令行参数指定、被编辑器远程设置(第 7 篇 ACP 的 setSessionMode),切换时会给模型一个明确通知("现在是计划模式"),让它知道自己当前的行为边界。模式状态存在全局档案里(第 8 篇)。
还有一些"风格/人设"层面的切换
除了权限维度的模式,还有一些是风格层面的:
- 输出风格:回答详细还是简洁、要 JSON 还是要 Markdown;
- 思考强度:让模型想多深(简单任务少想、省时间省钱;难题多想);
- 界面偏好:主题、vim 按键习惯、语言等------这些更像个人设置,不影响能力边界。
你可以看到一个规律:凡是影响"它能做什么/怎么做"的维度,都被做成了显式、可切换、状态可见的模式,而不是藏在黑盒里。
10.4 语音说话、看屏幕、控制鼠标键盘:多出来的本事
最后讲几个"跳出纯文本"的高级能力。
语音输入
你可以直接说话而不是打字:
- 程序采集你的音频(有专门的音频采集组件,对接系统麦克风);
- 音频送到语音识别服务,转成文字;
- 转好的文字作为你的消息发出,发送前你还能核对修改。
这让"边干活边用嘴下指令"成为可能。界面上有语音状态提示,也可以设置语音开关。
看屏幕、操作电脑(computer use)
更激进的能力:助手能"看"屏幕截图、并像人一样移动鼠标、点击、敲键盘,从而操作任意图形界面软件(不只是命令行)。
这是怎么做到的?
- 看:截取当前屏幕图像,把图片喂给模型(模型本就能看图,第 5 篇讲过多模态)。模型"看"到屏幕上有什么按钮、什么窗口;
- 操作:模型表达"我要把鼠标移到坐标 (500, 300) 并点击""我要键入这段文字",程序调用操作系统级别的输入能力(移动鼠标、发点击、发按键)真正执行;
- 这些底层能力由独立的小包提供,且要分平台实现(Mac、Windows、Linux 操作系统接口各不相同)。
安全防护是重点
能操作鼠标键盘 = 能操作你电脑上的任何软件,风险极高,所以防护层层加码:
- 危险应用黑名单:有些程序(密码管理器、银行软件等)明确禁止它操作;
- 危险按键拦截:某些按键组合(强制关机、锁屏、系统设置类)直接禁止发送;
- 二次确认门:敏感操作前额外确认;
- 截图对比:操作前后对比屏幕画面,确认动作产生了预期效果;
- 这套能力同样受权限关卡和模式约束。
和浏览器的集成
类似地,还有专门操作浏览器的能力(作为一类外部工具/独立小包):打开网页、点击、填表单、读取页面内容,让它能帮你操作网站、抓取网页信息。
这些能力的共同结构
注意它们和核心机制的关系:无论语音、看屏幕还是操作鼠标,底层都还是那套 Agent 循环。
- 语音 = 换了一种"用户消息"的输入方式(音频转文字后照旧进入循环);
- 看屏幕 = 截图作为一种图片附件进入上下文(第 5 篇的多模态);
- 点鼠标敲键盘 = 一批新的"工具"(移动鼠标、点击、键入),过同样的权限关卡、走同样的工具调用流程。
新能力并没有改变核心架构,只是在"输入方式"和"工具种类"两端扩展。这正是把核心循环做成通用发动机的回报------发动机不变,加新能力只是挂上新的输入源和新的工具。
本篇小结
- 后台常驻靠守护进程:脱离终端独立运行,管理定时/监控/远程触发等工人任务,主程序通过本地通信通道和它对话,进程隔离互不影响。
- 自主程度是可调光谱(手动→半自动→全自动),不是非黑即白;越自主越依赖沙盒、可观测、可中断、关键决策点必停这几道保险。
- 工作模式把"能做什么"做成显式开关:计划模式(只看不改、先出方案审批)、自动同意改文件(只放编辑权)、完全放开(建议只在沙盒用);另有输出风格、思考强度等风格设置。
- 多模态能力包括语音(音频转文字)、看屏幕(截图喂模型)、操作电脑(移动鼠标点击键入,分平台实现,带黑名单/拦截/确认多重防护)和浏览器操作;它们都只是在核心循环的"输入端"和"工具端"做扩展,发动机不变。
下一篇讲工程层面的讲究:一份代码怎么变出不同版本、为什么要把大包拆成几百个小包、性能怎么优化、这种程序怎么测试。