Tool Script Safety Guard 是面向 Tool / Skill / CodeExecutor 的可选执行前静态扫描器。
它对 Python / Bash 内容做策略判定,输出 allow / deny / needs_human_review。
包路径:
trpc_agent_sdk.safety— 实现本体trpc_agent_sdk.tools.safety— 官方 re-export
from trpc_agent_sdk.safety import PolicyConfig, SafetyScanner, ScanInput
policy = PolicyConfig.from_yaml("examples/tool_safety/tool_safety_policy.yaml")
# 或: policy = PolicyConfig.from_env() # 读取 TOOL_SAFETY_POLICY_PATH
scanner = SafetyScanner(policy=policy)
report = scanner.scan(ScanInput(script="rm -rf /", language="bash"))
assert report.decision.value == "deny"官方 opt-in(默认关闭,不破坏兼容):
BashTool(enable_safety_guard=True, safety_policy_path="...")
UnsafeLocalCodeExecutor(enable_safety_guard=True)作为 Tool Filter 接入:
from trpc_agent_sdk.tools.safety import ToolSafetyFilter, PolicyConfig
policy = PolicyConfig.from_yaml("examples/tool_safety/tool_safety_policy.yaml")
tool = BashTool(filters=[ToolSafetyFilter(policy=policy, audit_path="audit.jsonl")])| 规则 | 检测内容 |
|---|---|
| R001 危险文件 | 递归删除、凭据路径、系统目录、pathlib 链 |
| R002 网络外连 | 非白名单域名(curl/requests/httpx/Session/socket) |
| R003 进程命令 | subprocess/os.system(含 import 别名)、getattr、eval、base64|sh |
| R004 依赖安装 | pip/npm/apt 及 subprocess list 形态 |
| R005 资源滥用 | 无限循环、fork bomb、长 sleep、大写入 |
| R006 敏感泄漏 | 硬编码密钥、环境变量密钥 sink、凭据上传 |
通过 YAML 调整白名单域名、禁止路径、允许命令、决策阈值、block_on_review、
strict_command_allowlist,无需改代码。
ToolSafetyFilter— BaseFilter 前置钩子wrap_tool/safety_wrapper— 通用包装SafetyReviewedSkillRunner— Skill 路径SafetyGuardedCodeExecutor/safe_code_executor— CodeExecutor 路径scripts/tool_safety_check.py— CLI / CI(退出码 0/1/2)
每次决策可写 JSONL 审计,并在启用 OpenTelemetry 时设置:
tool.safety.decisiontool.safety.risk_leveltool.safety.rule_idtool.safety.scan_duration_mstool.safety.blocked
静态分析无法覆盖全部动态构造。请与沙箱隔离(ContainerCodeExecutor / 进程限制) 一起使用:本工具是第一道防线,沙箱是最后一道防线。