编写自定义策略
- 控制台
- CLI
- 前往 Admin → 策略编辑器,选择 新建策略,描述你希望防范的故障场景。
- 添加策略代码,然后在编辑器中测试预期匹配项和安全的非匹配项,解决所有验证错误。
- 保存草稿并选择 发布版本 以创建一个不可变版本。
-
前往 Admin → 执行,以 观察 模式将该版本部署到测试机器,并在 Observe → policy 下验证其决策,确认无误后再正式执行。

从精确的规则开始
以下策略仅在命令指向生产环境时才会拦截破坏性的 Kubernetes 命令。不属于该故障模式的情况均返回allow()。
allow()。
选择决策类型
为需要恢复的 Agent 撰写说明原因。解释检测到了什么,以及应该改为做什么。
策略对象
请在
fn 内部过滤工具。match.toolNames 不属于公开的自定义策略类型。
策略上下文
每个策略都会接收一个PolicyContext。
请将所有可选值视为真正可选。不同的 Agent 版本和事件类型并不一定提供相同的字段。
常用工具输入
Failproof AI 在支持的运行环境中对常用工具进行了标准化处理,因此策略通常可以使用统一的输入结构。
由于工具输入值的类型为
unknown,请使用防御性类型转换:
选择事件类型
事件可用性和拦截行为取决于 Agent 运行环境。在混合机群中依赖某个事件之前,请参阅 Agent 运行环境。
所有策略事件名称
所有策略事件名称
SessionStart、SessionEnd、UserPromptSubmit、PreToolUse、PermissionRequest、PermissionDenied、PostToolUse、PostToolUseFailure、Notification、SubagentStart、SubagentStop、TaskCreated、TaskCompleted、Stop、StopFailure、TeammateIdle、InstructionsLoaded、ConfigChange、CwdChanged、FileChanged、WorktreeCreate、WorktreeRemove、PreCompact、PostCompact、Elicitation、ElicitationResult、UserPromptExpansion、PostToolBatch 和 Setup。常见策略模式示例
阻止对受保护路径的写入
提供非阻断性指导
对会话完成进行门控
加载策略文件
约定文件
约定文件会自动加载:- 项目和用户策略目录均会被加载。
- 文件在各目录内按字母顺序加载。
- 文件名必须以
policies.js、policies.mjs或policies.ts结尾。 - 一个文件中支持多次调用
customPolicies.add()。 - 支持从本地模块进行相对导入。
- 项目策略可以提交到版本库,使相同规则随代码库一同传递。
显式文件
当验证或配置需要直接指定入口文件时,使用显式路径:验证和测试
验证过程会通过生产加载器执行模块,并确认其至少注册了一个策略。- 一个必须匹配并产生预期策略原因的操作。
- 一个临近但安全、必须返回
allow()的操作。 - 缺失或格式错误的工具字段。
- 不同的命令语法、路径、引号、大小写和空白字符。
- 子进程或网络依赖不可用的情况。
运行时行为
- 内置策略在自定义策略之前评估。
- 第一个
deny会停止后续的策略评估。 - 当没有策略拒绝事件时,多个
instruct结果可以合并。 - 策略函数有 10 秒的执行时限。
- 抛出的异常或超时会被记录日志并视为
allow()。 - 加载失败的约定文件会被跳过;其他自定义文件和内置策略继续执行。
- 顶层模块加载同样有 10 秒的时限。
- 云端观察模式会运行策略,但会记录非 allow 决策而不实际执行拦截。
fn 内限制工作量、捕获依赖故障,并有意识地决定故障时应 allow 还是 deny 操作。
API 导出
TypeScript 导出
PolicyContext、PolicyResult、CustomHook、PolicyDecision 和 PolicyFunction。
部署自定义策略
发布版本、以观察模式部署、验证决策,然后切换到强制执行模式。

