§13 权限与沙箱:给代理划好边界
先给结论:用 FilesystemPermission 声明"能读哪、能写哪"。用沙箱隔离代码执行。边界在工具层强制。
DeepAgents 的安全哲学很明确:信任 LLM,但在工具/沙箱层强制边界。 靠"请你别删重要文件"这种提示词设防,没用。
文件权限
from deepagents import create_deep_agent, FilesystemPermission
agent = create_deep_agent(
model="...",
permissions=[
FilesystemPermission(operations=["write"], paths=["/policies/**"], mode="deny"),
FilesystemPermission(operations=["read", "write"], paths=["/workspace/**"], mode="allow"),
],
)
规则是首匹配生效。没匹配上的,默认允许。 模式:allow 放行,deny 拒绝。操作:read / write。
沙箱:代码执行的隔离舱
execute 跑 shell,只在沙箱后端开。 沙箱把代码执行关进隔离环境,不碰你本机。
支持的后端:Daytona、Modal、Runloop、LangSmith、AgentCore。
agent = create_deep_agent(
model="...",
backend=LocalShellBackend(root_dir="./workspace", virtual_mode=True),
)
virtual_mode=True 限制路径,本地开发更安全。
标叔的经验:一个真实项目把
generate_image工具内部写成轮询 180 秒。结果 Agent 被冻住 180 秒,啥也干不了。长任务别在工具里轮询。要么直接await,要么用 AsyncSubAgent。详见 §19。
标叔的结论:安全不是一句"请注意"。是声明式规则 + 隔离执行环境。两层都要有。
注意:
permissions对沙箱后端不生效。沙箱要用后端自己的策略钩子(如PolicyWrapper)来限制。
Part 2 结束。下一 part 进实战。