loops Bigharness.ai
BIGHARNESS DAILY · No. 23 2026 年 十 月 12 日 中文

Hook 默认放行:Claude Code 2.1.295 让「钩子跑不起来即拦」成为逐钩子可选项,文档却同日仍写「别指望卡住的钩子当闸」——护栏的失败语义第一次被摆上台面,默认仍是 fail-open

今日判词:今天的主位移是护栏的「失败语义」被摆上台面。用户侧先撞上它:claude-code #100064(10/6 汇总一天多会话)记下一次真实事故——守卫脚本被改出语法错,265 次 PreToolUse/Stop 钩子以 exitCode 1 记成 hook_non_blocking_error 后照跑工具,3 份 agent 简报未经检查发出,Stop 回话闸失败 10 次;根源是 exit 1(无有效 JSON 时)在有无 JSON 下都按「非阻断错误」处理。2.1.295(10/8)回应一半:给 command/HTTP 钩子加 onFailure:"block"(起不来/超时/异常退出即拦),但为 opt-in、默认不变,且上线当天官方 hooks 参考仍写「别指望卡住的钩子当闸」、通篇无 onFailure,与 changelog 打架;2.1.294 修了把钩子写成指令(如 Block commands that…)时「该拦的没拦」,2.1.296 修了 managed PreToolUse 拒绝却不结束回合、PostToolUse 的 updatedMCPToolOutput 未生效。实现还有坑:#100891 显示 Windows 下 powershell -File 指向缺失脚本以 0xFFFD0000 退出、低 16 位为零被当成功,onFailure:block 不拦,2.1.296 仍复现。判词:默认 fail-open 是刻意的降噪选择,但「守卫=钩子」意味着守卫的可靠性等于你手写那个脚本的可靠性;今天起给每条闸钩显式加 onFailure:"block" 与短超时,并接受退出码不是布尔值。

