TypeScript
Claude Code TypeScript SDK로 맞춤형 AI 에이전트 구축하기
전제 조건
- Node.js 18+
설치
NPM에서 @anthropic-ai/claude-code
를 설치하세요:
TypeScript SDK 소스 코드를 보려면 NPM의 @anthropic-ai/claude-code
페이지를 방문하세요.
기본 사용법
TypeScript SDK를 통한 주요 인터페이스는 query
함수로, 메시지가 도착하는 대로 스트리밍하는 비동기 이터레이터를 반환합니다:
구성 옵션
인수 | 타입 | 설명 | 기본값 |
---|---|---|---|
abortController | AbortController | 작업 취소를 위한 중단 컨트롤러 | new AbortController() |
additionalDirectories | string[] | 세션에 포함할 추가 디렉토리 | undefined |
allowedTools | string[] | Claude가 사용할 수 있는 도구 목록 | 기본적으로 모든 도구 활성화 |
appendSystemPrompt | string | 기본 시스템 프롬프트에 추가할 텍스트 | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | 도구 사용을 위한 맞춤형 권한 함수 | undefined |
continue | boolean | 가장 최근 세션 계속하기 | false |
customSystemPrompt | string | 기본 시스템 프롬프트를 완전히 교체 | undefined |
cwd | string | 현재 작업 디렉토리 | process.cwd() |
disallowedTools | string[] | Claude가 사용할 수 없는 도구 목록 | undefined |
env | Dict<string> | 설정할 환경 변수 | undefined |
executable | 'bun' | 'deno' | 'node' | 사용할 JavaScript 런타임 | Node.js로 실행할 때 node , Bun으로 실행할 때 bun |
executableArgs | string[] | 실행 파일에 전달할 인수 | [] |
fallbackModel | string | 기본 모델이 실패할 때 사용할 모델 | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | 맞춤화를 위한 라이프사이클 훅 | undefined |
includePartialMessages | boolean | 메시지 스트림에 부분 스트리밍 이벤트 포함 | false |
maxThinkingTokens | number | Claude의 사고 과정을 위한 최대 토큰 | undefined |
maxTurns | number | 대화 턴의 최대 수 | undefined |
mcpServers | Record<string, McpServerConfig> | MCP 서버 구성 | undefined |
model | string | 사용할 Claude 모델 | CLI 구성의 기본값 사용 |
pathToClaudeCodeExecutable | string | Claude Code 실행 파일 경로 | @anthropic-ai/claude-code 와 함께 제공되는 실행 파일 |
permissionMode | PermissionMode | 세션의 권한 모드 | "default" (옵션: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | 재개할 세션 ID | undefined |
stderr | (data: string) => void | stderr 출력을 위한 콜백 | undefined |
strictMcpConfig | boolean | 엄격한 MCP 구성 검증 강제 | undefined |
부분 메시지 스트리밍
includePartialMessages
가 활성화되면, SDK는 Claude API의 원시 스트리밍 이벤트를 포함하는 stream_event
메시지를 방출합니다. 이를 통해 생성되는 동안 부분 콘텐츠에 액세스할 수 있어 실시간 UI 업데이트나 진행률 표시기를 구현하는 데 유용합니다.
각 stream_event
메시지에는 다음이 포함됩니다:
event
: API의 원시 스트리밍 이벤트session_id
: 현재 세션 식별자parent_tool_use_id
: 실행 중인 도구의 ID (해당하는 경우)uuid
: 이 이벤트의 고유 식별자
부분 메시지 스트리밍은 주로 스트리밍 응답에 대한 세밀한 제어가 필요한 고급 사용 사례에 유용합니다. 대부분의 애플리케이션에서는 기본 동작(완전한 메시지 대기)으로 충분합니다.
다중 턴 대화
다중 턴 대화의 경우 두 가지 옵션이 있습니다.
응답을 생성하고 재개하거나, 메시지 배열에 대한 비동기/제너레이터를 허용하는 스트리밍 입력 모드를 사용할 수 있습니다. 현재 스트리밍 입력 모드는 메시지를 통해 이미지를 첨부하는 유일한 방법입니다.
세션 관리로 재개
스트리밍 입력 모드
스트리밍 입력 모드를 사용하면 단일 문자열 대신 비동기 이터러블로 메시지를 제공할 수 있습니다. 이를 통해 다중 턴 대화, 이미지 첨부 및 동적 메시지 생성이 가능합니다:
이미지가 포함된 스트리밍 입력
스트리밍 입력 모드는 메시지를 통해 이미지를 첨부하는 유일한 방법입니다:
맞춤형 시스템 프롬프트
시스템 프롬프트는 에이전트의 역할, 전문성 및 동작을 정의합니다:
MCP 서버 통합
모델 컨텍스트 프로토콜(MCP)을 통해 에이전트에게 맞춤형 도구와 기능을 제공할 수 있습니다:
인프로세스 MCP 서버를 사용한 맞춤형 도구
SDK MCP 서버를 사용하면 별도의 프로세스나 네트워크 통신의 오버헤드 없이 애플리케이션 프로세스에서 직접 실행되는 맞춤형 도구를 만들 수 있으며, 타입 안전한 도구 실행을 제공합니다.
맞춤형 도구 생성
createSdkMcpServer
와 tool
헬퍼 함수를 사용하여 타입 안전한 맞춤형 도구를 정의하세요:
Zod를 사용한 타입 안전성
tool
헬퍼는 Zod 스키마에서 완전한 TypeScript 타입 추론을 제공합니다:
훅
훅을 사용하면 에이전트의 라이프사이클의 다양한 지점에서 맞춤형 콜백을 실행하여 Claude Code의 동작을 맞춤화하고 확장할 수 있습니다. bash 명령을 실행하는 CLI 훅과 달리 SDK 훅은 인프로세스에서 실행되는 JavaScript/TypeScript 함수입니다.
훅 정의
훅은 이벤트 타입별로 구성되며, 언제 실행될지 필터링하는 선택적 매처가 있습니다:
사용 가능한 훅 이벤트
- PreToolUse: 도구 실행 전에 실행됩니다. 도구를 차단하거나 피드백을 제공할 수 있습니다.
- PostToolUse: 성공적인 도구 실행 후에 실행됩니다.
- UserPromptSubmit: 사용자가 프롬프트를 제출할 때 실행됩니다.
- SessionStart: 세션이 시작될 때 실행됩니다.
- SessionEnd: 세션이 종료될 때 실행됩니다.
- Stop: Claude가 응답을 중지하려고 할 때 실행됩니다.
- SubagentStop: 서브에이전트가 중지하려고 할 때 실행됩니다.
- PreCompact: 대화 압축 전에 실행됩니다.
- Notification: 알림이 전송될 때 실행됩니다.
훅 입력 타입
각 훅은 이벤트를 기반으로 타입화된 입력을 받습니다:
훅 출력
훅은 실행 흐름을 제어하는 출력을 반환합니다:
실용적인 예제
로깅 및 모니터링
파일 작업 검증
코드 자동 포맷팅
프롬프트 향상
맞춤형 압축 지침
훅 실행 동작
- 병렬화: 일치하는 모든 훅이 병렬로 실행됩니다
- 타임아웃: 훅은 옵션의 중단 신호를 존중합니다
- 오류 처리: 훅 오류는 로깅되지만 실행을 중지하지 않습니다
- 매처: 정규식 패턴을 지원합니다 (예:
"Write|Edit"
)
canUseTool과 훅 결합
canUseTool
이 권한 제어를 제공하는 반면, 훅은 더 광범위한 라이프사이클 통합을 제공합니다:
canUseTool을 사용한 권한 제어
canUseTool
콜백은 도구 실행에 대한 세밀한 제어를 제공합니다. 각 도구 사용 전에 호출되며 도구 입력을 허용, 거부 또는 수정할 수 있습니다:
canUseTool 사용 사례
- 권한 관리: 도구 실행을 허용하기 전에 사용자 권한 확인
- 입력 검증: 실행 전에 도구 입력 검증 또는 정리
- 속도 제한: 비용이 많이 드는 작업에 대한 속도 제한 구현
- 감사 로깅: 규정 준수 또는 디버깅을 위한 도구 사용 로깅
- 동적 권한: 런타임 조건에 따라 도구 활성화/비활성화
출력 형식
텍스트 출력 (기본값)
JSON 출력
입력 형식
에이전트 통합 예제
SRE 인시던트 대응 에이전트
자동화된 보안 검토
다중 턴 법무 어시스턴트
메시지 스키마
JSON API에서 반환되는 메시지는 다음 스키마에 따라 엄격하게 타입화됩니다:
추가 지원 타입:
Message
, MessageParam
, Usage
타입은 Anthropic TypeScript SDK에서 사용할 수 있습니다.
관련 리소스
- CLI 사용법 및 제어 - 완전한 CLI 문서
- GitHub Actions 통합 - Claude로 GitHub 워크플로우 자동화
- 일반적인 워크플로우 - 일반적인 사용 사례에 대한 단계별 가이드