深度解析:AGT 5.0 无状态、确定性、默认拒绝的策略决策运行时)
Agent Control SpecificationACS深度解析AGT 5.0 无状态、确定性、默认拒绝的策略决策运行时【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkitAgent Control SpecificationACS是 AI Agent Governance ToolkitAGT在 5.0 版本引入的策略层一个无状态stateless、确定性deterministic、默认拒绝fail-closed的策略决策运行时。宿主host在代理循环的八处干预点intervention point提交完整快照与策略清单ACS 返回标准化裁决verdict由宿主执行。本文以仓库中的 docs/packages/agent-control-specification.md 为主体骨架结合 policy-engine/README.md、规范原文 policy-engine/spec/SPECIFICATION.md 以及各语言 SDK 源码完整讲解其干预点模型、裁决语义、Manifest 结构、信息流控制、遥测与各 SDK 接入方式读完你可以在自己的 Python / Node / .NET / Rust 宿主中接入 ACS实现“一次定义、处处执行”的代理安全治理。什么是 ACS一段可移植的生命周期策略契约ACS 是 AGT 的策略决策点Policy Decision Point, PDP。与把策略散落在 system prompt、框架钩子和应用代码中的做法不同ACS 用单一策略产物覆盖完整代理循环Input - Model - Tool Call - Tool Result - Output宿主是策略执行点Policy Enforcement Point, PEP它在每个干预点组装完整 JSON 快照并调用 ACSACS 通过纯逻辑的 Rust 核心评估绑定策略与可选注解annotation返回归一化裁决宿主负责执行裁决允许、拒绝、升级、替换策略目标。仓库 policy-engine/README.md 用一句话概括了设计目标Define once. Enforce everywhere.需要注意ACS 已作为 AGT 5.0 策略层被 vendored 到仓库的policy-engine/目录中且处于 Public Preview 状态agent_control_specification_version当前为0.4.0-alpha.1API 与 Manifest 细节在 GA 前可能变化。干预点模型代理循环上的八个闸门ACS 在代理循环的八个点评估策略干预点宿主调用时机通常的策略目标agent_startupAgent 会话开始前Agent 元数据能力、模型、注册工具input用户或系统输入组装完成后用户输入 / 请求载荷pre_model_call模型收到提示或请求前模型请求消息、上下文、工具定义post_model_call模型返回响应后模型响应pre_tool_call工具调用执行前工具参数post_tool_call工具结果可用后工具结果output最终输出返回或发布前最终输出agent_shutdownAgent 会话关闭前Agent 元数据或完整快照每次调用都必须携带该干预点的完整快照ACS 不依赖任何保留的运行时状态——这是无状态性质的基础。pre_tool_call与post_tool_call是仅有的两个工具干预点也是仅有的允许tool_name_from字段的位置见 policy-engine/README.md。干预点快照的规范形状AGT 为宿主 SDK 与内置 Rego/Cedar 库固定了快照 JSON 形状见 policy-engine/spec/agt/AGT-SNAPSHOT-1.0.md。每个快照必须携带公共信封common envelope{ envelope: { agent: { id: string, version: string, name: string }, session: { id: string, started_at: ISO-8601 UTC }, intervention_point: agent_startup|input|...|agent_shutdown, timestamp: ISO-8601 UTC, budgets: { tool_call_count: 0, token_count: 0, elapsed_seconds: 0.0, cost_usd: 0.0 }, trace: { trace_id: string, span_id: string }, tenant: { id: string, name: string } } }其中envelope.budgets是宿主在本次评估开始时记录的计数器值引擎内只读宿主在post_*钩子之后自行递增。干预点专属字段是封闭集合如pre_tool_call使用tool_call.name/args/id/content_hashpost_tool_call增加tool_result.value/error/duration_msAGT 宿主必须精确输出这些字段。该文档还规定快照对象键必须按字典序输出浮点遵循 ECMA-262 序列化——这正是后面动作身份action identitySHA-256 摘要的规范基础。三大核心性质Stateless / Deterministic / Fail-closed性质运行时契约Stateless无状态运行时不保留会影响后续裁决的可变状态宿主每次调用都提供完整快照。仅允许单次调用内、随调用栈传递的状态进程级/模块级注册表若影响裁决则被禁止。Deterministic确定性相同的 Manifest、快照、模式与 dispatcher 输出必然产生相同的裁决与相同的变换后策略目标。Fail-closed默认拒绝任何运行时错误都返回deny使用保留的runtime_error:原因码且绝不应用 transform。规范 policy-engine/spec/SPECIFICATION.md 第 1.1 节进一步强调干预点评估本身不执行任何输入输出——网络请求、分类器/裁判执行、策略引擎执行、模型调用、工具调用、流组装与并行调度都属于宿主运行时与宿主通过同步 dispatcher 接口交换类型化值。这也意味着运行时会信任宿主提供的快照快照组装必须属于宿主的可信计算基TCB。裁决类型Verdict裁决含义allow宿主可以继续执行策略目标不修改。warn宿主可以继续同时记录或暴露警告。在运行时层面归一化为allow并在warnings[]追加一条。deny宿主必须阻止该动作若携带approval块则为“可提升的 deny”liftable deny需走审批路径。escalate宿主必须将动作路由到审批后端若没有可用审批后端则默认拒绝。在引擎层面归一化为携带approval块的deny。transform宿主收到变换后的策略目标如脱敏后的输出并替换原目标执行。裁决可携带可选evidence字段离线可验证证据内容寻址的artefact与verification_pointers以及result_labels信息流标签原样返回给宿主并传播进遥测。AGT 变体用transform取代上游的 effects 语义这一点与上游 ACS 的分歧在 policy-engine/README.md 的 “Divergences from upstream ACS” 表中明确列出移除 effects、裁决与遥测携带 evidence、内置cedar策略类型、Manifest 顶层增加approval段、Manifest 解析由 AGT 预解析。动作身份审计的可验证锚点每次成功评估运行时都会推导两个动作身份均编码为sha256:加小写十六进制字节input_identity策略评估所依据的规范策略输入 JSON的 SHA-256 摘要enforced_identity对策略目标应用transform路径后的规范策略输入摘要。两者覆盖干预点、策略目标、完整快照、注解与投影工具数据除transform外两者相等。审批路径绑定enforced_identity确保审批人同意的是将要执行的动作从机制上封堵 TOCTOUtime-of-check-to-time-of-use间隙。策略类型Policy types策略类型运行时行为rego启用opafeature 且 OPA 可用时预编译为RegoPolicyInvocation并通过 OPA dispatcher 执行。cedar启用cedarfeature 时走内置 Cedar 策略路径Cedar Rust crate。test固定测试替身行为仅用于运行时与一致性测试非生产引擎。custom通过必填的adapter字符串调用宿主 dispatcher是接入任意后端的扩展点。rego与cedar是仅有的两个带内置运行时执行路径的类型rego策略必须在策略定义或绑定上提供query。策略绑定通过policy.id选择策略绑定可以附加query与宿主自定义字段绑定命名了policies中不存在的策略会以runtime_error:manifest_invalid默认拒绝。Manifest 结构声明一次处处执行Manifest 是单个 YAML 或 JSON 文档Schema 拒绝未知顶层属性。核心块如下块含义agent_control_specification_version非空版本字符串当前为0.4.0-alpha.1。metadata自由格式元数据运行时不解释。extends有序父 Manifest 路径或 HTTPS URL 列表AGT 宿主提交解析后的 Manifest。policies命名策略定义rego/cedar/test/custom至少一条。intervention_points以八个干预点名称作为键的封闭映射每个条目绑定一条策略至少一个条目。tools投影工具元数据目录条目可含clearance、security_labels及任意宿主定义字段。annotators命名注解声明类型为classifier、llm或endpoint。approval升级后端escalation backend配置属于 AGT。干预点条目字段policy_target必填快照路径选择被评估的值、policy_target_kind可选标签复制进策略输入、annotations按点选择注解器及其from路径、policy绑定id、可选query与宿主适配器字段、tool_name_from仅工具干预点。完整 Manifest 示例来自 policy-engine/README.md 的最小示例pre_tool_call绑定 Rego 策略agent_control_specification_version: 0.4.0-alpha.1 metadata: name: email-agent policies: email_policy: type: rego bundle: ./policy query: data.email_agent.verdict intervention_points: pre_tool_call: policy_target: $.tool_call.args policy_target_kind: tool_args tool_name_from: $.tool_call.name policy: id: email_policy tools: send_email: type: Tool id: send_email clearance: internal路径语法与取值根Manifest 中所有路径使用统一语法.name选择对象成员[n]选择零基数组元素不得为负[name]选择名称含点或方括号的成员读取时不进行类型强制转换。允许的根由字段类型限定字段允许的根policy_target$snap、$、$.nametool_name_from$snap、$、$.nameannotationfrom$pi不含$pi.annotations、$target、$tool、$snap、$、$.nametransformpath$target$snap是当前干预点的原始宿主快照$pi是规范策略输入$target是$pi.policy_target.value$tool是投影工具无工具时为null。必填路径解析失败会以runtime_error:path_missing默认拒绝路径段遇到不兼容 JSON 类型会以runtime_error:path_type_mismatch默认拒绝越权使用根则以runtime_error:manifest_invalid拒绝。规范策略输入Policy Input运行时为每次评估构建一个恰好五个成员的规范策略输入对象{ intervention_point: pre_tool_call, policy_target: { kind: tool_args, path: $snap.tool_call.args, value: {} }, snapshot: {}, annotations: {}, tool: null }annotations在初步形式preliminary form中为空对象最终形式final form中按注解器名放置输出。策略输入不得包含request、resource或tools成员。需要稳定字符串形式时运行时在每个层级按成员名排序、保留数组顺序——这是任何哈希、缓存键或审计记录的规范基础。评估顺序九步流水线规范 policy-engine/spec/SPECIFICATION.md 第 6 节规定了严格顺序任一步失败即产出带对应保留原因码的deny查找命名干预点的配置未知名称 →runtime_error:intervention_point_unknown解析policy_target得到策略目标值工具干预点解析tool_name_from并从目录投影工具非工具点为null以空 annotations 构建初步策略输入按注解器名升序字典序收集注解构建最终策略输入注解输出置于annotations下解析绑定策略、准备类型化调用并调用策略 dispatcher按第 13 节将 dispatcher 输出归一化为裁决校验 transformtransform决策且模式为enforce时应用到策略目标并返回变换后目标。注解收集先于策略 dispatcher 调用完成transform 处理在裁决归一化之后执行。AGT 扩展approval与limits段AGT Manifest 是 ACS Manifest 的严格超集额外拥有两个顶层段见 policy-engine/spec/agt/AGT-MANIFEST-1.0.md。approval段声明如何解析可提升的deny规范第 24 节字段类型含义default_resolverstring绑定未命名 resolver 时宿主咨询的解析器名称。timeout_secondsinteger超时前的最大等待时间。on_timeoutstring超时无决策时应用deny/allow/suspend之一。fatigue_thresholdintegerfatigue_window_seconds内每个 agent 审批的软上限。fatigue_window_secondsinteger疲劳计数累积的时间窗口。resolversobjectresolver 名到不透明 resolver 描述符含判别字段type的映射。运行时只校验approval形状并默认拒绝非法值resolver 名到具体审批机制的解析是宿主职责。当可提升deny返回且无 resolver 匹配default_resolver时宿主层以host_error:approval_unresolved默认拒绝。limits段声明引擎资源限制对应规范第 15 节示例limits: max_snapshot_bytes: 1048576 # 1 MiB max_policy_input_bytes: 524288 # 512 KiB max_annotators_per_point: 16 max_annotator_output_bytes: 65536 max_extends_depth: 8 max_intervention_points_per_run: 256默认值与 ACS 参考默认值一致。AGT 还向tools条目添加content_hash工具实现源码字节的 SHA-256在pre_tool_call由内置content_hash.rego校验与mcp_origin{ server: url, tool: name }关联 MCP 来源。Manifest 组合与extends安全模型extends是父引用的有序数组引用可以是字符串路径、HTTPS URL或带url与可选integrity/sha256的对象。合并是加法式的重名定义必须完全一致或互不冲突冲突、引用环、文件缺失、URL 拉取失败或父子版本不一致都默认拒绝。URL 加载只允许 HTTPS、不携带环境凭据、有限超时/体积/重定向限制http及所有非 HTTPS scheme 默认拒绝指向 loopback、私有地址、链路本地、100.64.0.0/10共享地址空间、IPv6 unique-local/site-local 的主机一律默认拒绝防止命中169.254.169.254等云元数据端点。URL 条目带integrity必须使用sha256-base64带sha256必须是 64 位十六进制摘要两者不得同时出现。内存字符串解析的加载器无法解析extends构造强制运行时前必须拿到已合并的 Manifest否则默认拒绝。注解器Annotators与自定义 dispatcher顶层annotators条目是classifier、llm或endpoint类型的声明本身不做任何工作干预点通过在annotations中加入成员键为注解器名、值为非空from路径选择它。运行时按注解器名字典序升序调用宿主注解器 dispatcher输出只写入annotations.name不得覆盖snapshot、policy_target、tool等根成员。过大、畸形或含保留runtime_error:前缀reason的注解输出以runtime_error:annotation_failed默认拒绝超时以runtime_error:annotation_timeout默认拒绝。ACS 不定义内置分类器或裁判引擎——注解器执行永远是宿主提供的参考实现见 policy-engine/core/src/dispatchers/classifier.rs、policy-engine/core/src/dispatchers/llm.rs 与 policy-engine/core/src/dispatchers/endpoint.rs。默认llmdispatcher 可提供 OpenAI 兼容 chat completions、Azure OpenAI、Amazon Bedrock Converse、GeminigenerateContent、Ollama chat 的 provider 预设但必须将网络输入输出保持在纯决策逻辑之外以维持确定性provider 响应必须归一化为 JSON 注解建议含label与raw成员再进入策略执行。信息流控制IFC无状态的标签流模型ACS 将信息流控制实现为无状态标签流策略模型规范第 11 节宿主跟踪数据在代理循环中流动的来源并携带标签运行时在每次干预点调用 ACS 时拿到进入该汇点sink的数据标签运行时自身不检查、不存储标签状态、不跨调用传播污点。快照标签约定input.snapshot.ifc.source_labels必须是字符串数组缺失、非数组、空数组或未知标签默认拒绝除非宿主特定策略以其他方式证明更低敏感度工具汇点清关clearance在 Manifest 工具目录中声明clearance命名该汇点接受的最大敏感度security_labels描述汇点或能力投影到策略输入为input.tool.clearance与input.tool.security_labels内置 Rego 库agent_control_specification.lib.ifc定义默认格latticepublic internal confidential secret“no write down” 策略要求汇点清关支配每个来源标签标签不可比时默认拒绝策略应使用reason: ifc_clearance_violation与decision: deny。策略还可通过result_labels返回本次汇点产出数据的标签数组运行时原样返回、不做任何处理宿主负责将result_labels与汇点产出数据一起持久化并在后续基于该数据的评估中作为snapshot.ifc.source_labels提供从而在不持有状态的情况下保持跨轮次标签流正确。宿主不得为未实际执行的动作传播result_labels。遥测与审计内容脱敏的稳定元数据Rust 核心通过TelemetrySink发出结构化遥测。事件类型包括decision、annotator_dispatch、policy_evaluation、evaluation_timing、intervention_point.transformed、annotator_failed、policy_failedtransform 裁决时除decision外额外发出intervention_point.transformed。性能遥测模式模式Wire 值行为Off0无外部或阶段计时性能事件。External1注解器分发与策略评估成本事件。Full2External 事件加每次评估的计时细节。遥测默认内容脱敏事件只携带决策、原因码、错误类别、策略 ID、注解器名、模式、时长、evidence 工件与 evidence 指针键名等稳定字段绝不包含原始提示词、工具参数、模型输出、transform 值、注解载荷、evidence 指针 URL、密钥或个人数据。自由文本策略原因会被规约为常量policy_reason防止操作者编写的 reason 字符串经遥测泄露。内置 Sink 与 OpenTelemetry 导出每个 SDK 都自带可插拔遥测 sink宿主无需手写审计层。每次评估恰好发出一个decision事件各 SDK 收敛到同一 OpenTelemetry 契约meter 名agent_control_specification下的每决策计数器acs_intervention_{allow,deny,warn,escalate,transform}_total与直方图acs_intervention_duration_ms。会抛异常的 sink 会被捕获并吞掉——遥测永远不是承重组件。SDK安装方式OpenTelemetry sinkRustAgentControl::with_telemetry(Arcdyn TelemetrySink)内置InMemoryTelemetrySink、StdoutJsonTelemetrySink、MultiSinkagent_control_specification_otelcrate 的OtelTelemetrySinkPythontelemetry_sink参数内置InMemoryTelemetrySink、JsonStdoutTelemetrySink、MultiSinkOtelMetricsTelemetrySinkopentelemetry导入可选NodetelemetrySink同名内置三件套OtelMetricsTelemetrySinkopentelemetry/api导入可选.NETtelemetrySink同名内置三件套OtelMetricsTelemetrySink基于 BCLSystem.Diagnostics.MetricsACS 在 AGT 中的位置AGT 拥有 vendored 的 ACS 源码位于 policy-engine/语言 SDK 把宿主与适配器连接到该运行时Agent OS 适配器在保留框架集成行为的同时把策略决策路由到 ACS。集成跨越三个层次见 policy-engine/README.md层次在集成中的角色AGT 宿主适配器agent-os中的框架适配器拦截代理循环为每个干预点构建快照、调用策略层并执行返回的裁决。agt-policies桥Pythonagent_control_specification包在 AGT 宿主调用与 ACS 运行时之间中介并向宿主归一化裁决。ACS 原生运行时基于 Rust 核心、由sdk/python经 maturin 构建的 Python SDK执行确定性决策。policy-engine/目录布局core/ 为 Rust 运行时M2 起由agent_control_specification_core改名为agt_core_enginesdk/ 为 Rust / PythonPyO3/ Nodenapi/ .NETP/Invoke语言绑定policy/lib/ 为内置 Rego 与 Cedar 库integrations/ 为参考注解器、OTel 桥与 Rig 适配器spec/ 为规范文档与 JSON Schemagenerator/ 为acs-generateCLIexamples/ 为参考宿主实现bank_agent、lifecycle_rego、custom_dispatchers、manifest_extends、conformance_snapshots、coding_agent、ifc_agent等tests/ 为一致性、对等与形式化模型资产。构建与测试ACS Cargo workspace 嵌在 AGT 顶层 workspace 内cd policy-engine cargo build --workspace cargo test --workspace从仓库根目录也可用包名定向构建cargo build -p agt_core_engine、cargo test -p agt_core_engine。Python 宿主如何调用 ACSagent-control-specification是 ACS 的规范 Python SDK提供位于无状态引擎之外的宿主关注点详见 policy-engine/sdk/python/README.md通过AgentControl加载 Manifest通过SnapshotBuilder构建完整干预点快照通过HostSession提供同步宿主回调原生InterventionPointResult值覆盖allow、warn、deny、escalate、transform。pip install agent-control-specification发行版名agent-control-specification定义于 policy-engine/sdk/python/pyproject.toml由 vendored 源码经 maturin 构建发布流水线为 CPython 3.11 产出 ABI3 wheelLinux x86_64/ARM64、macOS Intel/Apple Silicon、Windows x86_64安装 wheel 无需 Rust其他平台回退到 sdist 本地编译。默认自动接入 OPA 策略 dispatcher可通过policy_dispatcher传入宿主策略逻辑。声明注解器的 Manifest 需要显式annotator_dispatcher除非用bundled-dispatchersCargo feature 从源码构建。运行时调用示例from agent_control_specification import AgentControl, HostSession control AgentControl.from_path(policies/manifest.yaml) session HostSession(control, agent_idmail-agent, session_idrun-1) result session.input(summarise the last thread) if not result.verdict.decision.permits: raise RuntimeError(result.verdict.reason)HostSession在一个无状态运行时之上持有单次会话的快照与预算计数器按干预点暴露一个方法decision.permits对allow、warn、escalate升级走审批路径为真。AgentControl.evaluate_intervention_point()委托给抽象运行时客户端AgentControl.run()强制input与outputAgentControl.protect_tool()/run_tool()强制pre_tool_call与post_tool_call。无状态适配器主流框架一键接入SDK 提供大量鸭子类型duck-typed无状态适配器且有意保持无状态——调用期环境数据用保留关键字agent_control_snapshot{...}传入并合并进快照guard_run()通用 agent/run 可调用对象run_model_call()/guard_model_call()pre_model_call/post_model_callguard_tool()/guard_mcp_tool()单工具包装器返回受控值guard_mcp_server()覆盖鸭子类型 MCP 工具提供者call_tool(...)/callTool(...)guard_litellm_proxy()/LiteLLMProxyMiddlewareASGI JSON LiteLLM/OpenAI 兼容代理pip install agent-control-specification[litellm-proxy]guard_foundry_agent()别名guard_azure_ai_agents()治理 Azure AI Foundry 托管 agent 的requires_action - submit_tool_outputs循环每个函数工具调用都经control.run_tool把关LangChainguard_langchain_runnable、guard_langchain_tool、OpenAI 客户端、OpenAI Agents Runner、Anthropic、AutoGen、CrewAI、Semantic Kernelguard_semantic_kernel_function/guard_semantic_kernel_filter等适配器。不支持的、可能绕过治理的方法抛出AdapterUnsupportedError而不是返回无守卫路径。例如guard_openai_agents_runner()中介run(...)并阻断run_sync(...)/run_streamed(...)。升级与审批语义在enforce模式下deny裁决抛出AgentControlBlockedescalate裁决咨询可选的审批 resolver实例级approval_resolver或调用级approval_resolver参数返回ApprovalResolution.allow(result.action_identity)、deny()或suspend(handle..., action_identity...)。suspend抛出携带不透明 handle 的AgentControlSuspended恢复由宿主负责无 resolver 时escalate默认拒绝。resolver 只对escalate且仅在enforce模式下被咨询deny永不咨询。mcp_approval_resolver(elicit)可将 MCP elicitation 回调适配为 resolver。v4 迁移agt migrate v4-to-v5agt-policies5.0.0a1见 agent-governance-python/agt-policies/README.md是独立的迁移包只做单向转换不再评估策略——v4 策略语言在仓库中仅存在于该包正是为了让 v4 项目有去处、运行时永远不必同时理解两种语言pip install agt-policies # 默认干跑仅列出遗留工件不改动项目 agt migrate v4-to-v5 . # 实际写入 agt migrate v4-to-v5 . --write工具遍历项目根按 v4 运行时曾经的求值方式解析文件夹层级写出扁平 ACS Manifest 与生成的 Rego bundle消费过的governance.yaml移到.governance.yaml.v4-backup而不是删除解析算法见 agent-governance-python/agt-policies/src/agt/cli/_migrate_resolution/AGT-RESOLUTION-1.0.md。--write-report MIGRATION.md记录变更。迁移宁可拒绝也不猜测动态表达式、仅宿主设置、非法模式、不支持的字段、已存在的输出文件都会以报错终止。安全不变量包括输出先用validate_manifest校验再原子写入正则/glob 用 OPA 的 Go RE2 引擎校验解析算法只存在于迁移路径、无运行时模块导入它。框架适配器不需要该包——agent_os.integrations自己构建快照并直接调用 ACS。SDK 矩阵与校验入口SDK原生绑定产物安装产物冒烟Rust直接 Rust crate 覆盖核心引擎以[patch.crates-io]路径将本地.crate产物加入临时 crate从临时宿主 crate 评估一个 ManifestPythonPyO3 扩展maturin 构建从artifacts/安装 wheel 到临时 venvNativeRuntimeClient.from_path评估一个 allow 与一个 denyNodenapi-rs addonnapi-rs/cli构建从artifacts/安装.tgz到临时项目AgentControl.fromPath评估 allow / deny 各一.NET基于核心共享库的 P/Invoke从artifacts/本地 nupkg 源还原AgentControl.FromPath评估 allow / deny 各一产物校验Artifact validationRust 核心暴露validate_acs_artifacts每个语言 SDK 都委托给该实现结果形状在 Rust/Python/Node/.NET 完全一致——valid加结构化诊断Manifest Schema、类型化 ACS 语义、OPA Rego 解析use agent_control_specification::validate_acs_artifacts; let result validate_acs_artifacts(manifest_yaml, rego_modules, None);Python 侧对应validate_manifest(text)完整 Manifest、validate_manifest_overlay(text)含extends的部分 Manifest解析无关检查与parse_manifest(text)先取运行时解析器的 YAML/JSON 值再做其他契约校验三者共用与运行时构建相同的受限serde_yaml实现。机器可读的 Manifest 契约位于 policy-engine/spec/schema/manifest.schema.json规范语义求值顺序、策略输入形状、裁决处理、transform 应用、默认拒绝行为以 policy-engine/spec/SPECIFICATION.md 为准。保留原因码与安全模型运行时失败产出deny且reason为保留标识符策略不得输出以runtime_error:或host_error:开头的原因。完整保留原因清单机器可读清单见 policy-engine/spec/reserved-reasons.json覆盖 Manifest 无效、未知干预点、路径缺失/类型不匹配、工具未知、注解失败/超时、策略调用失败/输出无效、transform 无效/越权、资源超限、extends解析环/合并冲突/路径穿越/治理块无效等场景host_error:*由 AGT 宿主层合成审批身份不匹配、审批 resolver 失败、流式不支持、transform 越权等拦截器不得发出。安全要点规范第 21 节与 policy-engine/docs/security-model.md默认拒绝是设计属性求值中任何错误都产生deny禁止任何 Manifest 级 fail-open 路径快照是 TCB运行时信任宿主快照快照组装必须来自可信源注解是不可信信号注解值必须当作数据处理注解器失败默认拒绝不能静默放行transform 限于策略目标transform 路径必须在$target内防止触及快照、投影工具或宿主状态审批绑定enforced_identitySDK 在执行前重新推导身份不匹配即默认拒绝封堵 TOCTOU遥测零敏感值只发射低基数元数据资源限制宿主应按第 15 节配置防恶意/畸形快照或注解输出耗尽资源dispatcher 以宿主信任运行其安全由宿主负责。生态与合作伙伴ACS 正被定位为代理护栏的开放标准仓库文档中收录了 CrewAI、Arize AI、Bigspin、HoneyHive、Monte Carlo、Geordie、Obsidian Security、Aviatrix、IBM、KPMG、Zscaler 等行业参与者的支持表态见 docs/packages/agent-control-specification.md 的 “Trusted by partners” 部分。注意一个历史命名Bigspin 引文中使用的 “AgentShield” 是 ACS 的旧名与agent_os.integrations.agentshield_adapter暴露的 Microsoft Agent Shield 集成agent-governance-python/agent-os/src/agent_os/integrations/agentshield_adapter.py是两回事。结语ACS 把“代理该被允许做什么”从散落的提示词与框架钩子中抽离成一份可移植、可版本化、可审计的策略契约并以无状态、确定性、默认拒绝的 Rust 核心保证决策可复现、失败即阻断。无论你是在 Python 中用AgentControl与框架适配器快速接入还是通过agt migrate v4-to-v5把 v4 项目整体迁移或是在 Rust/.NET/Node 中直接绑定原生核心都需要理解本文的八干预点模型、五类裁决、Manifest 结构、IFC 标签流与脱敏遥测契约——这些正是 ACS 作为 AGT 5.0 策略层的地基。由于 ACS 处于 Public Preview接入时请以 policy-engine/spec/SPECIFICATION.md 的当前版本为准并固定agent_control_specification_version。【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考