热度盘面 Top 5

  1. 护栏的失败语义本周被摆上台面。用户报告 claude-code #100064(10/6 汇总一天多会话):守卫脚本被 agent 改出语法错后,265 次 PreToolUse/Stop 钩子以 exitCode 1 记为 hook_non_blocking_error 却照跑工具,3 份 agent 简报未经检查发出,Stop 回话闸连续失败 10 次——根源是 exit 1(无有效 JSON 时)按「非阻断错误」处理。官方 2.1.295(10/8)补一半:command/HTTP 钩子可配 onFailure:"block"(起不来/超时/异常退出即拦),opt-in、默认仍放行;同日 hooks 参考仍写「别指望卡住的钩子当闸」且全篇无 onFailure,与 changelog 打架。2.1.294 修「把钩子写成指令(如 Block commands that…)该拦没拦」,2.1.296 修 managed PreToolUse 拒绝却不结束回合、PostToolUse 的 updatedMCPToolOutput 未生效。实现坑:#100891 称 Windows 下 powershell -File 指向缺失脚本以 0xFFFD0000 退出、低 16 位为零被当成功,onFailure:block 不拦,2.1.296 仍复现。

    编辑注 把「钩子=确定性闸门」当假设就错了:崩溃的钩子默认放行,可靠性等于你手写脚本的可靠性。行动:给每条安全钩显式加 onFailure:"block" 配短超时,别用退出码当布尔;顺带核你 harness 的文档与实现是否也各说各话。

  2. #2 openai/codex v0.162.0(10/8) 发布

    Codex 0.162.0(10/8)把沙箱的自我加固补齐:ripgrep 配置不再能削弱 deny-glob mask、拒绝可写的「沙箱构建可执行文件」、修 Linux 沙箱「多个 deny 文件」下启动失败;另有 Code Mode 里 opt-in 的 ranked tool search、从可信本地项目创建/列出 managed Git worktree、Guardian V2 的 Decisions 对照与一致性/时延指标、MCP 沙箱状态强制的端到端覆盖。0.162.1(10/9)修 TUI 崩溃与后台服务/CLI 默认特性不匹配的启动失败。

    编辑注 和 Claude Code 同周都在堵同一类洞:工具自己的配置反过来松开 deny(ripgrep 配置、构建产物可执行)。跟法:把「谁能改沙箱策略输入」——rg 配置、构建脚本、worktree——一并纳入 deny 面,别只盯模型的命令。

  3. #3 NVIDIA/OpenShell v0.1.2(9/28) 架构

    NVIDIA/OpenShell(Apache-2.0,Rust)自称「agent 舰队的安全私密运行时」:在策略里声明每个 agent 能碰什么,内核层对每次文件访问/系统调用/网络连接执法;策略变更在生效前先过 gateway 里的 policy prover,预判将放开的凭据可达、新 HTTP 方法与云元数据端点访问;凭据以不透明占位符交给 agent、只在 profile 授权的端点解析;沙箱支持 Docker/Podman/MicroVM/K8s,已涵盖 Claude Code/Codex/Copilot CLI/OpenCode 等。最新版 v0.1.2(9/28)。

    编辑注 它把「审批」换成「策略边界」——不是每次动作问你,而是内核不放行。值得抄的是策略变更前的 prover:改策略本身也要被审。自建 harness 时先决定执法在内核还是在钩子;钩子那条路本周已被证明会静默放行。

  4. #4 pingdotgg/t3code ≈26.8k★ · 周增 ~2,367(10/11 第三方周报) 新星

    「agent harness 控制面」:在一台机器上统一驱动 Claude Code/Codex/Cursor/Grok Build/OpenCode/Google Antigravity,各 agent 走各自本地 CLI 登录;客户端含 iOS/Android/web/Electron,MIT、pnpm monorepo。第三方周报(截至 10/11)记其约 26.8k★、周增约 2,367。项目自述早期、暂不收大功能贡献。

    编辑注 控制面这层在抢位:它不碰模型,只统一登录、会话与远端接入——多 agent 并用时,凭据与配置隔离就在它手里。选型先看它如何隔离各家 agent 的凭据与工作目录,别只看界面。

  5. #5 thedotmack/claude-mem ≈99.3k★ · 周增 ~4,035(10/11 第三方周报) 工具

    claude-mem(Apache-2.0,13.35.0)是跑在 Claude Code 等 harness 上的跨会话记忆:靠 SessionStart/UserPromptSubmit/PostToolUse/Stop/SessionEnd 五个生命周期钩子(6 个钩子脚本)采集观察,AI 压缩成语义摘要存 SQLite(加 Chroma 向量),经 MCP 工具分层取回(search→timeline→get_observations,自述约十倍 token 节省),并声称支持 Codex/Gemini/Copilot/OpenCode/Hermes/OpenClaw。

    编辑注 它印证钩子已是 harness 的通用扩展面:一个记忆系统不带私有 API,全挂在官方生命周期事件上就能跨 harness。若你要做上下文/记忆扩展,优先用生命周期钩子而非改内核——代价是继承同一套失败语义。

雷达上值得盯的 2 件事

trend 第三方周报(截至 2026-10-11)把榜单主题读成「运行面」:9 个 AI 项目里 5 个在「谁在跑 agent」这层——t3code(控制面)、openrig(编排)、claude-mem(记忆)各答一面;上下文/记忆独立成中间层——claude-mem 在会话之间,ranxianglei/billion-context(约 793★、周增约 259)在 agent 与模型 API 之间做可逆、前缀缓存友好的压缩,自述缓存命中率 95–97%。星数会被协同刷星失真,当线索读。
trend 「钩子/配置即执行面」被第三方重新分类:一份 10/2 的 coding-agent 安全汇总称,某款 harness 的 git 配置(core.fsmonitor)能在任何审批之前执行;同周 ripgrep 配置被指可松开 deny-glob mask,并被 Codex 0.162.0 堵上(据 release notes)。共性——凡是「配置里能填路径/命令」的位置,都是一条绕过审批的边;核查你 harness 在哪里读配置、读到的能否被模型侧改写。

Hook 是护栏的默认形态,默认失败却是放行:钩子崩了、超时、退出码异常,动作照跑,除非逐条写 onFailure:block。claude-code #100064 里 265 次静默失败、3 份简报漏检,就是这么发生的;2.1.295 给了开关,文档还没跟上,Windows 还有个退出码被当成功的洞。先审你的闸钩:能不能失败即拦,比拦得准更重要。