CliAI 返回的每条命令在到达你的 shell 之前,都会贴上三个标签之一。读懂这些标签,是「小心地用」和「自信地用」之间的差别。这篇说系统、捕到了什么、——以及,老实说,没捕到什么。
三个等级
SAFE。 只读或近乎只读。ls、pwd、cat、grep、find -printf。按 Enter,没有额外摩擦。
CAUTION。 有限地改变状态。具体文件的 rm、mv、单文件 chmod、对已知 PID 的 kill -9、未共享分支上的 git reset --hard。标签黄色,要求确认。
DANGER。 大范围或不可逆改变:rm -rf 跨越已知根、向块设备 dd、对 / 的 chmod -R、main 上的 git push --force、任何在根级别触碰 * 的事。标签红色,必须键入字面量 yes——Enter 不工作。
clai
┌─ Task ───────────────────────────────────────────────┐│ 把我的家目录整个干掉 │├─ Command ────────────────────────────────────────────┤│ rm -rf -- ~/ │├─ Safety: DANGER ─────────────────────────────────────┤│ 递归删除,跨越 $HOME 根。 ││ 输入 "yes" 确认。 │└──────────────────────────────────────────────────────┘
怎样进行分级
用正则,在服务端,在 LLM 生成候选之后。规则不保密——是一份历史上造成过损害的结构形态清单:
- 跨越已知根目录的递归删除(
/、$HOME、/etc、/var、/usr); - 对块设备的裸写(
dd of=/dev/sd*); - 对受保护分支的强力破坏性 git 操作;
- 尾部为破坏性命令的管道(
tar | … && rm -rf …)。
匹配 DANGER 集得 DANGER。改变状态但不越线得 CAUTION。其余 SAFE。
它能抓到、但你没料到的东西
第一眼看着没事的命令,读完整条管道才会被判 DANGER。分级器看整条 shell 命令,不只是第一段:
clai
┌─ Task ───────────────────────────────────────────────┐│ 打包、上传、然后清掉 │├─ Command ────────────────────────────────────────────┤│ tar -czf - . | aws s3 cp - s3://b/k && rm -rf -- . │├─ Safety: DANGER ─────────────────────────────────────┤│ 尾部递归删除 $PWD。 │└──────────────────────────────────────────────────────┘
它漏掉的——诚实地说
- 奇异的 glob 展开在运行时解析为危险目标(
rm -rf $UNSET_VAR/*)——静态文本看不出害处。 - 自定义脚本。 命令是
./deploy.sh时,分级器看不到脚本内部。 - 间接破坏——
dd if=/dev/zero of=/path/to/important/file通常抓不到,因为它不在统计意义上的「危险模式」里。
标签是提示,不是保证。先审后跑才是真正的安全机制。你读,你按 Enter。