AI 跑终端命令会不会刷屏?WES Code 的命令三分类路由(附实测分类结果)
目录一、三类命令三个去处二、怎么判断是哪一类判断顺序关键词节选三、实测13 条命令分到了哪四、时间和输出的上限五、几个使用建议六、它做不到的地方小结让 AI 改一个需求它在背后跑的命令往往有几十条grep找代码、cat看文件、git log翻历史然后编译、跑测试有时还要装依赖、起服务。这些命令要是每条都开一个终端标签页界面很快就被刷满。要是全都藏起来你又看不到构建和测试的结果起了服务也没法操作。WES Code 把 AI 要跑的命令分成三类各走各的路检索类静默执行构建测试类进只读的镜像标签页安装和启动服务类进真正的终端。这篇讲清楚怎么分、实际分出来什么样以及它会分错的情况。一、三类命令三个去处类别典型命令去哪你能看到什么静默执行grep、cat、ls、git log本地后台跑不开终端结果回到对话里只读镜像go build、npm test、pytest本地跑输出同步到一个只读标签页标签名形如 [AI] go build ./...用户终端npm install、npm run dev、docker compose up开一个真正的终端标签页标签名形如Agent: npm run dev⟦配图本地上传 marketing/images/diagrams/exec-routing.png图片说明「三类命令的去处」⟧只读镜像标签页的名字是[AI]加上命令本身超过 60 个字符会截断。用户终端标签页的名字AI 指定了就用它指定的没指定就是Agent:加命令的前 40 个字符。二、怎么判断是哪一类判断顺序先看是不是「用户可见」的命令AI 调用时显式标记了或者命令里包含安装、启动服务这类关键词。是就进用户终端不是的话看是不是验证命令以构建、测试、lint 这类命令开头或者出现在后面。是就进只读镜像都不是静默执行两类判断都不区分大小写也都不调用模型就是字符串匹配。同一条命令里两类关键词都有时先按用户可见算go test ./... npm run dev会进用户终端。关键词节选归到部分关键词用户终端命令里包含就算npm install、pip install、npm run dev、yarn dev、go run、uvicorn、flask run、python manage.py runserver、vite、docker compose up、make run只读镜像以它开头或在后面go build、go vet、go test、npm test、npm run build、npx tsc、npx vitest、pytest、cargo test、mvn test、gradle build、make test、terraform plan、eslint完整列表很长覆盖 Go、Node、Python、Rust、Java、.NET、Ruby、PHP、Swift、Dart 等常见工具链还有数据库迁移和 Terraform 这类命令。三、实测13 条命令分到了哪我把这段分类逻辑原样拿出来喂了 13 条 AI 常跑的命令grep-rnTODOinternal/gitlog--oneline-5catgo.mod go build ./... gotest./internal/order/...cdwebnpmtestpytest-qnpminstallnpmrun dev go run ./cmd/serverdockercompose up npx vite buildCGO_ENABLED0go build ./...测试程序很简单把 WES Code 里做分类的两个函数和两张关键词表单独拿出来按它的判断顺序对每条命令跑一遍。下面只贴调用的部分packagemainimportfmt// IsUserFacingCommand、IsVerificationCommand 和两张关键词表// 原样取自 WES Code这里省略funcroute(cmdstring)string{ifIsUserFacingCommand(cmd){return用户终端}ifIsVerificationCommand(cmd){return只读镜像}return静默执行}funcmain(){cmds:[]string{grep -rn TODO internal/,git log --oneline -5,cat go.mod,go build ./...,go test ./internal/order/...,cd web npm test,pytest -q,npm install,npm run dev,go run ./cmd/server,docker compose up,npx vite build,CGO_ENABLED0 go build ./...,}for_,c:rangecmds{fmt.Printf(%-34s - %s\n,c,route(c))}}结果命令分到grep -rn TODO internal/静默执行git log --oneline -5静默执行cat go.mod静默执行go build ./...只读镜像go test ./internal/order/...只读镜像cd web npm test只读镜像pytest -q只读镜像npm install用户终端npm run dev用户终端go run ./cmd/server用户终端docker compose up用户终端npx vite build用户终端CGO_ENABLED0 go build ./...静默执行前 11 条都在意料之中。cd web npm test虽然不是以npm test开头但它出现在后面照样认出来了。最后两条分错了npx vite build是一次构建但命令里包含vite被当成了要启动服务进了用户终端CGO_ENABLED0 go build ./...前面带了环境变量不再以go build开头被当成普通命令静默执行你在终端面板里看不到它的输出这两种情况结果都还在对话里只是没进你预期的那个标签页。四、时间和输出的上限项目上限前台命令超时默认 120 秒后台任务start_bg最长 6 小时命令输出2MB用户终端里的命令创建 30 秒、无输出 120 秒、总时长 180 秒前台超时可以改设置里「AI 引擎」下的「高级设置」有一项「命令执行超时」单位是秒。预计要跑超过 120 秒的命令AI 会改用后台模式先用start_bg启动拿到任务 ID再用poll看输出、kill结束。{action:start_bg,command:go test -count1 ./...,description:完整测试预计超过 2 分钟}{action:poll,task_id:start_bg 返回的任务 ID}没有指定工作目录时命令在项目根目录下跑。五、几个使用建议想亲眼看着某条命令跑就直接说。比如「在终端里跑一下 go test我要看输出」。AI 可以把命令显式标成用户可见它就会进用户终端。这时命令工具的参数里会带上user_visible{action:run,command:go test ./internal/order/...,user_visible:true,description:按用户要求在终端里展示测试输出}带环境变量的构建命令换个写法。像上面那条CGO_ENABLED0 go build不会进只读镜像。我又试了几种写法下面这三种都会被认成构建命令exportCGO_ENABLED0go build ./...npmrun build# 代替 npx vite build把 vite build 写进 package.json 的 build 脚本makebuild# 把环境变量写进 MakefileMakefile 里这样写build: CGO_ENABLED0 go build ./...别往只读镜像标签页里打字。它只是把输出同步过来并没有真正锁住输入你打的字不会传给那条命令。六、它做不到的地方靠关键词判断会分错上面两条就是例子只读镜像没有真正锁死它是个展示输出的标签页不是硬性只读AI 不能往交互命令里输入需要输入的命令要你在终端里自己操作没有开关关掉分类三类路由一直生效不负责拦危险命令分类只决定命令去哪个标签页拦危险命令是另一套安全规则的事小结AI 跑的命令分三类检索类静默执行构建测试类进只读镜像安装和启动服务类进用户终端判断靠字符串匹配不调模型先看是不是用户可见再看是不是验证命令实测 13 条里分错了 2 条命令里带vite的构建和前面带环境变量的构建前台命令默认 120 秒超时在「高级设置」里能改想看输出就让 AI 在终端里跑文中的命令路由是 WES Code 里的功能官网是 weisyn.com。你们让 AI 跑命令时最在意的是看得见还是别打扰欢迎评论区聊聊。觉得有用的朋友欢迎点赞、收藏、关注后面会继续分享 AI 编程的实战经验。