加载失败
nah 是作者为 Claude Code(Anthropic 的允许模型调用 shell/工具的交互式编码/自动化环境)构建的上下文感知权限守护,目标是在模型与主机资源之间增加可判断的安全层。讨论以减少权限提示疲劳与阻止常见滥用为出发点,采用确定性分类器和 action taxonomy(如 filesystem_read、package_run)加上 pre-tool hooks(执行前钩子)在大多数已知模式下快速判定,并在模糊情况使用可选 LLM 回退。评论围绕对抗性示例(如修改 package.json 让 npm test 运行恶意命令、xargs/find、curl | bash、python -c)、链式/管道命令检测、以及运行模式差异(如 --dangerously-skip-permissions 或 Anthropic 的 auto mode)是否会使 hooks 异步化从而被绕过展开。替代或补强策略包括局部 sandbox(如 Docker 的 sandclaude)、policy gateway 或策略 DSL(如 OPA),但实现覆盖率与维护成本是核心权衡。
多位评论者赞同以确定性分类器和模式匹配为主的设计,认为比单纯让另一个 LLM 判定更可靠且响应更快。项目将命令映射到明确的 action taxonomy(如 filesystem_read、package_run、db_write 等),并实现对复合命令的组合规则检测:例如把 curl | bash 识别为 network|exec 并直接阻断,同时能区分 git checkout 与 git checkout . 的风险差异。该方法能在“零 tokens”条件下快速判定并减少权限提示疲劳,且保留可选的 LLM 回退以处理未覆盖或模糊的情形。社区已有轻量实现(如 claude-hook-advisor)证明了模式匹配在多数常见错误场景能大幅降低灾难性操作发生率。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
评论指出若允许某些工具或操作就存在被滥用的风险:例如修改 package.json 使 npm test 执行恶意命令,或利用 xargs、find 等路径进行命令注入,这些是易被忽视的攻击面。作者回应了若干防护措施:inline execution(python -c / node -e)会被分类为 lang_exec 并需要批准,Write/Edit 在写盘前会扫描内容,管道组合(curl | python)也有专门阻断规则。尽管如此,如果恶意代码已存在且看起来无害,或在人工批准后运行,当前的确定性层仍可能漏报;作者计划在执行前读取脚本内容并把脚本纳入 LLM 判定以弥补这个盲点。
多条评论讨论了 Claude Code 的权限流:Claude 决定使用工具 → pre-tool hooks 同步触发 → 权限系统判断是否需要用户批准 → 若需则提示用户 → 工具执行。若 Anthropic 的 auto mode 用 LLM 自动代替人工批准并保持 hooks 同步,则 nah 可以在更上层作为快速安全网并相互补充;但若 auto mode 或 --dangerously-skip-permissions 在底层把 hooks 设为异步(命令在 nah 阻断前就已执行),那将彻底绕过守护。作者建议在默认模式下运行 nah 并对常用工具做白名单以兼顾流畅性与安全,同时观察 auto mode 的实际实现细节来决定互补策略。
有人担心大量硬编码上下文假设会导致维护成本高,主张引入更通用的 DSL 来表达规则;作者则指出 nah 提供 YAML/CLI 自定义、分类剖面切换以及可扩展的分类机制以降低日常维护工作量。企业用户和评论者提到,策略 DSL(例如 OPA)或 gateway 层在规模化管理上更可控,但要实现真正的防护通常仍需隔离式 sandbox(如 Docker 容器)来承受任意代码执行的风险。社区已有基于容器的替代方案(如 sandclaude)与多个轻量实现,作者也在考虑把工具移植到其它可插件化的开源编辑器/平台以扩大适配性。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]
deterministic classifier: 基于规则与模式匹配的分类器,将命令映射到既定动作类别以做快速 allow/ask/deny 判定;优点是无需消耗 LLM tokens、响应快,但难以覆盖运行时行为和未知攻击,通常配合 LLM 回退使用。
pre-tool hooks(hooks): 在工具实际执行前触发的检查钩子,用于解析、分类并决定是否拦截命令;同步触发能在执行前阻止危险操作,异步触发则会导致命令在拦截前已执行。
action taxonomy(filesystem_read、package_run、db_write 等): 把具体命令或操作归类为一组风险类别(例如 filesystem_read、filesystem_delete、package_run、lang_exec、db_write),以便按类别应用 allow/ask/deny 策略。
--dangerously-skip-permissions: Claude Code 的一个运行选项/模式,跳过常规交互性许可;讨论中指该模式会让 hooks 异步触发,从而在守护机制反应前就执行命令,存在被绕过的风险。
auto mode: Anthropic Claude Code 可能提供的自动模式,使用 LLM 代替人为批准来自动决定是否允许操作;其实现(同步或异步触发 hooks)决定是否能与像 nah 的守护层互补或被绕过。
sandbox(容器/隔离运行): 通过 Docker 或虚拟化等隔离环境限制模型和其运行的代码对主机与敏感资源的访问,是抵御任意代码执行和数据外泄的更可靠但需额外运维成本的方案。