Processar aprovações e entrada de usuário¶
Use as regras allowedTools/disallowedTools e o retorno de chamada canUseTool para controlar quais ferramentas o agente pode usar e como as solicitações de permissão são processadas.
Por padrão, o SDK aplica as permissões da ferramenta, não as ignora. O retorno de chamada canUseTool oferece um controle granular sobre as solicitações de permissão que ainda não foram resolvidas pelas regras allowedTools/disallowedTools ou por um modo de permissão explícita, como bypassPermissions.
O SDK não fornece um prompt de permissão interativo por padrão. Se uma solicitação verificada por permissão chegar ao SDK e``canUseTool`` não for fornecido, a solicitação falhará.
Como funciona¶
Quando você fornece um retorno de chamada canUseTool, oSDK o chama antes de cada execução de ferramenta verificada por permissão. O retorno de chamada decide o que acontece:
O agente decide usar uma ferramenta verificada por permissão.
O SDK chama o retorno de chamada
canUseToolcom o nome da ferramenta, a entrada da solicitação e o contexto da permissão.O retorno de chamada responde
allowoudeny.A execução da ferramenta continua ou é bloqueada de acordo.
Para muitas verificações comuns de permissão de ferramentas, a entrada de retorno de chamada contém campos como { action, resource }. As pseudoferramentas roteadas por SDK, como AskUserQuestion e ExitPlanMode, contêm campos específicos da ferramenta.
Se canUseTool não for fornecido e uma solicitação verificada por permissão chegar ao SDK, o SDK retornará um erro em vez de enviar um prompt interativamente.
Exemplo básico¶
Padrões de resposta¶
Permitir chamada de ferramenta¶
Retornar { behavior: "allow" } para permitir que a ferramenta seja executada com a entrada original:
Negar chamada de ferramenta¶
Retornar { behavior: "deny" } com uma mensagem opcional. O agente vê a mensagem de negação e pode ajustar sua abordagem:
A ferramenta AskUserQuestion¶
O Cortex Code tem uma ferramenta AskUserQuestion integrada que o agente usa quando precisa de esclarecimento do usuário. Quando o agente chama AskUserQuestion, o SDK o roteia por meio do retorno de chamada canUseTool com toolName definido como "AskUserQuestion". A entrada contém as perguntas do agente como opções de múltipla escolha estruturadas.
Lidando com perguntas¶
Verifique se há toolName === "AskUserQuestion" em seu retorno de chamada canUseTool. input contém um array questions em que cada pergunta tem:
Campo |
Descrição |
|---|---|
|
O texto completo da pergunta a ser exibido |
|
Rótulo abreviado da pergunta |
|
Matriz de opções, cada uma com |
|
Se |
Retorna allow com updatedInput que inclui questions original e um mapa answers. Cada chave é o texto da pergunta e cada valor é o rótulo da opção selecionada. Para perguntas com várias seleções, une os rótulos com ", ".
Para negar uma pergunta (cancelar a interação), retorna deny:
Dica
AskUserQuestion é roteado por meio de canUseTool. Sem um retorno de chamada, a interação não pode ser concluída e a solicitação apresentará erros em vez de prosseguir silenciosamente.
A ferramenta ExitPlanMode¶
Quando uma sessão está no modo plan, o Cortex Code permanece em planejamento até o plano ser aprovado. A solicitação de aprovação é roteada por meio do retorno de chamada canUseTool com toolName/tool_name definido como "ExitPlanMode".
A entrada contém:
Campo |
Descrição |
|---|---|
|
O texto do plano proposto que o agente deseja executar |
|
Prompt de aprovação adicional opcional do agente |
Aprovando ou rejeitando um plano¶
Retorna allow para aprovar o plano. Opcionalmente, inclua updatedInput.message para passar o contexto de revisão de volta ao agente antes que ele saia do modo de plano.
Retorna deny para rejeitar o plano. Use message quando você quiser que o agente revise o plano com feedback específico. Rejeitar ExitPlanMode mantém o turno atual no modo de plano para que o agente possa atualizar o plano e perguntar novamente.
Aprovar ExitPlanMode encerra o modo de plano para o turno atual. Os turnos seguintes retomam o comportamento normal de permissão não plano da sessão, assim as chamadas de ferramenta posteriores são avaliadas da mesma forma que seriam fora do modo de plano.
Padrão de interação recomendado¶
Use o modo de plano como um loop de revisão:
Iniciar a sessão com
permissionMode: "plan"(TypeScript) oupermission_mode="plan"(Python).Deixar o agente coletar todas as informações ausentes usando
AskUserQuestion.Quando o agente chama
ExitPlanMode, inspecionar o texto doplanproposto.Retornar
denycom uma mensagem de revisão exata, caso o plano precise de alterações.Retornar
allowquando o plano for aceitável. Opcionalmente, incluaupdatedInput.message/updated_input["message"]com orientação do revisor para execução.Após a aprovação, os turnos posteriores voltam ao comportamento normal de permissão não plano da sessão.
Exemplo de loop de revisão¶
O loop de revisão mais simples é rejeitar um plano fraco uma vez com feedback específico e, em seguida, aprovar o plano revisado:
Permissões baseadas em regras¶
Para padrões de permissão comuns, você pode usar uma configuração baseada em regras em vez de escrever uma lógica de retorno de chamada. As opções allowedTools e disallowedTools permitem que você defina listas de ferramentas que são automaticamente aprovadas ou bloqueadas:
As entradas allowedTools podem incluir padrões. Por exemplo, Bash(npm test:*) aprova automaticamente qualquer comando Bash que corresponda a esse padrão. Entradas disallowedTools bloqueiam inteiramente ferramentas específicas.
Essas regras são avaliadas pela CLI antes do retorno de chamada canUseTool. Se uma ferramenta corresponder a uma regra permitida ou não permitida, o retorno de chamada não será invocado para essa ferramenta.
Combinando com modos de permissão¶
O retorno de chamada canUseTool funciona junto com os modos de permissão. Quando ambos são definidos, os filtros internos do modo de permissão da CLI são executados primeiro, e seu retorno de chamada processa todas as chamadas de ferramenta restantes que precisam de aprovação.
Os modos de permissão disponíveis são:
Modo |
Descrição |
|---|---|
|
Usa verificações de permissão padrão. Nas sessões do SDK, controla as ferramentas verificadas por permissão com |
|
Aprova automaticamente as solicitações de plano e confirmações de saída de plano. Não ignora as permissões de ferramenta comuns. |
|
O agente planeja as alterações, mas não as executa sem aprovação. Com |
|
Ignora todas as verificações de permissão. Requer |
Alterar o modo de permissão durante uma sessão¶
Você pode alterar o modo de permissão após o início da sessão. TypeScript expõe setPermissionMode() em ambos Query e CortexCodeSession. O Python expõe set_permission_mode() em CortexCodeSDKClient.
O modo atualizado se aplica aos turnos posteriores depois que a solicitação de controle é processada. Ele não altera retroativamente uma chamada de ferramenta que já está em execução.
Ganchos¶
Os ganchos permitem interceptar a execução da ferramenta em diferentes estágios do ciclo de vida. Ao contrário de canUseTool, que só controla se uma ferramenta é ou não executada, os ganchos podem inspecionar os resultados da ferramenta, injetar contexto e controlar o fluxo do agente.
Eventos de gancho¶
Evento |
Quando é acionado |
|---|---|
|
Antes da execução de uma ferramenta. Pode bloquear a execução ou modificar a entrada. |
|
Depois que uma ferramenta é concluída com sucesso. |
|
Quando um prompt de usuário é enviado. |
|
Quando o agente para. |
|
Quando um subagente para. |
|
Quando o agente emite uma notificação. |
|
Quando ocorre uma solicitação de permissão de ferramenta. |
|
Antes da compactação do contexto. |
O campo matcher em uma entrada de gancho é opcional. Quando fornecido, ele filtra pelo valor de correspondência do evento: nome da ferramenta para PreToolUse, PostToolUse e PermissionRequest; tipo de notificação para Notification e acionador para PreCompact. Quando omitido, o gancho é acionado para todos os valores daquele evento.
Consulte a Referência do SDK TypeScript e a Referência do SDK Python para ver as definições completas dos tipos de entrada e saída de gancho.
Escolhendo uma abordagem¶
Abordagem |
Quando usar |
|---|---|
|
Ambientes em sandbox, pipelines de CI ou cenários totalmente confiáveis em que você não precisa revisar as chamadas de ferramentas. Requer |
|
Quando você pode expressar sua política de permissões como uma lista estática de ferramentas permitidas ou bloqueadas |
Retorno de chamada de |
Sistemas de produção em que você precisa auditar, filtrar ou modificar chamadas de ferramentas antes de serem executadas |
Somente modo de permissão (sem retorno de chamada) |
Quando |
Ganchos |
Quando você precisa observar ou responder aos resultados da ferramenta, injetar contexto ou controlar o fluxo do agente além das decisões de permitir/negar |
Nota
Por padrão, o SDK não ignora as permissões ou envia um prompt interativamente. Se uma solicitação verificada por permissão chegar ao SDK e``canUseTool`` não for fornecido, a solicitação falhará. Para ignorar as permissões, você deve definir permissionMode: "bypassPermissions" explicitamente com o sinalizador de segurança apropriado.
Avisos legais¶
Quando sua configuração do Cortex Code usa um modelo que consta em Model and Service Pass-Through Terms, seu uso desse modelo está sujeito aos respectivos termos nessa página.
A classificação dos dados de entradas e saídas é definido na tabela a seguir.
Classificação de dados de entrada |
Classificação de dados de saída |
Designação |
|---|---|---|
Usage Data |
Dados de cliente |
Recursos de AI incluídos [1] |
Para obter informações adicionais, consulte AI e ML Snowflake.