Loading...
    • 개발자 가이드
    • API 참조
    • MCP
    • 리소스
    • 릴리스 노트
    Search...
    ⌘K
    첫 단계
    Claude 소개빠른 시작
    모델 및 가격
    모델 개요모델 선택Claude 4.5의 새로운 기능Claude 4.5로 마이그레이션모델 지원 중단가격
    Claude로 구축
    기능 개요Messages API 사용컨텍스트 윈도우프롬프트 작성 모범 사례
    기능
    프롬프트 캐싱컨텍스트 편집확장 사고노력메시지 스트리밍배치 처리인용다국어 지원토큰 계산임베딩비전PDF 지원Files API검색 결과구조화된 출력
    도구
    개요도구 사용 구현 방법세분화된 도구 스트리밍Bash 도구코드 실행 도구프로그래밍 방식 도구 호출컴퓨터 사용 도구텍스트 편집기 도구웹 가져오기 도구웹 검색 도구메모리 도구도구 검색 도구
    에이전트 스킬
    개요빠른 시작모범 사례API와 함께 스킬 사용
    에이전트 SDK
    개요빠른 시작TypeScript SDKTypeScript V2 (미리보기)Python SDK마이그레이션 가이드
    스트리밍 입력권한 처리훅으로 실행 제어세션 관리파일 체크포인팅SDK의 구조화된 출력에이전트 SDK 호스팅AI 에이전트 안전하게 배포시스템 프롬프트 수정SDK의 MCP사용자 정의 도구SDK의 서브에이전트SDK의 슬래시 명령SDK의 에이전트 스킬비용 및 사용량 추적할 일 목록SDK의 플러그인
    API의 MCP
    MCP 커넥터원격 MCP 서버
    타사 플랫폼의 Claude
    Amazon BedrockMicrosoft FoundryVertex AI
    프롬프트 엔지니어링
    개요프롬프트 생성기프롬프트 템플릿 사용프롬프트 개선기명확하고 직접적으로예제 사용 (다중 샷 프롬프팅)Claude가 생각하도록 하기 (CoT)XML 태그 사용Claude에게 역할 부여 (시스템 프롬프트)Claude의 응답 미리 채우기복잡한 프롬프트 연결긴 컨텍스트 팁확장 사고 팁
    테스트 및 평가
    성공 기준 정의테스트 케이스 개발평가 도구 사용지연 시간 감소
    가드레일 강화
    환각 감소출력 일관성 증가탈옥 완화거부 스트리밍프롬프트 유출 감소Claude를 캐릭터로 유지
    관리 및 모니터링
    Admin API 개요사용량 및 비용 APIClaude Code Analytics API
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

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

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    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

    Learn

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

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

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

    권한 처리

    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 명령어 파싱을 포함한 정적 정책

    권한 흐름 다이어그램

    처리 순서: PreToolUse Hook → Deny Rules → Allow Rules → Ask Rules → Permission Mode Check → canUseTool Callback → PostToolUse Hook

    권한 모드

    권한 모드는 Claude가 도구를 사용하는 방식에 대한 전역 제어를 제공합니다. query()를 호출할 때 권한 모드를 설정하거나 스트리밍 세션 중에 동적으로 변경할 수 있습니다.

    사용 가능한 모드

    SDK는 각각 다른 동작을 가진 네 가지 권한 모드를 지원합니다:

    모드설명도구 동작
    default표준 권한 동작일반 권한 검사 적용
    plan계획 모드 - 실행 없음Claude는 읽기 전용 도구만 사용 가능; 실행 전에 계획 제시 (현재 SDK에서 지원되지 않음)
    acceptEdits자동 파일 편집 수락파일 편집 및 파일 시스템 작업이 자동으로 승인됨
    bypassPermissions모든 권한 검사 우회모든 도구가 권한 프롬프트 없이 실행됨 (주의해서 사용)

    권한 모드 설정

    권한 모드를 두 가지 방법으로 설정할 수 있습니다:

    1. 초기 구성

    쿼리를 생성할 때 모드를 설정합니다:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    const result = await query({
      prompt: "Help me refactor this code",
      options: {
        permissionMode: 'default'  // Standard permission mode
      }
    });

    2. 동적 모드 변경 (스트리밍만 해당)

    스트리밍 세션 중에 모드를 변경합니다:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    // Create an async generator for streaming input
    async function* streamInput() {
      yield { 
        type: 'user',
        message: { 
          role: 'user', 
          content: "Let's start with default permissions" 
        }
      };
      
      // Later in the conversation...
      yield {
        type: 'user',
        message: {
          role: 'user',
          content: "Now let's speed up development"
        }
      };
    }
    
    const q = query({
      prompt: streamInput(),
      options: {
        permissionMode: 'default'  // Start in default mode
      }
    });
    
    // Change mode dynamically
    await q.setPermissionMode('acceptEdits');
    
    // Process messages
    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. 동적으로 모드 전환 - 작업 진행 상황 및 신뢰도에 따라

    모드 진행의 예:

    // Start in default mode for controlled execution
    permissionMode: 'default'
    
    // Switch to acceptEdits for rapid iteration
    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🔧 Tool Request:");
      console.log(`   Tool: ${toolName}`);
      
      // Display tool parameters
      if (input && Object.keys(input).length > 0) {
        console.log("   Parameters:");
        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}`);
        }
      }
      
      // Get user approval (replace with your UI logic)
      const approved = await getUserApproval();
      
      if (approved) {
        console.log("   ✅ Approved\n");
        return {
          behavior: "allow",
          updatedInput: input
        };
      } else {
        console.log("   ❌ Denied\n");
        return {
          behavior: "deny",
          message: "User denied permission for this tool"
        };
      }
    }
    
    // Use the permission callback
    const result = await query({
      prompt: "Help me analyze this codebase",
      options: {
        canUseTool: async (toolName, input) => {
          return promptForToolApproval(toolName, input);
        }
      }
    });

    AskUserQuestion 도구 처리

    AskUserQuestion 도구를 사용하면 Claude가 대화 중에 사용자에게 명확히 하는 질문을 할 수 있습니다. 이 도구가 호출되면 canUseTool 콜백이 질문을 받고 사용자의 답변을 반환해야 합니다.

    입력 구조

    canUseTool이 toolName: "AskUserQuestion"으로 호출될 때 입력에는 다음이 포함됩니다:

    {
      questions: [
        {
          question: "Which database should we use?",
          header: "Database",
          options: [
            { label: "PostgreSQL", description: "Relational, ACID compliant" },
            { label: "MongoDB", description: "Document-based, flexible schema" }
          ],
          multiSelect: false
        },
        {
          question: "Which features should we enable?",
          header: "Features",
          options: [
            { label: "Authentication", description: "User login and sessions" },
            { label: "Logging", description: "Request and error logging" },
            { label: "Caching", description: "Redis-based response caching" }
          ],
          multiSelect: true
        }
      ]
    }

    답변 반환

    updatedInput.answers에서 질문 텍스트를 선택한 옵션 레이블에 매핑하는 레코드로 답변을 반환합니다:

    return {
      behavior: "allow",
      updatedInput: {
        questions: input.questions,  // Pass through original questions
        answers: {
          "Which database should we use?": "PostgreSQL",
          "Which features should we enable?": "Authentication, Caching"
        }
      }
    }

    다중 선택 답변은 쉼표로 구분된 문자열입니다 (예: "Authentication, Caching").

    관련 리소스

    • 훅 가이드 - 도구 실행에 대한 세밀한 제어를 위해 훅을 구현하는 방법 알아보기
    • 설정: 권한 규칙 - bash 명령어 파싱을 포함한 선언적 허용/거부 규칙 구성
    • canUseTool
    • AskUserQuestion 도구 처리