Skip to content

权限控制

SDK 提供多层权限机制,控制 Agent 的工具执行行为。

PermissionMode

4 种内置权限模式:

模式说明
默认'default'写入和执行类工具需要用户确认
自动编辑'autoEdit'文件编辑自动通过,命令执行仍需确认
YOLO'yolo'所有工具自动通过
计划模式'plan'只允许只读工具
ts
import { PermissionMode } from '@blade-ai/agent-sdk';

const session = await createSession({
  provider: { type: 'openai', apiKey: process.env.OPENAI_API_KEY! },
  model: 'gpt-4o',
  permissionMode: PermissionMode.AUTO_EDIT,
});

// 运行时切换
session.setPermissionMode(PermissionMode.YOLO);

WARNING

yolo 模式会跳过所有权限确认,仅建议在沙箱环境或完全信任的场景中使用。

自定义权限回调

通过 canUseTool 实现完全自定义的权限逻辑:

ts
import type { CanUseTool } from '@blade-ai/agent-sdk';

const canUseTool: CanUseTool = async (toolName, input, options) => {
  // options.toolKind: 'readonly' | 'write' | 'execute'
  // options.affectedPaths: string[]
  // options.signal: AbortSignal

  if (toolName === 'Bash' && String(input.command).includes('rm -rf')) {
    return { behavior: 'deny', message: '禁止执行危险的删除命令' };
  }

  if (options.toolKind === 'readonly') {
    return { behavior: 'allow' };
  }

  return { behavior: 'ask' };
};

const session = await createSession({
  provider: { type: 'openai', apiKey: process.env.OPENAI_API_KEY! },
  model: 'gpt-4o',
  canUseTool,
});

PermissionResult

ts
type PermissionResult =
  // 允许执行(可选修改输入)
  | { behavior: 'allow'; updatedInput?: Record<string, unknown>; updatedPermissions?: PermissionUpdate[] }
  // 拒绝执行
  | { behavior: 'deny'; message: string; interrupt?: boolean }
  // 交给内置权限系统决定
  | { behavior: 'ask' };

CanUseToolOptions

ts
interface CanUseToolOptions {
  signal: AbortSignal;
  toolKind: 'readonly' | 'write' | 'execute';
  affectedPaths: string[];
}

权限与沙箱的关系

权限控制「是否询问」,沙箱控制「能做什么」。两者独立工作,可以组合使用:

权限模式沙箱效果
default开启需要确认 + 受沙箱限制
autoEdit开启文件操作自动通过 + 受沙箱限制
yolo开启自动通过 + 受沙箱限制(推荐开发模式)
yolo关闭自动通过 + 无限制(危险)

详见 沙箱安全

Released under the MIT License.