跨 harness 对比:安全与权限(审批门、密钥管理)

一、总览:这个维度的设计谱系

61 个 harness 在”该不该让 agent 执行这一步、密钥怎么管”上的做法,可以归到六条主线,且它们常常叠加:

  1. 规则引擎流(allow / ask / deny 三态 + 模式匹配)——最主流。一张有序规则表,pattern(Bash(git *)Write(**/*.ts)mcp__server__tool)× action,first-match 或 last-match 定胜负,deny > ask > allow 优先级几乎是行业共识。Claude Code 定义了语法,opencodeMiMo-CodeKimi CodeQwen CodeKilo CodeAgentScopeContinueAmazon QKiro 全是同一套骨架的方言。

  2. LLM 介导的动态审批(模型给模型把关)——把”这步危不危险”交给另一个(或同一个)LLM 实时判定,而非静态白名单。这是 2025–2026 最有代表性的分化:Codex 的 Guardian、Gemini CLI 的 ConSeca、Claude Code 的 Auto-mode 分类器、Cursor 的 Auto-review、goose 的 SmartApprove、CAMEL 的 LLMGuardRuntime、Factory 的 Droid Shield LoRA 门控。

  3. 档位/自主度模型(autonomy level)——用一个从”啥都问”到”啥都不问”的连续旋钮统摄多个开关,把风险等级和自主度对齐。Factory 的 Autonomy Level(Off/Low/Medium/High)、Plandex 的 none/basic/plus/semi/full、goose 的 GooseMode 四态、Warp 的 execution profile。

  4. 确定性硬地板(不可绕过的拒绝列表)——正则/字符串黑名单,任何模式(含 YOLO)都覆盖不掉。HermesUNRECOVERABLE_BLOCKLISTZedHARDCODED_SECURITY_RULESFactory 的 blocklist、v0 的系统级拒绝列表、Claude Code 沙箱里针对裸 git 仓库 CVE 的防御。

  5. 框架层 HITL 原语(deferred / interrupt / approval)——SDK 类 harness 不做策略引擎,只给一个”暂停等人批准”的抽象。LangGraphinterrupt()OpenAI Agents SDKneeds_approvalPydantic AIApprovalRequired/deferred、Google ADKrequest_confirmationAgno@approvalLettarequires_approval tool rule。

  6. 无审批门(信任 LLM + 靠隔离兜底)——刻意或疏于设计地不设逐步确认,安全全压在沙箱/容器/域名白名单上。SWE-agentTraebrowser-useOpenManusAgent ZeroUI-TARSMetaGPT

正交于审批门的还有两条独立线:hooks 作为确定性安全边界PreToolUse 退出码 2 硬阻断,被多家明确称为比 prompt 更可信的策略层)与密钥管理(从明文环境变量到 OS keychain、加密 vault、别名注入、端到端 HPKE 信封,跨度极大)。

二、对比表

harness审批门模型不可绕过的硬地板LLM 介导判定密钥管理
Claude Code三层权限 + plan/bypass 模式沙箱防御性拒写(settings/裸 git CVE)Auto-mode 两阶段分类器(对推理盲)沙箱路径排除 ~/.aws/SSH;web 版凭证永不入沙箱
CodexAskForApproval 四态 + 静态预检workspace-write 下 .git/.codex 恒只读Guardian LLM 审查会话,fail-closedkeyring 后端(MCP OAuth);secrets/ crate
Gemini CLI5 级优先级 TOML 策略引擎admin 策略 OS 层强制所有权ConSeca:逐 prompt 生成最小权限 ACLOS keychain(apiKeyCredentialStorage
Cursorhooks allow/deny/ask + Auto-reviewAuto-review 分类器(同 RPC 流,约 4% 拦截)1Password 校验、MCP 治理伙伴集成
opencode有序 Ruleset,last-match,默认 ask独立 Auth/Credential/McpOAuth 服务
MiMo-Codeallow/deny/ask,deny 恒优先FORCED_ASK(bash_delete 永远现场问)doom-loop 检测强制 askauth.json 0600 原子写,CI 可注入不落盘
Kimi Code19 步策略链引擎敏感文件/.git 恒 ask(但 Bash 不设防,诚实披露)~/.kimi-code/credentials/ 0700/0600 原子写
Qwen CodeL3→L4→L5 三层流,plan 强制转 askssrfGuard 封云元数据 IP只读 shell 经 AST 分类自动放行OS 密钥链(keytar)存 MCP OAuth
AgentScope独立 PermissionEngine,5 模式dangerous_files/dirs 黑名单每工具自判只读credential/ 模块,支持跨用户/组织共享
Kilo CodeRuleset,always 持久化ConfigProtection(config 编辑禁 always)、hardRuleset vetooauth/api key,gitleaks,kilo-memory 脱敏
Continue三态 allow/ask/exclude,plan/auto 模式disabled 策略永远优先Bash 接安全评估器AuthService,无 secret redaction
Roo CodeaskApproval + 自动审批上限(次数/成本)containsDangerousSubstitution 正则恒 ask、写保护 glob推测 VS Code SecretStorage(未确认)
ClinetoolPolicies autoApprove + hub 路由审批VS Code SecretStorage(OS keychain)
OpenHandsConfirmationPolicy + LLM 自报 security_riskPatternSecurityAnalyzer 正则兜底LLM 逐调用自报 LOW/MED/HIGHSecretRegistry 按引用注入、序列化脱敏
gooseGooseMode 四态 + PermissionInspector供应链 OSV.dev 恶意包拒启动SmartApprove 的 LLM-as-judge 只读分类未深查(oauth 模块存在)
Amazon QPermissionEvalResult 逐工具 allow/ask/denyautoAllowReadonlyAWS SSO OIDC/PKCE,只有短期 token,无静态 key
Kiro统一权限模型 {capability,effect},5 作用域Kiro 作用域硬编码禁写自身权限配置KMS 静态加密,可自带客户 CMK
FactoryAutonomy Level 四档 + 命令风险标签blocklist 绝对(--skip-permissions 也拦)Droid Shield Risk/Downgrade LoRA 门控Downgrade 模型架构上看不到真实密钥值
Warp按 profile 允许/拒绝列表,带原因编码组织策略强制项用户不可覆盖AgentDecided 原因码HPKE 信封(Tink)+ 值不可取回 + 工作负载身份联邦
Devin接管暂停 + AI Guardrails 消息筛查层Guardrails kill_sessionGuardrails 分类器(prompt injection/泄露)4 类密钥 × 4 作用域体系;cog_ token RBAC
Copilot Agent逐工具 + 两步 URL 审批eligibleForAutoApproval 组织强制人批BYOK API key 从不落盘,每次由宿主重供
Junieallowlist.json + Brave 三档项目级 hooks 默认忽略(防仓库注入)Brave Auto 内部安全分类器订阅 auth / BYOK;日志屏蔽 key
Qoder5 模式 + 8 层设置优先级hook deny 覆盖 bypass(“unbypassable”)OIDC token 交换、::add-mask::、参数脱敏
Amp默认不再审批(Neo 后);Plugin 权限引擎Enterprise MCP registry 不可达=fail-closedamp.ai.ask() 分类高风险 git最底层密钥脱敏 [REDACTED],早于入线程
v0三层审批 + pending task 抽象系统级无条件拒绝列表执行前代码分析NEXT_PUBLIC_ 静态分析自动重构
ZedAgent Profile 三档 + 逐次审批HARDCODED_SECURITY_RULES 任何设置不可覆盖
Hermesapprovals.mode 三态(manual/smart/off)UNRECOVERABLE_BLOCKLIST 任何机制不可绕过smart 模式辅助 LLM 风险评估MCP 凭证环境隔离;contextvars 防竞态泄露
QwenPaw五层安全栈 + approval_level 四态File Guard 保护 ~/.qwenpaw.secret/Skill Scanner 静态签名secret_store.py 加密存 provider/MCP 凭证
AutoGPTCommandPermissionManager 分层 + 批准泛化.env 加载,缺失快速失败
deepagentsFilesystemPermission + interrupt 模式grep(path=None) 无条件中断无 vault,仅环境变量(THREAT_MODEL 承认 gap)
LangGraphinterrupt() 原语 + Server 端授权回调服务端 Auth 类(非图库本身)
OpenAI Agents SDKneeds_approval + run 级 interruptionsGuardrail tripwire 中止 runInput/Output/Tool guardrails极少内建;警告 RunState 序列化会嵌密钥
Pydantic AIApprovalRequired/CallDeferred 冒泡第三方 pydantic-ai-shields_ssrf.py 防护;无自建 vault
Google ADKrequest_confirmation 中断 invocation完整 auth/:CredentialManager/token 交换/刷新
Agno@approval(required 阻塞 / audit 非阻塞)+ 三态 HITLguardrail 同步先跑全过才放行PromptInjection/PII/Moderation guardrails无 store,env/参数传 key
Lettarequires_approval tool rule + 工具规则闸门valid_tools 白名单越界即拒SandboxCredentialsService webhook 拉凭证
CAMELLLMGuardRuntime 每工具 LLM 打风险分guard ChatAgent 1-3 分量表,>阈值拒env 变量;unsafe_mode 默认 False
DeerFlowGuardrailMiddleware + Clarification 审批fail_closed 默认 True可插拔 GuardrailProvider(OAP)secret_context.py;Claude OAuth token
CrewAIbefore_tool_call hook 阻断Fernet 加密 OAuth token 落盘(企业登录)
browser-use无审批门,靠域名 gatingSecurityWatchdog 拦导航sensitive_data 占位符 + <secret> 标签、URL 域匹配才注入
UI-TARS核心 loop 无强制门,靠 PAUSE/call_userOS accessibility/录屏权限硬门env/config;secretlint 防提交
Agent Zero无 per-tool 门,靠 Docker + intervention别名 §§secret(KEY),LLM 永不见明文 + 流式遮蔽
Open InterpreterCodex 底座:sandbox_mode × approval_policyfail-closed 无沙箱不裸跑keyring/secrets crate;memories 脱敏
Plandexautonomy 五档 + apply 流四道确认BYO-key 仅内存、流结束即擦除
GPT-Pilot命令/git 逐次 yes-no 确认INPUT_REQUIRED 交人填写;供应链事件(潜伏 10 月)
aider交互式 confirm_ask--yes 全绕过纯环境/dotenv;scrub_sensitive_info 脱敏日志
smolagents无交互门,靠 trust_remote_code opt-in反序列化 AGENT_REGISTRY 白名单无集中存储,构造函数传 token
Comate仅 MCP 工具默认审批,内置工具不审MCP 密钥明文存 .comate/mcp.json
Trae无任何审批门,LLM 调用即执行明文 api_key,show-config 遮蔽前后 4 位
MetaGPT无门,仅 max_react_loop 失控阀Terminal 2 条子串黑名单(非安全)明文 YAML,无 keyring/vault
OpenManus无门,AskHuman 是自愿问询_safe_resolve_path..明文 TOML(VNC 默认 123456
AutoGenapproval_func 可选,默认全自动通过无密钥层,provider client 自理
Semantic Kernel无内建 HITL,terminate 标志 DIY无 vault,构造函数/Pydantic Settings
GPT-Researcher无工具门(威胁模型 by design);仅计划评审环境变量;MCP 配置不写 os.environ 防污染
Claude-Flow审批门是 Claude Code 的,Ruflo 只生成规则生成 deny Read(./.env*)/rm -rf /aidefence 扫描(非门)encryption/vault.ts + Ed25519 签名
CodeGeeX逐工具人工审批 Accept/RejectRSA 包裹 AES 密钥交换;VS Code SecretStorage
AutoClaw自进化 + 飞书动作审批卡片危险脚本智能拦截(无细节)内置模型免 key;未披露
Anthropic 多智能体仅只读工具限制 + 内容安全指令未披露
SWE-agent无交互门,静态 ToolFilter 黑名单SecretStr 防 repr 泄露;线程轮转多 key
Replit AgentPlan Mode 门 + dev/prod DB 隔离Package Firewall 安装时拦恶意包混合扫描(确定性+LLM)每部署独立生产库
Augmentallow/deny/ask-user DSL,--print 自动拒系统级 immutable settings 顶层优先Secrets Manager(未完整抓);session token

三、分组讨论

3.1 规则引擎流:Claude Code 定义了方言,一群人在讲

{permission, pattern, action: allow|ask|deny} + deny > ask > allow + Bash(git *) 语法,是这一维度事实上的行业标准,源头是 Claude Code。血缘最直白的是国产/开源 CLI:Qwen Code 的规则语法”与 Claude Code 一致”、ssrfGuard 注释直写”Aligned with Claude Code’s ssrfGuard.ts behavior”;opencodeMiMo-CodeKilo Code 三家共用几乎同构的 Ruleset + Deferred + reply(once|always|reject) 实现(opencode 是这条线最干净的 224 行参考实现,MiMo/Kilo 是其变体,各自加了 FORCED_ASK/ConfigProtection 这类本地补丁)。Kimi Code 把它推到极致——一条 19 步的策略链,把 plan 模式、swarm 排他、敏感文件、git 目录全塞进同一个”第一个非 undefined 结果生效”的评估序列。

值得单独点名的是 AgentScope:它有一套独立的 PermissionEngine(5 种 PermissionMode),本身就是完整 Claude-Code 式引擎;而它作为 QwenPaw 的底座,QwenPaw 的做法是把 AgentScope 的 mode 设成 BYPASS关掉原生引擎、换上自己的五层 Gate/Governance 系统——这是”底座提供机制、上层替换策略”的典型案例,也解释了为什么 QwenPaw 的安全栈看起来和 AgentScope 完全不同。

在规则引擎之上,几家把作用域与克隆仓库注入当作一等威胁来防:Kiro 把 workspace 权限存在仓库之外~/.kiro/workspace-roots/<hash>/)按用户隔离,“克隆的恶意仓库无法注入权限规则”;Junie 项目级 hooks 默认被忽略只信用户级;Kilo CodeConfigProtection 让编辑 config 文件强制 ask 且禁 always。Roo Code 则在自动审批里额外加了两个用量上限(次数 allowedMaxRequests + 成本 allowedMaxCost),超限即便在自动会话中途也重新问人——这是别家少见的”自动审批也有预算”设计。

3.2 LLM 介导的动态审批:2025–2026 的分水岭

静态白名单挡不住”模型能拼任意一次性脚本”的现实(Amp 干脆据此论证 Neo 之后默认不再审批,因为对 rm -rf 做正则只给”虚假的安全感”)。于是一批 harness 转向让 LLM 给 LLM 把关:

  • CodexGuardian 是最完整的:独立审查会话、严格 JSON 判定、超时/畸形一律 fail-closed、带熔断器防轰炸、带逐字存档的 policy.md 风险分类法。
  • Gemini CLIConSeca 走得更前——在主 agent 行动之前,让一个 LLM 为本次 prompt 涉及的每个工具生成一份最小权限 ACL(生成式 ACL),有生产遥测证明它真在门控。
  • Claude CodeAuto-mode 是两阶段分类器,且设计上对推理内容盲(只看用户消息 + 工具调用,剥离 assistant 文本和工具输出),专防注入到工具结果里的社工攻击;配合独立的服务端 prompt-injection 输入探测器。
  • CursorAuto-review 跑在与父 agent 同一 RPC 流内,把某些企业客户 40% 的中断率压到 7%。
  • FactoryDroid Shield 2.0 最有工程巧思:两个微调 LoRA 夹住确定性扫描器——Risk 模型补漏报、Downgrade 模型清误报,且 Downgrade 架构上看不到真实密钥值(进上下文前已 mask),把数据最小化植入模型输入层。
  • CAMELLLMGuardRuntime 是最朴素的同类:一个 guard ChatAgent 按 1-3 分量表给”函数名+描述+实参”打分,超阈值拒执行——把这套思路做成了可复用的 runtime wrapper。
  • 轻量版还有 goose 的 SmartApprove(让同一 LLM 分类只读性并自动放行)、Hermes 的 smart 模式、Junie 的 Brave-Auto 分类器、Devin 的 AI Guardrails(独立筛查层,门控用户→agent 消息通道,可 kill_session)。

3.3 档位模型与硬地板:把旋钮和地板分开

Factory(Autonomy Level 四档)和 Plandex(none→full 五档)代表”一个旋钮统摄一组布尔开关”的思路,goose 的 GooseMode、Warp 的 execution profile 同理。关键洞见是这些档位不是安全边界——Kiro 说得最直白:“Supervised mode is a code review workflow, not a security control”,两档授予的底层能力完全相同,只差何时展示 diff。

真正的安全边界是硬地板HermesUNRECOVERABLE_BLOCKLIST(比 YOLO 更底层,--yolo/approvals.mode:off/“always allow” 都绕不过)、ZedHARDCODED_SECURITY_RULES(注释明写”任何设置无法覆盖”)、Factory 的 blocklist(--skip-permissions-unsafe 也拦)、Qoder 的 hook-deny 覆盖 bypass(文档称”unbypassable interception”)、v0 的系统级拒绝列表。这些都在解析层做了反混淆(引号拼接 git pu""shbash -c、路径规范化),因为不这么做正则黑名单一戳就破。Claude Code 更进一步,在沙箱里硬编码了针对具名 CVE(裸 git 仓库逃逸 #29316)的防御和事后清理。

3.4 框架层 HITL 原语:SDK 只给抽象,不给策略

Python agent 框架普遍不做策略引擎,只提供”暂停”原语:LangGraphinterrupt()(抛 GraphInterrupt、靠 checkpointer 恢复)是这条线的祖型,OpenAI Agents SDKneeds_approval + run 级 interruptionsGoogle ADKrequest_confirmation(中断 invocation)、Pydantic AIApprovalRequired/CallDeferred 冒泡、Agno@approval 装饰器(required 阻塞 / audit 非阻塞)、Lettarequires_approval tool rule 都是同一形状的变体。

其中 Pydantic AI 的独特点是把审批建在类型化工具 + deferred tool 之上——ToolDefinition.kind='unapproved',审批走 capability 的 handle_deferred_tool_calls 累积分发,DeferredToolResultsToolApproved/ToolDenied 回填,整套是强类型的。OpenAI Agents SDK 则把guardrail 和审批分成两层:Input/Output/Tool guardrail 的 tripwire 直接抛异常中止 run,审批是另一条 run 级路径(覆盖 handoff 和 agent-as-tool),并明确警告”别把密钥放进会被序列化的 RunContextWrapper.context”。Letta 把审批和它标志性的分层自编辑记忆咬合——requires_approval 是 tool rule 家族的一员,与 max_count_per_step 限频、valid_tools 白名单同层,被拒的调用用 create_tool_returns_for_denials 把理由作为 tool return 回灌,让 agent 自适应而非硬停。DeerFlow 的 GuardrailMiddleware(fail_closed 默认 True、可插拔 OAP provider、决策落审计)是这条线里最接近生产治理的。

一批更薄的:CrewAI 只有 before_tool_call hook 返回 False 阻断(且自己的 SecurityConfig docstring 把 auth/scoping/delegation 列为 *TODO*——罕见的自曝未实现);AutoGenapproval_func 默认 None = 全自动通过(构造时抛 UserWarning 提醒);Semantic Kernel 连 HITL 都没有,只有 terminate 标志让你 DIY,且 MCP sampling 默认自动通过仅打日志。这三家代表”框架给扩展点、安全责任外推给应用开发者”的一极。

3.5 GUI / computer-use 动作空间的特殊安全面

操作真实桌面/浏览器的 harness 有一套别人没有的门:UI-TARS 的第一道门是 OS 级权限(macOS accessibility 控制鼠标键盘 + screen recording 截屏),没这个 app 根本动不了系统;它核心 loop 无强制审批门,靠 PAUSE/call_user()/USER_STOPPED 这类人在环状态兜底,且 HEAD commit 本身就是把 MCP HTTP server 默认绑到 127.0.0.1 的安全修复。browser-use 则把安全压在域名 gatingSecurityWatchdog 拦导航到 about:blank)而非逐步确认,配一组 watchdog(popups 自动关 JS dialog、captcha 自动等)。这类”动作直接执行、无 HITL”的选择,本质是 GUI 任务里逐步确认不现实(一次任务几十上百个点击),只能退到边界隔离——也因此这两家的密钥方案(见 3.7)反而是全场最讲究的,因为动作空间越自动、密钥越不能让模型碰。

3.6 无审批门的一极:信任 LLM + 靠隔离,或干脆裸跑

光谱最右端是明确不设门的:Trae 全树 grep approval/permission/confirm 零命中,bash/编辑工具 LLM 一调即执行,Docker 是唯一 opt-in 边界;OpenManusAgent Zero(靠 Docker + intervention)、MetaGPT(设计上”非常薄”,唯一限制是 Terminal 2 条防挂 dev server 的子串黑名单)、SWE-agent(只有静态 ToolFilter 黑名单,无人在环)、GPT-ResearcherSECURITY.md 明写后端默认无鉴权 by design,MCP RCE 是 operator 责任、out of scope)都在这一极。GPT-Pilot 名义上有强门(命令/git 逐次 yes-no),但本维度真正的结论是供应链姿态:README [!CAUTION] 记录了一条伪装成 revert 的恶意 commit 潜伏约 10 个月(Shai-Hulud 类窃密蠕虫)——“项目不再维护 + 长期潜伏”本身就是安全结论。

3.7 密钥管理谱系:从明文到 HPKE 信封

密钥这一子维度的跨度比审批门更大:

  • 明文环境变量/配置(最多数):MetaGPT(明文 YAML)、Trae(明文 api_key)、OpenManus(明文 TOML,VNC 默认 123456)、smolagentsAgnoCAMELPydantic AIdeepagents(THREAT_MODEL 自己承认这是 gap)。
  • OS keychainClineCodeGeeX 用 VS Code SecretStorageGemini CLI(有 keychain 可用性遥测)、Qwen Code(keytar)、Codex / Open Interpreter(keyring crate)用系统密钥链。
  • 0600 加密/受限落盘MiMo-CodeKimi Code 都是 auth.json/credentials 0600 + 原子写(tmp→fsync→rename)+ CI 环境变量注入不落盘——几乎同款;CrewAI(Fernet 加密 OAuth token)、Claude-Flowencryption/vault.ts + Ed25519 签名)、QwenPawsecret_store.py 加密)。
  • 别名/占位符注入(LLM 永不见明文)——这是设计上最优雅的一类:Agent Zero§§secret(KEY) 别名 + StreamingSecretsFilter 流式遮蔽(模型想复述也被实时 mask 成 ***);browser-usesensitive_data 占位符 + <secret> 标签、按当前 URL 域匹配才注入真值、只对 input action 暴露、发往 LLM 时反向 redact(还内建 pyotp 现算 2FA);OpenHandsSecretRegistry(命令引用密钥名才注入)。
  • 端到端信封 / 从不落盘Warp 的 HPKE 混合加密信封(Tink,密文绑定 actor/name/type 作 AAD 防重放)+ 值不可取回 + 工作负载身份联邦(短期云令牌);Copilot BYOKPlandex BYO-key 都是API key 从不落盘(Copilot 每次由宿主重供,Plandex 仅内存、流结束即擦除)。
  • 最底层脱敏Amp[REDACTED:<type>] 在”系统最底层”生效,早于密钥进线程/缓存/发往 LLM;Factory 的 Droid Shield、aiderscrub_sensitive_info)、Kilo Code(gitleaks)、UI-TARS(secretlint 防提交)走同一思路。
  • 短期 token 无长期 keyAmazon Q(AWS SSO OIDC/PKCE)、Devincog_ 前缀 token + RBAC)。其中 Devin 的密钥类型 × 作用域体系最完整——4 类(Raw/Site Cookies/TOTP/KV)× 4 作用域(组织/个人/仓库/session),且”新增密钥只对之后创建的 session 生效、不追溯注入”。

四、最值得借鉴的设计

第一,别名/占位符密钥注入 —— Agent Zerobrowser-use 的共同答案。 让 LLM 只见 §§secret(KEY) / <secret>name</secret> 这样的别名,真实值在运行时才注入 shell/浏览器 input,且发回 LLM 的上下文里反向 redact、输出流里实时遮蔽。这从架构上消除了”模型把密钥复述进日志/发给攻击者”的整类风险,而不是靠事后脱敏碰运气。browser-use 更把它和”按当前 URL 域匹配才解密、只对特定 action 暴露”绑定,等于给每个密钥加了使用场景约束。Factory 的 Downgrade 模型”架构上看不到真实密钥值”是同一哲学在 ML 门控上的投影。理由:注入类攻击已被 Claude Code 红队证明”仅靠模型层防御无法修复”(被钓鱼员工读 ~/.aws/credentials 外发 24/25 成功),唯一可靠的解法是让密钥根本不进入模型可触及的表面

第二,“生成式最小权限 ACL + fail-closed 的 LLM 审查” —— Gemini CLI ConSeca 与 Codex Guardian 的组合范式。 静态白名单在”模型能拼任意脚本”面前失效(Amp 已论证),而 ConSeca 让 LLM 在行动前为本次 prompt 现写一份最小权限 ACL、Guardian 用独立审查会话做 JSON 判定并在超时/畸形时一律拒绝(fail-closed 是关键——DeerFlowOpen InterpreterAugment--print 自动拒都印证了这条默认应”关”不应”开”)。理由:它在”每步都问人”(不可用)与”啥都不问”(不安全)之间给出了可扩展的第三条路,且用一层专门的、对推理内容盲的分类器(Claude Code Auto-mode 的关键设计)挡住了注入攻击的主要入口。两者结合——生成式 ACL 收窄能力面 + fail-closed 审查兜底——是目前把”自主度”和”安全”同时拉高的最成熟工程答案。