Loading...
    • 开发者指南
    • API 参考
    • MCP
    • 资源
    • 发布说明
    Search...
    ⌘K

    第一步

    Claude 简介快速开始

    模型与定价

    模型概览选择模型Claude 4.5 的新功能迁移到 Claude 4.5模型弃用定价

    使用 Claude 构建

    功能概览使用 Messages API上下文窗口提示词最佳实践

    功能

    提示词缓存上下文编辑扩展思考流式消息批处理引用多语言支持Token 计数嵌入向量视觉PDF 支持Files API搜索结果Google Sheets 插件

    工具

    概述如何实现工具使用令牌高效的工具使用细粒度工具流式传输Bash 工具代码执行工具计算机使用工具文本编辑器工具Web fetch 工具网络搜索工具记忆工具

    代理技能

    概述在 API 中开始使用 Agent Skills技能创作最佳实践通过 API 使用 Agent Skills

    Agent SDK

    概览TypeScript SDKPython SDK

    指南

    流式输入处理权限会话管理托管 Agent SDK修改系统提示词SDK 中的 MCP自定义工具SDK 中的子代理SDK 中的斜杠命令SDK 中的代理技能跟踪成本和使用情况待办事项列表SDK 中的插件

    API 中的 MCP

    MCP 连接器远程 MCP 服务器

    Claude 在第三方平台上

    Amazon BedrockVertex AI

    提示词工程

    概述提示词生成器使用提示模板提示词改进器保持清晰和直接使用示例(多示例提示)让 Claude 思考(思维链)使用XML标签给Claude分配角色(系统提示)预填充 Claude 的响应链式复杂提示长文本技巧扩展思考技巧

    测试与评估

    定义成功标准开发测试用例使用评估工具减少延迟

    加强防护措施

    减少幻觉提高输出一致性缓解越狱handle-streaming-refusals减少提示词泄露保持Claude的角色特征

    管理和监控

    Admin API 概述使用量和成本 APIClaude Code 分析 API
    Console
    指南

    处理权限

    在 Claude Agent SDK 中控制工具使用和权限

    SDK 权限

    Claude Agent SDK 提供强大的权限控制功能,允许您管理 Claude 在应用程序中如何使用工具。

    本指南涵盖如何使用 canUseTool 回调、钩子和 settings.json 权限规则来实现权限系统。有关完整的 API 文档,请参阅 TypeScript SDK 参考。

    概述

    Claude Agent SDK 提供四种互补的方式来控制工具使用:

    1. 权限模式 - 影响所有工具的全局权限行为设置
    2. canUseTool 回调 - 用于其他规则未涵盖情况的运行时权限处理程序
    3. 钩子 - 通过自定义逻辑对每个工具执行进行细粒度控制
    4. 权限规则 (settings.json) - 具有集成 bash 命令解析的声明式允许/拒绝规则

    每种方法的用例:

    • 权限模式 - 设置整体权限行为(规划、自动接受编辑、绕过检查)
    • canUseTool - 对未涵盖情况的动态批准,提示用户获取权限
    • 钩子 - 对所有工具执行的程序化控制
    • 权限规则 - 具有智能 bash 命令解析的静态策略

    权限流程图

    %%{init: {"theme": "base", "themeVariables": {"edgeLabelBackground": "#F0F0EB", "lineColor": "#91918D"}, "flowchart": {"edgeLabelMarginX": 12, "edgeLabelMarginY": 8}}}%%
    flowchart TD
        Start([工具请求]) --> PreHook(PreToolUse 钩子)
    
        PreHook -->|  允许  | Execute(执行工具)
        PreHook -->|  拒绝  | Denied(已拒绝)
        PreHook -->|  询问  | Callback(canUseTool 回调)
        PreHook -->|  继续  | Deny(检查拒绝规则)
    
        Deny -->|  匹配  | Denied
        Deny -->|  无匹配  | Allow(检查允许规则)
    
        Allow -->|  匹配  | Execute
        Allow -->|  无匹配  | Ask(检查询问规则)
    
        Ask -->|  匹配  | Callback
        Ask -->|  无匹配  | Mode{权限模式?}
    
        Mode -->|  bypassPermissions  | Execute
        Mode -->|  其他模式  | Callback
    
        Callback -->|  允许  | Execute
        Callback -->|  拒绝  | Denied
    
        Denied --> DeniedResponse([反馈给代理])
    
        Execute --> PostHook(PostToolUse 钩子)
        PostHook --> Done([工具响应])
    
        style Start fill:#F0F0EB,stroke:#D9D8D5,color:#191919
    
        style Denied fill:#BF4D43,color:#fff
        style DeniedResponse fill:#BF4D43,color:#fff
        style Execute fill:#DAAF91,color:#191919
        style Done fill:#DAAF91,color:#191919
    
        classDef hookClass fill:#CC785C,color:#fff
        class PreHook,PostHook hookClass
    
        classDef ruleClass fill:#EBDBBC,color:#191919
        class Deny,Allow,Ask ruleClass
    
        classDef modeClass fill:#A8DAEF,color:#191919
        class Mode modeClass
    
        classDef callbackClass fill:#D4A27F,color:#191919
        class Callback callbackClass

    处理顺序: PreToolUse 钩子 → 拒绝规则 → 允许规则 → 询问规则 → 权限模式检查 → canUseTool 回调 → PostToolUse 钩子

    权限模式

    权限模式提供对 Claude 如何使用工具的全局控制。您可以在调用 query() 时设置权限模式,或在流式会话期间动态更改它。

    可用模式

    SDK 支持四种权限模式,每种都有不同的行为:

    模式描述工具行为
    default标准权限行为应用正常权限检查
    plan规划模式 - 无执行Claude 只能使用只读工具;在执行前呈现计划 (SDK 中当前不支持)
    acceptEdits自动接受文件编辑文件编辑和文件系统操作自动获得批准
    bypassPermissions绕过所有权限检查所有工具无需权限提示即可运行(谨慎使用)

    设置权限模式

    您可以通过两种方式设置权限模式:

    1. 初始配置

    在创建查询时设置模式:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    const result = await query({
      prompt: "帮我重构这段代码",
      options: {
        permissionMode: 'default'  // 标准权限模式
      }
    });

    2. 动态模式更改(仅流式)

    在流式会话期间更改模式:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    // 为流式输入创建异步生成器
    async function* streamInput() {
      yield { 
        type: 'user',
        message: { 
          role: 'user', 
          content: "让我们从默认权限开始" 
        }
      };
      
      // 稍后在对话中...
      yield {
        type: 'user',
        message: {
          role: 'user',
          content: "现在让我们加快开发速度"
        }
      };
    }
    
    const q = query({
      prompt: streamInput(),
      options: {
        permissionMode: 'default'  // 以默认模式开始
      }
    });
    
    // 动态更改模式
    await q.setPermissionMode('acceptEdits');
    
    // 处理消息
    for await (const message of q) {
      console.log(message);
    }

    特定模式行为

    接受编辑模式 (acceptEdits)

    在接受编辑模式下:

    • 所有文件编辑自动获得批准
    • 文件系统操作(mkdir、touch、rm 等)自动批准
    • 其他工具仍需要正常权限
    • 当您信任 Claude 的编辑时加快开发速度
    • 适用于快速原型制作和迭代

    自动批准的操作:

    • 文件编辑(Edit、Write 工具)
    • Bash 文件系统命令(mkdir、touch、rm、mv、cp)
    • 文件创建和删除

    绕过权限模式 (bypassPermissions)

    在绕过权限模式下:

    • 所有工具使用都自动获得批准
    • 不出现权限提示
    • 钩子仍然执行(仍可阻止操作)
    • 极其谨慎使用 - Claude 拥有完整系统访问权限
    • 仅建议在受控环境中使用

    权限流程中的模式优先级

    权限模式在权限流程的特定点进行评估:

    1. 钩子首先执行 - 可以允许、拒绝、询问或继续
    2. 检查拒绝规则 - 无论模式如何都阻止工具
    3. 检查允许规则 - 如果匹配则允许工具
    4. 检查询问规则 - 如果匹配则提示权限
    5. 评估权限模式:
      • bypassPermissions 模式 - 如果激活,允许所有剩余工具
      • 其他模式 - 延迟到 canUseTool 回调
    6. canUseTool 回调 - 处理剩余情况

    这意味着:

    • 钩子始终可以控制工具使用,即使在 bypassPermissions 模式下
    • 显式拒绝规则覆盖所有权限模式
    • 询问规则在权限模式之前评估
    • bypassPermissions 模式覆盖未匹配工具的 canUseTool 回调

    最佳实践

    1. 使用默认模式 进行受控执行和正常权限检查
    2. 使用 acceptEdits 模式 处理隔离文件或目录时
    3. 避免 bypassPermissions 在生产环境或有敏感数据的系统上
    4. 结合模式与钩子 进行细粒度控制
    5. 根据任务进度和信心动态切换模式

    模式进展示例:

    // 以默认模式开始进行受控执行
    permissionMode: 'default'
    
    // 切换到 acceptEdits 进行快速迭代
    await q.setPermissionMode('acceptEdits')

    canUseTool

    canUseTool 回调在调用 query 函数时作为选项传递。它接收工具名称和输入参数,必须返回一个决定 - 允许或拒绝。

    canUseTool 在 Claude Code 向用户显示权限提示时触发,例如钩子和权限规则不涵盖它且不在 acceptEdits 模式下。

    以下是一个完整示例,展示如何实现交互式工具批准:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    async function promptForToolApproval(toolName: string, input: any) {
      console.log("\n🔧 工具请求:");
      console.log(`   工具: ${toolName}`);
      
      // 显示工具参数
      if (input && Object.keys(input).length > 0) {
        console.log("   参数:");
        for (const [key, value] of Object.entries(input)) {
          let displayValue = value;
          if (typeof value === 'string' && value.length > 100) {
            displayValue = value.substring(0, 100) + "...";
          } else if (typeof value === 'object') {
            displayValue = JSON.stringify(value, null, 2);
          }
          console.log(`     ${key}: ${displayValue}`);
        }
      }
      
      // 获取用户批准(用您的 UI 逻辑替换)
      const approved = await getUserApproval();
      
      if (approved) {
        console.log("   ✅ 已批准\n");
        return {
          behavior: "allow",
          updatedInput: input
        };
      } else {
        console.log("   ❌ 已拒绝\n");
        return {
          behavior: "deny",
          message: "用户拒绝了此工具的权限"
        };
      }
    }
    
    // 使用权限回调
    const result = await query({
      prompt: "帮我分析这个代码库",
      options: {
        canUseTool: async (toolName, input) => {
          return promptForToolApproval(toolName, input);
        }
      }
    });

    相关资源

    • 钩子指南 - 了解如何实现钩子以对工具执行进行细粒度控制
    • 设置:权限规则 - 配置具有 bash 命令解析的声明式允许/拒绝规则
    • canUseTool
    © 2025 ANTHROPIC PBC

    Products

    • Claude
    • Claude Code
    • Max plan
    • Team plan
    • Enterprise plan
    • Download app
    • Pricing
    • Log in

    Features

    • Claude and Slack
    • Claude in Excel

    Models

    • Opus
    • Sonnet
    • Haiku

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Claude Developer Platform

    • Overview
    • Developer docs
    • Pricing
    • Amazon Bedrock
    • Google Cloud’s Vertex AI
    • Console login

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Help and security

    • Availability
    • Status
    • Support center

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy

    Products

    • Claude
    • Claude Code
    • Max plan
    • Team plan
    • Enterprise plan
    • Download app
    • Pricing
    • Log in

    Features

    • Claude and Slack
    • Claude in Excel

    Models

    • Opus
    • Sonnet
    • Haiku

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Claude Developer Platform

    • Overview
    • Developer docs
    • Pricing
    • Amazon Bedrock
    • Google Cloud’s Vertex AI
    • Console login

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Help and security

    • Availability
    • Status
    • Support center

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    © 2025 ANTHROPIC PBC