6

权限系统

三级安全护栏 — 让 Agent 安全地工作

为什么权限系统如此重要?

想象一下,如果 Agent 没有任何权限限制会怎样: • 它可能会误删重要文件 • 它可能会执行危险的 Shell 命令 • 它可能会泄露敏感信息 • 它可能会在你不知情的情况下修改代码 权限系统就是 Agent 的「安全护栏」。它确保 Agent 在执行每个操作之前,都经过适当的检查。

三种权限模式

OpenHarness 提供三种权限模式,适用于不同场景: 🟢 默认模式(Default) • 读取操作自动通过(读文件、搜索等无害操作) • 写入操作需要用户确认(修改文件、执行命令等) • 适用于日常开发 🔵 规划模式(Plan) • 只允许读取操作 • 所有写入操作都被阻止 • 适用于大型重构前的代码探索阶段 🔴 全自动模式(Full Auto) • 所有操作自动通过 • 适用于沙箱环境或完全信任的场景 • ⚠️ 生产环境不建议使用
🛡️ 权限模拟器 — 试试切换不同模式

默认模式:读取操作自动通过,写入操作需要用户确认

📖读取文件
自动通过
🔍搜索文件
自动通过
📝写入新文件
需要确认
✏️编辑现有文件
需要确认
💻执行 Shell 命令
需要确认
🗑️删除文件
需要确认 ⚠️
📦安装依赖
需要确认
🚀Git push
需要确认 ⚠️
🌐搜索网页
自动通过
🤖启动子 Agent
需要确认

权限检查的流程

openharness/permissions/checker.py
1class PermissionChecker:
2 async def check(self, tool_name, params, mode):
3 # 第 1 步:检查工具是否在拒绝列表中
4 if tool_name in self.denied_tools:
5 return PermissionResult.DENIED
6
7 # 第 2 步:检查路径规则
8 if not self.check_path_rules(params):
9 return PermissionResult.DENIED
10
11 # 第 3 步:根据权限模式判断
12 if mode == "plan":
13 # 规划模式只允许只读操作
14 return ALLOW if is_read_only(tool_name) else DENIED
15
16 if mode == "full_auto":
17 return PermissionResult.ALLOW
18
19 # 默认模式:只读自动通过,写入需确认
20 if is_read_only(tool_name):
21 return PermissionResult.ALLOW
22 return PermissionResult.ASK_USER

每次工具执行前,都会经过权限检查:

细粒度控制

除了三种模式之外,OpenHarness 还支持更细粒度的权限控制: • 路径规则(Path Rules):可以禁止访问特定目录,比如 /etc/* • 命令拒绝列表(Denied Commands):禁止执行特定危险命令 • 工具拒绝/允许列表:控制哪些工具可用 这些规则可以在配置文件中设置,给 Agent 划定精确的安全边界。
📌 关键要点
权限检查发生在每次工具执行之前
权限系统不是事后审计,而是事前检查。在 Agent Loop 的每一次工具调用中,Harness 都会先通过 PermissionChecker 检查,只有通过了才会真正执行工具。这确保了安全性是内建的,而不是附加的。
🧠 检验理解
在默认权限模式下,Agent 执行 Read(读取文件)操作时会发生什么?
🧠 检验理解
什么场景最适合使用「规划模式」?