orlyjamie/youshallnotpass

GitHub: orlyjamie/youshallnotpass

为 Hermes 代理设计的按工具和平台粒度的策略网关,将 prompt-injection 引发的危险工具调用转化为可见且可否决的人工审批。

Stars: 1 | Forks: 0

# youshallnotpass 一个可配置的**基于工具和平台的策略网关**,专为 [Hermes](https://github.com/NousResearch/Hermes) 代理设计。它将一次成功的 prompt-injection 从隐秘操作转变为一次**可见且可否决的审批** —— 或者直接予以拦截。 ## 核心理念 大多数针对 prompt-injection 的防御措施只是降低了注入成功的*概率*。但在注入依然生效时,能够降低其*影响*的防御措施却寥寥无几。youshallnotpass 正是一款影响缩减器:它假设模型可能会被欺骗,并针对每个工具和每个交互界面(surface),决定一个受骗的代理被允许执行哪些操作。 对于每一次工具调用,它会解析以下一项操作: ``` resolution order: platforms[platform][tool] > rules[tool] > default allow run it ask stop for operator approval (Telegram ✅/❌, CLI, or dashboard); fail closed deny hard-block, always ``` 这是对 Hermes 基于命令行/模式匹配的内置审批功能的**补充**。基础网关无法对像 `web_fetch` 这样的原生工具(接收 URL 参数,而非 shell 命令字符串)进行逻辑判断。youshallnotpass 直接基于**工具标识本身**进行拦截,因此你可以设定“`web_fetch` 在 Telegram 上需要审批,但在 CLI 上可直接运行”—— 这是模式匹配网关所无法表达的逻辑。 ## 通过聊天实时管理:`/ynp` `/ynp` **仅限操作员输入,模型绝对无法调用**,因此被注入的电子邮件无法放宽或解除此网关。 ``` /ynp list tool catalog SCOPED to the current platform + each tool's state /ynp config raw policy (rules / platforms) /ynp allow|ask|deny [platform] /ynp set [platform] /ynp on (arm) /ynp off (disarm) /ynp reload ``` `/ynp list` 会读取 Hermes 的**实时工具注册表**以及平台的 `platform_toolsets`,因此它只会显示在你当前输入端实际启用的工具: ``` 🛡 youshallnotpass · ARMED · platform: telegram enabled on telegram: 8 tool(s) · 64 more exist but are capped off this surface hardcal cal_create 🟢 allow 🔒 (hardcal asks before creating) cal_delete 🟢 allow 🔒 (hardcal asks before deleting) cal_freebusy 🟢 allow cal_list 🟢 allow hardmail mail_get 🟢 allow mail_get_attachment 🟢 allow mail_search 🟢 allow mail_send 🟢 allow 🔒 (hardmail asks before sending) default: allow Toggle: /ynp deny|allow|ask [platform] (🔒 = plugin self-gates) ``` `🔒` 标记用于指示**自我拦截**的工具(其插件会在执行危险写入操作前主动询问,例如 hardmail/hardcal)。为了避免重复弹窗,它们在此处默认设为 `allow` —— 这个锁图标标明了这一点。如果要彻底移除某个工具(而不是对其进行拦截),请使用 Hermes 自带的 `hermes tools`。 ## 安装 ``` mkdir -p "$HERMES_HOME/plugins" cp -r youshallnotpass "$HERMES_HOME/plugins/youshallnotpass" ``` 在 `$HERMES_HOME/config.yaml` 中启用它,并设置为手动审批模式: ``` plugins: enabled: - youshallnotpass approvals: mode: manual # REQUIRED. Never "smart" (auto-approves) or "off". cron_mode: deny ``` 策略从 `$HERMES_HOME/youshallnotpass.json` 中读取(文件更改时会自动热重载),并且完全可以通过 `/ynp` 进行编辑。示例: ``` { "default": "allow", "rules": { "send_email": "ask", "post_webhook": "ask" }, "platforms": { "telegram": { "terminal": "deny", "web_fetch": "ask" } } } ``` ## 硬性要求(否则将无法提供保护) - `approvals.mode: manual` —— `smart` 模式会让辅助 LLM 自动批准(注入内容可能会被判定为“低风险”);`off`/YOLO 模式会跳过一切拦截。 - 不得开启 `HERMES_YOLO_MODE` / `--yolo` / `/yolo`。 - 已配置网关**配对/白名单**,确保只有*你自己的*账户能接收并回复审批提示(适配器会在失败时自动执行拒绝拦截)。 - 不得在会绕过危险命令拦截层的沙箱执行器下运行。 ## 审批的展现形式 - **网关(Telegram/Discord/……):** 显示为内联键盘;代理会阻塞,直到你点击按钮。 - **CLI:** 同样的拦截机制,表现为终端提示。 它复用了 Hermes 自带的审批流程(`tools/approval.py`);该插件只是在原有基础上增加了针对单个工具/单个平台的解析逻辑。 ## 注意事项 - **仅使用标准库** —— 无任何第三方依赖。 - 针对技能/终端命令的可选命令模式拦截具有优雅降级特性:如果宿主环境缺乏公开的 `register_dangerous_pattern` hook,它会退回到扩充已编译模式列表的方式(若上游发生重命名,此方式可能会失效)。 - 仅限操作员使用的 `/ynp`:启用/解除拦截以及策略编辑操作,模型永远无法触及。 ## 推荐搭配 - **[hardmail](../hardmail)** / **[hardcal](../hardcal)** —— 原生、无需 shell 命令的邮件和日历工具,其写入操作均带有自我拦截机制。 ## 许可证 MIT © 2026 Jamieson O'Reilly (theonejvo)
标签:AI安全, Chat Copilot, Homebrew安装, Streamlit, 人工智能, 大模型智能体, 提示词注入防护, 用户模式Hook绕过, 策略网关, 访问控制, 逆向工具