Numbat
在终端设备上实现 AI Agent 活动可视化:本地检测、可选的动作前拦截、以及事后取证重建。
证据显示默认只读、monitor-only、阻断需操作者显式开启且仅限标记 enforce 的规则,SECURITY.md 明确外发仅限配置的 HTTP sink 且默认强制 HTTPS;扣除点:hook 卸载/恢复路径仅在命令列表中提及,未说明状态与 hook 配置的完整回滚语义;发布者身份未经验证,仓库内未见维护者归属信息,故 least_privilege/rollback/source_attribution 不给满分。
CI 覆盖三平台测试、race、fuzz 与 go mod tidy 一致性检查,SECURITY.md 逐项说明失败时的行为(解码错误不阻断、4MiB 限制等),失败消息设计有据可查;但本文档集未包含实际错误消息样例或 hook 状态核验以外的失败恢复细节,故不给 3。
范围一节与 coverage matrix 明确各 agent 支持边界、已知缺口、WSL/Windows 路径差异,并明确不执行 artifacts 中的命令,边界声明非常完整(3);受众与触发精度仅能从规则与文档结构间接推断,未见触发误报率或针对不同环境的具体适配验证,故相关项为 2。
文档结构(coverage、event model、CLI、deployment、enforcement、rules、rule catalog、schemas)完整,安装说明含下载校验、go install 与源码构建三条路径(3);但证据中无 CHANGELOG、无维护者名单/CODEOWNERS,仅'最近 minor 版本获安全修复'一句话承担维护责任说明,versioning_changelog 与 maintenance_responsibility 仅给 1。
版本化 NDJSON、JSON Schema、SHA-256 清单的 case bundle 使输出可直接消费(3);但本文档集无法证实实际检测质量与误报水平,marginal_value 与 cost_benefit 只能按宣称特性与同类方案定性评估,未见过基准或实测数据,不给 3。
记录含 evidence_refs、cited_event_ids、schema_version 与规则版本,且明确声明'findings 是规则匹配而非入侵证明',事实与推断分离做得很好(3);README 大量引用的 docs 文件不在本次证据集中,跨来源交叉验证不可行,示例均为'受控回放'而非实际运行结果,claim_traceability 与 cross_source_corroboration 相应扣分。
- 发布者身份未经验证,企业环境采用前应独立确认来源与供应链。
- collect 默认绑定 127.0.0.1:4318 且无客户端认证;换绑到其他接口即无 TLS/认证,需网络层隔离。
- 脱敏仅为模式掩码,project-path 哈希为无盐稳定连接键;分享记录或 case bundle 前必须人工复核。
- enforce 模式失败时(解码/评估错误)不拒绝动作,宿主才是最终执行点;不应将 numbat 视为 fail-closed 控制面。
- 静态审查未执行任何命令,检测质量、误报率与 hook 实际加载情况需在部署前实测验证。
这个 Agent 能做什么,适合哪些场景?
Numbat 是 Perplexity 开源的终端侧 AI Agent 安全监控工具,通过本地钩子(hooks)、插件、OTLP/HTTP 日志和磁盘上的会话产物来观察受支持的桌面、CLI、IDE 和网关类 Agent。它将实时与静态活动统一规范化为同一事件模型,并用同一套 CEL 规则引擎进行检测,检测完全在本机运行。记录以带版本的 NDJSON 格式输出,可写入 stdout、本地文件或通过 HTTP 外送,事件与发现均保留原始来源引用。拦截(enforce)默认关闭,仅对受支持的同步 pre-action 钩子生效,且自带的全部规则均为仅监控模式。工具以单二进制形式分发,覆盖 macOS、Linux 和 Windows(amd64/arm64),构建时不依赖 cgo。
numbat 通过三条路径采集数据:为支持的 Agent 安装本地钩子/插件(如 Codex、Claude Code 的 pre-action 回调)、接收 OTLP/HTTP 日志、以及扫描磁盘上已有的会话产物(无需事先安装 numbat 即可重建历史活动)。所有活动被规范化为统一事件模型后,由内置 CEL 规则、多步序列规则和自定义 YAML 规则在本机评估,产出事件、发现(findings)、执行决策(enforcement decisions)、指标(indicators)和扫描摘要五类带版本 NDJSON 记录。命令行覆盖:numbat agents(只读发现)、numbat scan(扫描产物)、numbat hook install/status/uninstall 与 numbat collect(实时捕获)、numbat ship(记录外送)、numbat rules check/list/test(规则开发)、numbat timeline(会话时间线)、numbat case build/verify(带 SHA-256 清单的便携案件包)。扫描为只读并做密钥脱敏;启用拦截时,匹配 enforce: true 规则的 pre-action 调用会按 Agent 类型返回拒绝响应。
- 安全团队在开发者工作机上部署监控,实时发现 Agent 访问云元数据端点(如 169.254.169.254)等高危网络行为。
- 事件响应人员对未提前部署监控的机器进行事后取证,从 Codex、Claude Code 等工具遗留的会话产物重建多步攻击链(如先读密钥文件再外传数据)。
- 平台工程团队将一批自定义 YAML 规则通过
--rules-dir下发到研发终端,实现统一的 Agent 行为策略。 - 合规审计人员使用只读的
scan和timeline命令生成带 SHA-256 清单的案件包,用于留档和审查。 - 希望阻断特定行为(如写入 SSH authorized_keys)的管理员,将内置规则复制为
enforce: true版本并安装到受支持的 pre-action 钩子上。 - 构建 Agent 安全工具链的工程师接入 OTLP/HTTP 日志导出,将现有 Agent 日志纳入同一检测管线。
这个 Agent 有哪些优点和局限?
- 检测完全在本机运行,规则引擎(CEL)与事件模型对实时钩子和静态产物扫描统一复用,一套规则两种场景生效。
- 支持多步序列规则(如"读密钥后外传"链式检测),发现记录引用具体事件 ID 和 ATT&CK 标签,证据链可审计。
- 拦截默认关闭且所有出厂规则均为仅监控模式,部署风险低;拦截仅在受支持的同步 pre-action 钩子上生效,语义清晰。
- 单二进制分发,覆盖三大操作系统和两种架构,构建不依赖 cgo,适合大规模终端部署。
- 记录格式有版本化 JSON Schema(v0.3.0),事件与发现保留来源引用,便于下游 SIEM 集成。
- 拦截能力仅覆盖受支持的同步 pre-action 钩子,且需要管理员手工改写规则(保持 id、加 enforce: true、递增版本)并重新安装钩子,开箱即用的出厂规则全部只监控不阻断。
- 静态产物重建无法恢复 Agent 未持久化的活动,也不等同于磁盘或内存取证;发现只是规则匹配,不构成入侵证明。
- 各 Agent 的覆盖程度由覆盖矩阵决定,存在已知的延迟写入、保真度限制和 root 覆盖问题;Windows 原生与 WSL 的路径处理也不同。
- 钩子信任要求因 Agent 和范围而异(如 Codex 用户钩子需手动信任,--managed 钩子策略信任),且 hook status 只验证配置、不验证实际执行与送达。
- 记录即使脱敏后仍可能保留敏感的终端与 Agent 上下文;案件包未签名,不能证明来源真实性或完整性。
如何安装或部署这个 Agent?
方式一:从 GitHub Releases(https://github.com/perplexityai/numbat/releases)下载 macOS、Linux 或 Windows 的 amd64/arm64 单二进制,每版附带 SHA-256 校验和。方式二:用 Go 1.26.6 或更新版本安装:go install github.com/perplexityai/numbat/cmd/numbat@latest。方式三:本地静态构建(macOS/Linux):CGO_ENABLED=0 go build -trimpath -o numbat ./cmd/numbat;Windows PowerShell:$env:CGO_ENABLED = "0"; go build -trimpath -o numbat.exe ./cmd/numbat。无需额外凭据或云服务。
如何使用这个 Agent?
- 只读盘点与扫描(不安装钩子、不改 Agent 配置):
numbat agents列出发现的 Agent;numbat scan扫描所有发现的 Agent 产物,或用numbat scan --agent codex限定范围。2. 实时监控(以 Codex 为例):numbat hook install --agent codex --emit all安装仅监控模式钩子,记录写入~/.numbat/records.nd;用numbat hook status --agent codex检查状态。注意安装后需在 Agent 的钩子设置(如 Codex CLI 的 /hooks 或 Settings > Hooks)中审查并信任钩子定义。3. 启用拦截:将 rules/ 下的完整 YAML 复制到自管目录、保持相同 id、添加enforce: true并递增版本,然后numbat rules check --rules-dir ./numbat-policy校验,再numbat hook install --agent codex --emit all --rules-dir ./numbat-policy --enforce。4. 其他:numbat timeline查看会话时间线,numbat ship外送记录,numbat case build/case verify构建与校验案件包。运行numbat --help查看全部命令。
常见问题
启用后会不会拦截或干扰 Agent 的正常操作?
是否需要联网或云服务?
支持哪些 Agent 和操作系统?
能否在没有提前部署监控的机器上取证?
numbat scan 和 timeline 可从支持的磁盘会话产物做只读重建,无需事先安装钩子;但这不是磁盘/内存取证,Agent 未持久化的活动无法恢复。如何添加自己的检测规则?
--rules-dir(可重复)传入 scan、collect、hook、rules check 等命令;可用 --no-builtin-rules 只使用自有规则集,并可用 numbat rules test 做测试。