TypeScript
Construa agentes de IA personalizados com o SDK TypeScript do Claude Code
Pré-requisitos
- Node.js 18+
Instalação
Instale @anthropic-ai/claude-code
do NPM:
Para visualizar o código-fonte do SDK TypeScript, visite a página @anthropic-ai/claude-code
no NPM.
Uso básico
A interface principal via SDK TypeScript é a função query
, que retorna um iterador assíncrono que transmite mensagens conforme chegam:
Opções de configuração
Argumento | Tipo | Descrição | Padrão |
---|---|---|---|
abortController | AbortController | Controlador de aborto para cancelar operações | new AbortController() |
additionalDirectories | string[] | Diretórios adicionais para incluir na sessão | undefined |
allowedTools | string[] | Lista de ferramentas que Claude tem permissão para usar | Todas as ferramentas habilitadas por padrão |
appendSystemPrompt | string | Texto para anexar ao prompt do sistema padrão | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | Função de permissão personalizada para uso de ferramentas | undefined |
continue | boolean | Continuar a sessão mais recente | false |
customSystemPrompt | string | Substituir completamente o prompt do sistema padrão | undefined |
cwd | string | Diretório de trabalho atual | process.cwd() |
disallowedTools | string[] | Lista de ferramentas que Claude não tem permissão para usar | undefined |
env | Dict<string> | Variáveis de ambiente para definir | undefined |
executable | 'bun' | 'deno' | 'node' | Qual runtime JavaScript usar | node quando executando com Node.js, bun quando executando com Bun |
executableArgs | string[] | Argumentos para passar ao executável | [] |
fallbackModel | string | Modelo para usar se o modelo principal falhar | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | Hooks de ciclo de vida para personalização | undefined |
includePartialMessages | boolean | Incluir eventos de streaming parciais no fluxo de mensagens | false |
maxThinkingTokens | number | Tokens máximos para o processo de pensamento do Claude | undefined |
maxTurns | number | Número máximo de turnos de conversa | undefined |
mcpServers | Record<string, McpServerConfig> | Configurações do servidor MCP | undefined |
model | string | Modelo Claude para usar | Usa padrão da configuração CLI |
pathToClaudeCodeExecutable | string | Caminho para o executável Claude Code | Executável que vem com @anthropic-ai/claude-code |
permissionMode | PermissionMode | Modo de permissão para a sessão | "default" (opções: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | ID da sessão para retomar | undefined |
stderr | (data: string) => void | Callback para saída stderr | undefined |
strictMcpConfig | boolean | Aplicar validação rigorosa de configuração MCP | undefined |
Streaming de mensagens parciais
Quando includePartialMessages
está habilitado, o SDK emitirá mensagens stream_event
que contêm eventos de streaming brutos da API Claude. Isso permite acessar conteúdo parcial conforme está sendo gerado, útil para implementar atualizações de UI em tempo real ou indicadores de progresso.
Cada mensagem stream_event
inclui:
event
: O evento de streaming bruto da APIsession_id
: O identificador da sessão atualparent_tool_use_id
: O ID da ferramenta sendo executada (se aplicável)uuid
: Um identificador único para este evento
O streaming de mensagens parciais é principalmente útil para casos de uso avançados onde você precisa de controle granular sobre a resposta de streaming. Para a maioria das aplicações, o comportamento padrão (aguardar mensagens completas) é suficiente.
Conversas multi-turno
Para conversas multi-turno, você tem duas opções.
Você pode gerar respostas e retomá-las, ou pode usar o modo de entrada de streaming que aceita um async/generator para um array de mensagens. Por enquanto, o modo de entrada de streaming é a única maneira de anexar imagens via mensagens.
Retomar com gerenciamento de sessão
Modo de entrada de streaming
O modo de entrada de streaming permite fornecer mensagens como um iterável assíncrono em vez de uma única string. Isso habilita conversas multi-turno, anexos de imagem e geração dinâmica de mensagens:
Entrada de streaming com imagens
O modo de entrada de streaming é a única maneira de anexar imagens via mensagens:
Prompts de sistema personalizados
Prompts de sistema definem o papel, expertise e comportamento do seu agente:
Integração com Servidor MCP
O Model Context Protocol (MCP) permite dar aos seus agentes ferramentas e capacidades personalizadas:
Ferramentas personalizadas com servidores MCP em processo
Servidores SDK MCP permitem criar ferramentas personalizadas que executam diretamente no processo da sua aplicação, fornecendo execução de ferramenta type-safe sem a sobrecarga de processos separados ou comunicação de rede.
Criando ferramentas personalizadas
Use as funções auxiliares createSdkMcpServer
e tool
para definir ferramentas personalizadas type-safe:
Segurança de tipos com Zod
O auxiliar tool
fornece inferência completa de tipos TypeScript dos seus esquemas Zod:
Hooks
Hooks permitem personalizar e estender o comportamento do Claude Code executando callbacks personalizados em vários pontos do ciclo de vida do agente. Diferente dos hooks CLI que executam comandos bash, hooks SDK são funções JavaScript/TypeScript que executam em processo.
Definindo hooks
Hooks são organizados por tipo de evento, com matchers opcionais para filtrar quando executam:
Eventos de hook disponíveis
- PreToolUse: Executa antes da execução da ferramenta. Pode bloquear ferramentas ou fornecer feedback.
- PostToolUse: Executa após execução bem-sucedida da ferramenta.
- UserPromptSubmit: Executa quando usuário submete um prompt.
- SessionStart: Executa quando uma sessão inicia.
- SessionEnd: Executa quando uma sessão termina.
- Stop: Executa quando Claude está prestes a parar de responder.
- SubagentStop: Executa quando um subagente está prestes a parar.
- PreCompact: Executa antes da compactação da conversa.
- Notification: Executa quando notificações são enviadas.
Tipos de entrada de hook
Cada hook recebe entrada tipada baseada no evento:
Saída de hook
Hooks retornam saída que controla o fluxo de execução:
Exemplos práticos
Logging e monitoramento
Validação de operações de arquivo
Auto-formatação de código
Melhoria de prompt
Instruções de compactação personalizadas
Comportamento de execução de hook
- Paralelização: Todos os hooks correspondentes executam em paralelo
- Timeout: Hooks respeitam o sinal de aborto das opções
- Tratamento de erro: Erros de hook são registrados mas não param a execução
- Matchers: Suportam padrões regex (ex:
"Write|Edit"
)
Combinando hooks com canUseTool
Enquanto canUseTool
fornece controle de permissão, hooks oferecem integração mais ampla do ciclo de vida:
Controle de permissão com canUseTool
O callback canUseTool
fornece controle refinado sobre execução de ferramentas. É chamado antes de cada uso de ferramenta e pode permitir, negar ou modificar entradas de ferramenta:
Casos de uso para canUseTool
- Gerenciamento de permissões: Verificar permissões do usuário antes de permitir execução de ferramenta
- Validação de entrada: Validar ou sanitizar entradas de ferramenta antes da execução
- Limitação de taxa: Implementar limites de taxa para operações caras
- Log de auditoria: Registrar uso de ferramenta para conformidade ou depuração
- Permissões dinâmicas: Habilitar/desabilitar ferramentas baseado em condições de tempo de execução
Formatos de saída
Saída de texto (padrão)
Saída JSON
Formatos de entrada
Exemplos de integração de agente
Agente de resposta a incidentes SRE
Revisão de segurança automatizada
Assistente jurídico multi-turno
Esquema de mensagem
Mensagens retornadas da API JSON são estritamente tipadas de acordo com o seguinte esquema:
Tipos de suporte adicionais:
Os tipos Message
, MessageParam
e Usage
estão disponíveis no SDK TypeScript da Anthropic.
Recursos relacionados
- Uso e controles CLI - Documentação completa da CLI
- Integração GitHub Actions - Automatize seu fluxo de trabalho GitHub com Claude
- Fluxos de trabalho comuns - Guias passo a passo para casos de uso comuns