SpyBara
Go Premium

Documentation 2026-05-08 22:00 UTC to 2026-05-09 04:57 UTC

20 files changed +1,304 −149. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19
Details

309 </Tab>309 </Tab>

310</Tabs>310</Tabs>

311 311 

312Para HTTP (não-streaming), use `"type": "http"` em vez disso.312Para o transporte HTTP em fluxo contínuo, use `"type": "http"` em vez disso. Em `.mcp.json` e outros arquivos de configuração JSON, `"streamable-http"` é aceito como um alias para `"http"`. A opção programática `mcpServers` aceita apenas `"http"`.

313 313 

314### Servidores MCP SDK314### Servidores MCP SDK

315 315 

agent-sdk/python.md +113 −111

Details

2294 2294 

2295```python theme={null}2295```python theme={null}

2296{2296{

2297 "description": str, # A short (3-5 word) description of the task2297 "description": str, # Uma descrição breve (3-5 palavras) da tarefa

2298 "prompt": str, # The task for the agent to perform2298 "prompt": str, # A tarefa para o agente executar

2299 "subagent_type": str, # The type of specialized agent to use2299 "subagent_type": str, # O tipo de agente especializado a usar

2300}2300}

2301```2301```

2302 2302 


2304 2304 

2305```python theme={null}2305```python theme={null}

2306{2306{

2307 "result": str, # Final result from the subagent2307 "result": str, # Resultado final do subagente

2308 "usage": dict | None, # Token usage statistics2308 "usage": dict | None, # Estatísticas de uso de tokens

2309 "total_cost_usd": float | None, # Estimated total cost in USD2309 "total_cost_usd": float | None, # Custo total estimado em USD

2310 "duration_ms": int | None, # Execution duration in milliseconds2310 "duration_ms": int | None, # Duração da execução em milissegundos

2311}2311}

2312```2312```

2313 2313 


2315 2315 

2316**Nome da ferramenta:** `AskUserQuestion`2316**Nome da ferramenta:** `AskUserQuestion`

2317 2317 

2318Faz perguntas de esclarecimento ao usuário durante a execução. Veja [Handle approvals and user input](/pt/agent-sdk/user-input#handle-clarifying-questions) para detalhes de uso.2318Faz perguntas de esclarecimento ao usuário durante a execução. Veja [Lidar com aprovações e entrada do usuário](/pt/agent-sdk/user-input#handle-clarifying-questions) para detalhes de uso.

2319 2319 

2320**Entrada:**2320**Entrada:**

2321 2321 

2322```python theme={null}2322```python theme={null}

2323{2323{

2324 "questions": [ # Questions to ask the user (1-4 questions)2324 "questions": [ # Perguntas a fazer ao usuário (1-4 perguntas)

2325 {2325 {

2326 "question": str, # The complete question to ask the user2326 "question": str, # A pergunta completa a fazer ao usuário

2327 "header": str, # Very short label displayed as a chip/tag (max 12 chars)2327 "header": str, # Rótulo muito breve exibido como chip/tag (máx 12 caracteres)

2328 "options": [ # The available choices (2-4 options)2328 "options": [ # As escolhas disponíveis (2-4 opções)

2329 {2329 {

2330 "label": str, # Display text for this option (1-5 words)2330 "label": str, # Texto de exibição para esta opção (1-5 palavras)

2331 "description": str, # Explanation of what this option means2331 "description": str, # Explicação do que esta opção significa

2332 }2332 }

2333 ],2333 ],

2334 "multiSelect": bool, # Set to true to allow multiple selections2334 "multiSelect": bool, # Defina como true para permitir múltiplas seleções

2335 }2335 }

2336 ],2336 ],

2337 "answers": dict | None, # User answers populated by the permission system2337 "answers": dict[str, str | list[str]] | None,

2338 # Respostas do usuário preenchidas pelo sistema de permissões. Respostas

2339 # de múltipla seleção podem ser uma lista de rótulos ou uma string separada por vírgula

2338}2340}

2339```2341```

2340 2342 


2342 2344 

2343```python theme={null}2345```python theme={null}

2344{2346{

2345 "questions": [ # The questions that were asked2347 "questions": [ # As perguntas que foram feitas

2346 {2348 {

2347 "question": str,2349 "question": str,

2348 "header": str,2350 "header": str,


2350 "multiSelect": bool,2352 "multiSelect": bool,

2351 }2353 }

2352 ],2354 ],

2353 "answers": dict[str, str], # Maps question text to answer string2355 "answers": dict[str, str], # Mapeia texto da pergunta para string de resposta

2354 # Multi-select answers are comma-separated2356 # Respostas de múltipla seleção são separadas por vírgula

2355}2357}

2356```2358```

2357 2359 


2363 2365 

2364```python theme={null}2366```python theme={null}

2365{2367{

2366 "command": str, # The command to execute2368 "command": str, # O comando a executar

2367 "timeout": int | None, # Optional timeout in milliseconds (max 600000)2369 "timeout": int | None, # Tempo limite opcional em milissegundos (máx 600000)

2368 "description": str | None, # Clear, concise description (5-10 words)2370 "description": str | None, # Descrição clara e concisa (5-10 palavras)

2369 "run_in_background": bool | None, # Set to true to run in background2371 "run_in_background": bool | None, # Defina como true para executar em segundo plano

2370}2372}

2371```2373```

2372 2374 


2374 2376 

2375```python theme={null}2377```python theme={null}

2376{2378{

2377 "output": str, # Combined stdout and stderr output2379 "output": str, # Saída combinada de stdout e stderr

2378 "exitCode": int, # Exit code of the command2380 "exitCode": int, # Código de saída do comando

2379 "killed": bool | None, # Whether command was killed due to timeout2381 "killed": bool | None, # Se o comando foi interrompido devido ao tempo limite

2380 "shellId": str | None, # Shell ID for background processes2382 "shellId": str | None, # ID do shell para processos em segundo plano

2381}2383}

2382```2384```

2383 2385 


2385 2387 

2386**Nome da ferramenta:** `Monitor`2388**Nome da ferramenta:** `Monitor`

2387 2389 

2388Executa um script de fundo e entrega cada linha stdout para Claude como um evento para que ele possa reagir sem polling. Monitor segue as mesmas regras de permissão que Bash. Veja a [Monitor tool reference](/pt/tools-reference#monitor-tool) para comportamento e disponibilidade de provedor.2390Executa um script de fundo e entrega cada linha stdout para Claude como um evento para que ele possa reagir sem polling. Monitor segue as mesmas regras de permissão que Bash. Veja a [referência da ferramenta Monitor](/pt/tools-reference#monitor-tool) para comportamento e disponibilidade de provedor.

2389 2391 

2390**Entrada:**2392**Entrada:**

2391 2393 

2392```python theme={null}2394```python theme={null}

2393{2395{

2394 "command": str, # Shell script; each stdout line is an event, exit ends the watch2396 "command": str, # Script de shell; cada linha stdout é um evento, exit encerra a observação

2395 "description": str, # Short description shown in notifications2397 "description": str, # Descrição breve mostrada em notificações

2396 "timeout_ms": int | None, # Kill after this deadline (default 300000, max 3600000)2398 "timeout_ms": int | None, # Interromper após este prazo (padrão 300000, máx 3600000)

2397 "persistent": bool | None, # Run for the lifetime of the session; stop with TaskStop2399 "persistent": bool | None, # Executar pela vida útil da sessão; parar com TaskStop

2398}2400}

2399```2401```

2400 2402 


2402 2404 

2403```python theme={null}2405```python theme={null}

2404{2406{

2405 "taskId": str, # ID of the background monitor task2407 "taskId": str, # ID da tarefa de monitor de fundo

2406 "timeoutMs": int, # Timeout deadline in milliseconds (0 when persistent)2408 "timeoutMs": int, # Prazo de tempo limite em milissegundos (0 quando persistente)

2407 "persistent": bool | None, # True when running until TaskStop or session end2409 "persistent": bool | None, # True quando executando até TaskStop ou fim da sessão

2408}2410}

2409```2411```

2410 2412 


2416 2418 

2417```python theme={null}2419```python theme={null}

2418{2420{

2419 "file_path": str, # The absolute path to the file to modify2421 "file_path": str, # O caminho absoluto do arquivo a modificar

2420 "old_string": str, # The text to replace2422 "old_string": str, # O texto a substituir

2421 "new_string": str, # The text to replace it with2423 "new_string": str, # O texto para substituir por

2422 "replace_all": bool | None, # Replace all occurrences (default False)2424 "replace_all": bool | None, # Substituir todas as ocorrências (padrão False)

2423}2425}

2424```2426```

2425 2427 


2427 2429 

2428```python theme={null}2430```python theme={null}

2429{2431{

2430 "message": str, # Confirmation message2432 "message": str, # Mensagem de confirmação

2431 "replacements": int, # Number of replacements made2433 "replacements": int, # Número de substituições realizadas

2432 "file_path": str, # File path that was edited2434 "file_path": str, # Caminho do arquivo que foi editado

2433}2435}

2434```2436```

2435 2437 


2441 2443 

2442```python theme={null}2444```python theme={null}

2443{2445{

2444 "file_path": str, # The absolute path to the file to read2446 "file_path": str, # O caminho absoluto do arquivo a ler

2445 "offset": int | None, # The line number to start reading from2447 "offset": int | None, # O número da linha para começar a ler

2446 "limit": int | None, # The number of lines to read2448 "limit": int | None, # O número de linhas a ler

2447}2449}

2448```2450```

2449 2451 


2451 2453 

2452```python theme={null}2454```python theme={null}

2453{2455{

2454 "content": str, # File contents with line numbers2456 "content": str, # Conteúdo do arquivo com números de linha

2455 "total_lines": int, # Total number of lines in file2457 "total_lines": int, # Número total de linhas no arquivo

2456 "lines_returned": int, # Lines actually returned2458 "lines_returned": int, # Linhas realmente retornadas

2457}2459}

2458```2460```

2459 2461 


2461 2463 

2462```python theme={null}2464```python theme={null}

2463{2465{

2464 "image": str, # Base64 encoded image data2466 "image": str, # Dados de imagem codificados em Base64

2465 "mime_type": str, # Image MIME type2467 "mime_type": str, # Tipo MIME da imagem

2466 "file_size": int, # File size in bytes2468 "file_size": int, # Tamanho do arquivo em bytes

2467}2469}

2468```2470```

2469 2471 


2475 2477 

2476```python theme={null}2478```python theme={null}

2477{2479{

2478 "file_path": str, # The absolute path to the file to write2480 "file_path": str, # O caminho absoluto do arquivo a escrever

2479 "content": str, # The content to write to the file2481 "content": str, # O conteúdo a escrever no arquivo

2480}2482}

2481```2483```

2482 2484 


2484 2486 

2485```python theme={null}2487```python theme={null}

2486{2488{

2487 "message": str, # Success message2489 "message": str, # Mensagem de sucesso

2488 "bytes_written": int, # Number of bytes written2490 "bytes_written": int, # Número de bytes escritos

2489 "file_path": str, # File path that was written2491 "file_path": str, # Caminho do arquivo que foi escrito

2490}2492}

2491```2493```

2492 2494 


2498 2500 

2499```python theme={null}2501```python theme={null}

2500{2502{

2501 "pattern": str, # The glob pattern to match files against2503 "pattern": str, # O padrão glob para corresponder arquivos

2502 "path": str | None, # The directory to search in (defaults to cwd)2504 "path": str | None, # O diretório a pesquisar (padrão cwd)

2503}2505}

2504```2506```

2505 2507 


2507 2509 

2508```python theme={null}2510```python theme={null}

2509{2511{

2510 "matches": list[str], # Array of matching file paths2512 "matches": list[str], # Array de caminhos de arquivo correspondentes

2511 "count": int, # Number of matches found2513 "count": int, # Número de correspondências encontradas

2512 "search_path": str, # Search directory used2514 "search_path": str, # Diretório de pesquisa usado

2513}2515}

2514```2516```

2515 2517 


2521 2523 

2522```python theme={null}2524```python theme={null}

2523{2525{

2524 "pattern": str, # The regular expression pattern2526 "pattern": str, # O padrão de expressão regular

2525 "path": str | None, # File or directory to search in2527 "path": str | None, # Arquivo ou diretório a pesquisar

2526 "glob": str | None, # Glob pattern to filter files2528 "glob": str | None, # Padrão glob para filtrar arquivos

2527 "type": str | None, # File type to search2529 "type": str | None, # Tipo de arquivo a pesquisar

2528 "output_mode": str | None, # "content", "files_with_matches", or "count"2530 "output_mode": str | None, # "content", "files_with_matches", ou "count"

2529 "-i": bool | None, # Case insensitive search2531 "-i": bool | None, # Pesquisa insensível a maiúsculas/minúsculas

2530 "-n": bool | None, # Show line numbers2532 "-n": bool | None, # Mostrar números de linha

2531 "-B": int | None, # Lines to show before each match2533 "-B": int | None, # Linhas a mostrar antes de cada correspondência

2532 "-A": int | None, # Lines to show after each match2534 "-A": int | None, # Linhas a mostrar após cada correspondência

2533 "-C": int | None, # Lines to show before and after2535 "-C": int | None, # Linhas a mostrar antes e depois

2534 "head_limit": int | None, # Limit output to first N lines/entries2536 "head_limit": int | None, # Limitar saída às primeiras N linhas/entradas

2535 "multiline": bool | None, # Enable multiline mode2537 "multiline": bool | None, # Ativar modo multilinha

2536}2538}

2537```2539```

2538 2540 


2557 2559 

2558```python theme={null}2560```python theme={null}

2559{2561{

2560 "files": list[str], # Files containing matches2562 "files": list[str], # Arquivos contendo correspondências

2561 "count": int, # Number of files with matches2563 "count": int, # Número de arquivos com correspondências

2562}2564}

2563```2565```

2564 2566 


2570 2572 

2571```python theme={null}2573```python theme={null}

2572{2574{

2573 "notebook_path": str, # Absolute path to the Jupyter notebook2575 "notebook_path": str, # Caminho absoluto para o notebook Jupyter

2574 "cell_id": str | None, # The ID of the cell to edit2576 "cell_id": str | None, # O ID da célula a editar

2575 "new_source": str, # The new source for the cell2577 "new_source": str, # A nova fonte para a célula

2576 "cell_type": "code" | "markdown" | None, # The type of the cell2578 "cell_type": "code" | "markdown" | None, # O tipo da célula

2577 "edit_mode": "replace" | "insert" | "delete" | None, # Edit operation type2579 "edit_mode": "replace" | "insert" | "delete" | None, # Tipo de operação de edição

2578}2580}

2579```2581```

2580 2582 


2582 2584 

2583```python theme={null}2585```python theme={null}

2584{2586{

2585 "message": str, # Success message2587 "message": str, # Mensagem de sucesso

2586 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed2588 "edit_type": "replaced" | "inserted" | "deleted", # Tipo de edição realizada

2587 "cell_id": str | None, # Cell ID that was affected2589 "cell_id": str | None, # ID da célula que foi afetada

2588 "total_cells": int, # Total cells in notebook after edit2590 "total_cells": int, # Total de células no notebook após edição

2589}2591}

2590```2592```

2591 2593 


2597 2599 

2598```python theme={null}2600```python theme={null}

2599{2601{

2600 "url": str, # The URL to fetch content from2602 "url": str, # A URL para buscar conteúdo

2601 "prompt": str, # The prompt to run on the fetched content2603 "prompt": str, # O prompt a executar no conteúdo buscado

2602}2604}

2603```2605```

2604 2606 


2606 2608 

2607```python theme={null}2609```python theme={null}

2608{2610{

2609 "response": str, # AI model's response to the prompt2611 "response": str, # Resposta do modelo de IA ao prompt

2610 "url": str, # URL that was fetched2612 "url": str, # URL que foi buscada

2611 "final_url": str | None, # Final URL after redirects2613 "final_url": str | None, # URL final após redirecionamentos

2612 "status_code": int | None, # HTTP status code2614 "status_code": int | None, # Código de status HTTP

2613}2615}

2614```2616```

2615 2617 


2621 2623 

2622```python theme={null}2624```python theme={null}

2623{2625{

2624 "query": str, # The search query to use2626 "query": str, # A consulta de pesquisa a usar

2625 "allowed_domains": list[str] | None, # Only include results from these domains2627 "allowed_domains": list[str] | None, # Incluir apenas resultados desses domínios

2626 "blocked_domains": list[str] | None, # Never include results from these domains2628 "blocked_domains": list[str] | None, # Nunca incluir resultados desses domínios

2627}2629}

2628```2630```

2629 2631 


2647{2649{

2648 "todos": [2650 "todos": [

2649 {2651 {

2650 "content": str, # The task description2652 "content": str, # A descrição da tarefa

2651 "status": "pending" | "in_progress" | "completed", # Task status2653 "status": "pending" | "in_progress" | "completed", # Status da tarefa

2652 "activeForm": str, # Active form of the description2654 "activeForm": str, # Forma ativa da descrição

2653 }2655 }

2654 ]2656 ]

2655}2657}


2659 2661 

2660```python theme={null}2662```python theme={null}

2661{2663{

2662 "message": str, # Success message2664 "message": str, # Mensagem de sucesso

2663 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},2665 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},

2664}2666}

2665```2667```


2672 2674 

2673```python theme={null}2675```python theme={null}

2674{2676{

2675 "bash_id": str, # The ID of the background shell2677 "bash_id": str, # O ID do shell de fundo

2676 "filter": str | None, # Optional regex to filter output lines2678 "filter": str | None, # Regex opcional para filtrar linhas de saída

2677}2679}

2678```2680```

2679 2681 


2681 2683 

2682```python theme={null}2684```python theme={null}

2683{2685{

2684 "output": str, # New output since last check2686 "output": str, # Nova saída desde a última verificação

2685 "status": "running" | "completed" | "failed", # Current shell status2687 "status": "running" | "completed" | "failed", # Status atual do shell

2686 "exitCode": int | None, # Exit code when completed2688 "exitCode": int | None, # Código de saída quando concluído

2687}2689}

2688```2690```

2689 2691 


2695 2697 

2696```python theme={null}2698```python theme={null}

2697{2699{

2698 "shell_id": str # The ID of the background shell to kill2700 "shell_id": str # O ID do shell de fundo a interromper

2699}2701}

2700```2702```

2701 2703 


2703 2705 

2704```python theme={null}2706```python theme={null}

2705{2707{

2706 "message": str, # Success message2708 "message": str, # Mensagem de sucesso

2707 "shell_id": str, # ID of the killed shell2709 "shell_id": str, # ID do shell interrompido

2708}2710}

2709```2711```

2710 2712 


2716 2718 

2717```python theme={null}2719```python theme={null}

2718{2720{

2719 "plan": str # The plan to run by the user for approval2721 "plan": str # O plano a executar pelo usuário para aprovação

2720}2722}

2721```2723```

2722 2724 


2724 2726 

2725```python theme={null}2727```python theme={null}

2726{2728{

2727 "message": str, # Confirmation message2729 "message": str, # Mensagem de confirmação

2728 "approved": bool | None, # Whether user approved the plan2730 "approved": bool | None, # Se o usuário aprovou o plano

2729}2731}

2730```2732```

2731 2733 


2737 2739 

2738```python theme={null}2740```python theme={null}

2739{2741{

2740 "server": str | None # Optional server name to filter resources by2742 "server": str | None # Nome de servidor opcional para filtrar recursos por

2741}2743}

2742```2744```

2743 2745 


2766 2768 

2767```python theme={null}2769```python theme={null}

2768{2770{

2769 "server": str, # The MCP server name2771 "server": str, # O nome do servidor MCP

2770 "uri": str, # The resource URI to read2772 "uri": str, # A URI do recurso a ler

2771}2773}

2772```2774```

2773 2775 

Details

308| `tag` | `string \| null` | obrigatório | String de tag, ou `null` para limpar |308| `tag` | `string \| null` | obrigatório | String de tag, ou `null` para limpar |

309| `options.dir` | `string` | `undefined` | Caminho do diretório do projeto. Quando omitido, pesquisa todos os diretórios de projeto |309| `options.dir` | `string` | `undefined` | Caminho do diretório do projeto. Quando omitido, pesquisa todos os diretórios de projeto |

310 310 

311### `resolveSettings()`

312 

313Resolve as configurações efetivas do Claude Code para um determinado diretório usando o mesmo mecanismo de mesclagem que o CLI, sem gerar o Claude CLI. Use-o para inspecionar qual configuração uma chamada `query()` veria antes de invocar uma.

314 

315<Note>

316 Esta função é alfa e sua API pode mudar antes da estabilização. Ela lê fontes MDM, incluindo plist do macOS e HKLM/HKCU do Windows, para paridade com inicialização do CLI, mas não executa o subprocesso `policyHelper` configurado pelo administrador. O campo `permissions.defaultMode` é retornado como está de todos os níveis, incluindo configurações de projeto. O filtro de confiança que o CLI aplica antes de honrar modos de permissão crescentes não é aplicado.

317</Note>

318 

319```typescript theme={null}

320function resolveSettings(

321 options?: ResolveSettingsOptions

322): Promise<ResolvedSettings>;

323```

324 

325#### Parâmetros

326 

327`resolveSettings()` aceita um único objeto de opções. Todos os campos são opcionais.

328 

329| Parâmetro | Tipo | Padrão | Descrição |

330| :------------------------------ | :------------------------------------ | :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

331| `options.cwd` | `string` | `process.cwd()` | Diretório para resolver configurações de projeto e local relativas a |

332| `options.settingSources` | [`SettingSource`](#settingsource)`[]` | Todas as fontes | Quais fontes do sistema de arquivos carregar. Passe `[]` para pular configurações de usuário, projeto e local. Configurações de política gerenciada carregam em todos os casos |

333| `options.managedSettings` | `Settings` | `undefined` | Configurações de política restritiva mescladas no nível de precedência de política gerenciada. Chaves não restritivas como `model` são silenciosamente descartadas |

334| `options.serverManagedSettings` | `Settings` | `undefined` | Payload de configurações gerenciadas pelo servidor de `/api/claude_code/settings`. Chaves não restritivas passam sem filtro |

335 

336#### Tipo de retorno: `ResolvedSettings`

337 

338`resolveSettings()` retorna um objeto descrevendo as configurações mescladas e a fonte que contribuiu para cada chave.

339 

340| Propriedade | Tipo | Descrição |

341| :----------- | :-------------------------------------------------- | :--------------------------------------------------------------------------------------- |

342| `effective` | `Settings` | Configurações mescladas após aplicar todas as fontes habilitadas em ordem de precedência |

343| `provenance` | `Partial<Record<keyof Settings, ProvenanceEntry>>` | Para cada chave de nível superior em `effective`, qual fonte forneceu o valor |

344| `sources` | `Array<{ source, settings, path?, policyOrigin? }>` | Configurações brutas por fonte, ordenadas de precedência mais baixa para mais alta |

345 

346#### Exemplo

347 

348O exemplo abaixo resolve configurações para um diretório de projeto e imprime a fonte que controla o período de limpeza.

349 

350```typescript theme={null}

351import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

352 

353const { effective, provenance } = await resolveSettings({

354 cwd: "/path/to/project",

355 settingSources: ["user", "project", "local"],

356});

357 

358console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);

359console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

360```

361 

311## Tipos362## Tipos

312 363 

313### `Options`364### `Options`


864 | SDKFilesPersistedEvent915 | SDKFilesPersistedEvent

865 | SDKToolUseSummaryMessage916 | SDKToolUseSummaryMessage

866 | SDKRateLimitEvent917 | SDKRateLimitEvent

918 | SDKPermissionDeniedMessage

867 | SDKPromptSuggestionMessage;919 | SDKPromptSuggestionMessage;

868```920```

869 921 


1052};1104};

1053```1105```

1054 1106 

1107### `SDKPermissionDeniedMessage`

1108 

1109Evento de fluxo emitido quando o sistema de permissão nega automaticamente uma chamada de ferramenta sem um prompt interativo. Use-o para renderizar a negação em sua interface do usuário conforme ela acontece, em vez de apenas observar o resultado da ferramenta `is_error` que se segue. O caminho de solicitação interativa chega à sua aplicação separadamente através do callback [`canUseTool`](#canusetool). As negações emitidas por um hook `PreToolUse` não são relatadas através deste evento.

1110 

1111Este evento requer Claude Code v2.1.136 ou posterior.

1112 

1113```typescript theme={null}

1114type SDKPermissionDeniedMessage = {

1115 type: "system";

1116 subtype: "permission_denied";

1117 tool_name: string;

1118 tool_use_id: string;

1119 agent_id?: string;

1120 decision_reason_type?: string;

1121 decision_reason?: string;

1122 message: string;

1123 uuid: UUID;

1124 session_id: string;

1125};

1126```

1127 

1128| Campo | Tipo | Descrição |

1129| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- |

1130| `tool_name` | `string` | Nome da ferramenta que foi negada |

1131| `tool_use_id` | `string` | ID do bloco `tool_use` que esta negação responde |

1132| `agent_id` | `string` | ID do subagente quando a chamada negada originou-se dentro de um subagente. Espelha o campo em `can_use_tool` para roteamento do lado do host |

1133| `decision_reason_type` | `string` | Discriminador para o componente que decidiu, como `"rule"`, `"mode"`, `"classifier"`, ou `"asyncAgent"` |

1134| `decision_reason` | `string` | Razão legível por humanos do componente que decidiu, quando disponível |

1135| `message` | `string` | Mensagem de rejeição retornada ao modelo no `tool_result` |

1136 

1055### `SDKPermissionDenial`1137### `SDKPermissionDenial`

1056 1138 

1057Informações sobre um uso de ferramenta negado.1139Informações sobre um uso de ferramenta negado.

agent-sdk/user-input.md +810 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Lidar com aprovações e entrada do usuário

6 

7> Apresente as solicitações de aprovação e perguntas de esclarecimento do Claude aos usuários e retorne suas decisões ao SDK.

8 

9Ao trabalhar em uma tarefa, Claude às vezes precisa verificar com os usuários. Pode precisar de permissão antes de excluir arquivos ou precisar perguntar qual banco de dados usar para um novo projeto. Seu aplicativo precisa apresentar essas solicitações aos usuários para que Claude possa continuar com sua entrada.

10 

11Claude solicita entrada do usuário em duas situações: quando precisa de **permissão para usar uma ferramenta** (como excluir arquivos ou executar comandos) e quando tem **perguntas de esclarecimento** (por meio da ferramenta `AskUserQuestion`). Ambas acionam seu callback `canUseTool`, que pausa a execução até que você retorne uma resposta. Isso é diferente dos turnos de conversa normais, onde Claude termina e aguarda sua próxima mensagem.

12 

13Para perguntas de esclarecimento, Claude gera as perguntas e opções. Seu papel é apresentá-las aos usuários e retornar suas seleções. Você não pode adicionar suas próprias perguntas a este fluxo; se precisar perguntar algo aos usuários, faça isso separadamente na lógica do seu aplicativo.

14 

15O callback pode permanecer pendente indefinidamente. A execução permanece pausada até que seu callback retorne, e o SDK apenas cancela a espera quando a própria consulta é cancelada. Se um usuário puder levar mais tempo para responder do que seu processo pode razoavelmente permanecer em execução, o SDK TypeScript suporta o [hook `defer`](/pt/hooks#defer-a-tool-call-for-later), que permite que o processo saia e retome mais tarde a partir da sessão persistida; esta opção não está disponível no SDK Python.

16 

17Este guia mostra como detectar cada tipo de solicitação e responder apropriadamente.

18 

19## Detectar quando Claude precisa de entrada

20 

21Passe um callback `canUseTool` nas opções de sua consulta. O callback é acionado sempre que Claude precisa de entrada do usuário, recebendo o nome da ferramenta e a entrada como argumentos:

22 

23<CodeGroup>

24 ```python Python theme={null}

25 async def handle_tool_request(tool_name, input_data, context):

26 # Solicite ao usuário e retorne permitir ou negar

27 ...

28 

29 

30 options = ClaudeAgentOptions(can_use_tool=handle_tool_request)

31 ```

32 

33 ```typescript TypeScript theme={null}

34 async function handleToolRequest(toolName, input, options) {

35 // options inclui { signal: AbortSignal, suggestions?: PermissionUpdate[] }

36 // Solicite ao usuário e retorne permitir ou negar

37 }

38 

39 const options = { canUseTool: handleToolRequest };

40 ```

41</CodeGroup>

42 

43O callback é acionado em dois casos:

44 

451. **Ferramenta precisa de aprovação**: Claude quer usar uma ferramenta que não é aprovada automaticamente por [regras de permissão](/pt/agent-sdk/permissions) ou modos. Verifique `tool_name` para a ferramenta (por exemplo, `"Bash"`, `"Write"`).

462. **Claude faz uma pergunta**: Claude chama a ferramenta `AskUserQuestion`. Verifique se `tool_name == "AskUserQuestion"` para tratá-la diferentemente. Se você especificar um array `tools`, inclua `AskUserQuestion` para que isso funcione. Veja [Lidar com perguntas de esclarecimento](#handle-clarifying-questions) para detalhes.

47 

48<Note>

49 Para permitir ou negar automaticamente ferramentas sem solicitar aos usuários, use [hooks](/pt/agent-sdk/hooks) em vez disso. Os hooks são executados antes de `canUseTool` e podem permitir, negar ou modificar solicitações com base em sua própria lógica. Você também pode usar o [hook `PermissionRequest`](/pt/agent-sdk/hooks#available-hooks) para enviar notificações externas (Slack, email, push) quando Claude está aguardando aprovação.

50</Note>

51 

52## Lidar com solicitações de aprovação de ferramentas

53 

54Depois de passar um callback `canUseTool` nas opções de sua consulta, ele é acionado quando Claude quer usar uma ferramenta que não é aprovada automaticamente. Seu callback recebe três argumentos:

55 

56| Argumento | Descrição |

57| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

58| `toolName` | O nome da ferramenta que Claude quer usar (por exemplo, `"Bash"`, `"Write"`, `"Edit"`) |

59| `input` | Os parâmetros que Claude está passando para a ferramenta. O conteúdo varia por ferramenta. |

60| `options` (TS) / `context` (Python) | Contexto adicional incluindo `suggestions` opcional (entradas `PermissionUpdate` propostas para evitar re-solicitação) e um sinal de cancelamento. Em TypeScript, `signal` é um `AbortSignal`; em Python, o campo de sinal é reservado para uso futuro. Veja [`ToolPermissionContext`](/pt/agent-sdk/python#toolpermissioncontext) para Python. |

61 

62O objeto `input` contém parâmetros específicos da ferramenta. Exemplos comuns:

63 

64| Ferramenta | Campos de entrada |

65| ---------- | --------------------------------------- |

66| `Bash` | `command`, `description`, `timeout` |

67| `Write` | `file_path`, `content` |

68| `Edit` | `file_path`, `old_string`, `new_string` |

69| `Read` | `file_path`, `offset`, `limit` |

70 

71Veja a referência do SDK para esquemas de entrada completos: [Python](/pt/agent-sdk/python#tool-input%2Foutput-types) | [TypeScript](/pt/agent-sdk/typescript#tool-input-types).

72 

73Você pode exibir essas informações ao usuário para que ele possa decidir se permite ou rejeita a ação, e então retornar a resposta apropriada.

74 

75O exemplo a seguir pede ao Claude para criar e excluir um arquivo de teste. Quando Claude tenta cada operação, o callback imprime a solicitação de ferramenta no terminal e solicita aprovação s/n.

76 

77<CodeGroup>

78 ```python Python theme={null}

79 import asyncio

80 

81 from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

82 from claude_agent_sdk.types import (

83 HookMatcher,

84 PermissionResultAllow,

85 PermissionResultDeny,

86 ToolPermissionContext,

87 )

88 

89 

90 async def can_use_tool(

91 tool_name: str, input_data: dict, context: ToolPermissionContext

92 ) -> PermissionResultAllow | PermissionResultDeny:

93 # Exiba a solicitação de ferramenta

94 print(f"\nTool: {tool_name}")

95 if tool_name == "Bash":

96 print(f"Command: {input_data.get('command')}")

97 if input_data.get("description"):

98 print(f"Description: {input_data.get('description')}")

99 else:

100 print(f"Input: {input_data}")

101 

102 # Obtenha aprovação do usuário

103 response = input("Allow this action? (y/n): ")

104 

105 # Retorne permitir ou negar com base na resposta do usuário

106 if response.lower() == "y":

107 # Permitir: ferramenta executa com a entrada original (ou modificada)

108 return PermissionResultAllow(updated_input=input_data)

109 else:

110 # Negar: ferramenta não executa, Claude vê a mensagem

111 return PermissionResultDeny(message="User denied this action")

112 

113 

114 # Solução alternativa necessária: hook fictício mantém o fluxo aberto para can_use_tool

115 async def dummy_hook(input_data, tool_use_id, context):

116 return {"continue_": True}

117 

118 

119 async def prompt_stream():

120 yield {

121 "type": "user",

122 "message": {

123 "role": "user",

124 "content": "Create a test file in /tmp and then delete it",

125 },

126 }

127 

128 

129 async def main():

130 async for message in query(

131 prompt=prompt_stream(),

132 options=ClaudeAgentOptions(

133 can_use_tool=can_use_tool,

134 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

135 ),

136 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":

138 print(message.result)

139 

140 

141 asyncio.run(main())

142 ```

143 

144 ```typescript TypeScript theme={null}

145 import { query } from "@anthropic-ai/claude-agent-sdk";

146 import * as readline from "readline";

147 

148 // Auxiliar para solicitar entrada do usuário no terminal

149 function prompt(question: string): Promise<string> {

150 const rl = readline.createInterface({

151 input: process.stdin,

152 output: process.stdout

153 });

154 return new Promise((resolve) =>

155 rl.question(question, (answer) => {

156 rl.close();

157 resolve(answer);

158 })

159 );

160 }

161 

162 for await (const message of query({

163 prompt: "Create a test file in /tmp and then delete it",

164 options: {

165 canUseTool: async (toolName, input) => {

166 // Exiba a solicitação de ferramenta

167 console.log(`\nTool: ${toolName}`);

168 if (toolName === "Bash") {

169 console.log(`Command: ${input.command}`);

170 if (input.description) console.log(`Description: ${input.description}`);

171 } else {

172 console.log(`Input: ${JSON.stringify(input, null, 2)}`);

173 }

174 

175 // Obtenha aprovação do usuário

176 const response = await prompt("Allow this action? (y/n): ");

177 

178 // Retorne permitir ou negar com base na resposta do usuário

179 if (response.toLowerCase() === "y") {

180 // Permitir: ferramenta executa com a entrada original (ou modificada)

181 return { behavior: "allow", updatedInput: input };

182 } else {

183 // Negar: ferramenta não executa, Claude vê a mensagem

184 return { behavior: "deny", message: "User denied this action" };

185 }

186 }

187 }

188 })) {

189 if ("result" in message) console.log(message.result);

190 }

191 ```

192</CodeGroup>

193 

194<Note>

195 Em Python, `can_use_tool` requer [modo de streaming](/pt/agent-sdk/streaming-vs-single-mode) e um hook `PreToolUse` que retorna `{"continue_": True}` para manter o fluxo aberto. Sem este hook, o fluxo fecha antes que o callback de permissão possa ser invocado.

196</Note>

197 

198Este exemplo usa um fluxo s/n onde qualquer entrada diferente de `s` é tratada como uma negação. Na prática, você pode construir uma interface de usuário mais rica que permite aos usuários modificar a solicitação, fornecer feedback ou redirecionar Claude completamente. Veja [Responder a solicitações de ferramentas](#respond-to-tool-requests) para todas as maneiras que você pode responder.

199 

200### Responder a solicitações de ferramentas

201 

202Seu callback retorna um de dois tipos de resposta:

203 

204| Resposta | Python | TypeScript |

205| ------------ | ------------------------------------------ | ------------------------------------- |

206| **Permitir** | `PermissionResultAllow(updated_input=...)` | `{ behavior: "allow", updatedInput }` |

207| **Negar** | `PermissionResultDeny(message=...)` | `{ behavior: "deny", message }` |

208 

209Ao permitir, passe a entrada da ferramenta (original ou modificada). Ao negar, forneça uma mensagem explicando por quê. Claude vê esta mensagem e pode ajustar sua abordagem.

210 

211<CodeGroup>

212 ```python Python theme={null}

213 from claude_agent_sdk.types import PermissionResultAllow, PermissionResultDeny

214 

215 # Permita que a ferramenta execute

216 return PermissionResultAllow(updated_input=input_data)

217 

218 # Bloqueie a ferramenta

219 return PermissionResultDeny(message="User rejected this action")

220 ```

221 

222 ```typescript TypeScript theme={null}

223 // Permita que a ferramenta execute

224 return { behavior: "allow", updatedInput: input };

225 

226 // Bloqueie a ferramenta

227 return { behavior: "deny", message: "User rejected this action" };

228 ```

229</CodeGroup>

230 

231Além de permitir ou negar, você pode modificar a entrada da ferramenta ou fornecer contexto que ajude Claude a ajustar sua abordagem:

232 

233* **Aprovar**: deixe a ferramenta executar conforme Claude solicitou

234* **Aprovar com alterações**: modifique a entrada antes da execução (por exemplo, sanitize caminhos, adicione restrições)

235* **Rejeitar**: bloqueie a ferramenta e diga ao Claude por quê

236* **Sugerir alternativa**: bloqueie mas guie Claude para o que o usuário quer em vez disso

237* **Redirecionar completamente**: use [entrada de streaming](/pt/agent-sdk/streaming-vs-single-mode) para enviar ao Claude uma instrução completamente nova

238 

239<Tabs>

240 <Tab title="Aprovar">

241 O usuário aprova a ação como está. Passe a `input` do seu callback inalterada e a ferramenta executa exatamente como Claude solicitou.

242 

243 <CodeGroup>

244 ```python Python theme={null}

245 async def can_use_tool(tool_name, input_data, context):

246 print(f"Claude wants to use {tool_name}")

247 approved = await ask_user("Allow this action?")

248 

249 if approved:

250 return PermissionResultAllow(updated_input=input_data)

251 return PermissionResultDeny(message="User declined")

252 ```

253 

254 ```typescript TypeScript theme={null}

255 canUseTool: async (toolName, input) => {

256 console.log(`Claude wants to use ${toolName}`);

257 const approved = await askUser("Allow this action?");

258 

259 if (approved) {

260 return { behavior: "allow", updatedInput: input };

261 }

262 return { behavior: "deny", message: "User declined" };

263 };

264 ```

265 </CodeGroup>

266 </Tab>

267 

268 <Tab title="Aprovar com alterações">

269 O usuário aprova mas quer modificar a solicitação primeiro. Você pode alterar a entrada antes da ferramenta executar. Claude vê o resultado mas não é informado de que você alterou nada. Útil para sanitizar parâmetros, adicionar restrições ou escopar acesso.

270 

271 <CodeGroup>

272 ```python Python theme={null}

273 async def can_use_tool(tool_name, input_data, context):

274 if tool_name == "Bash":

275 # Usuário aprovou, mas escope todos os comandos para sandbox

276 sandboxed_input = {**input_data}

277 sandboxed_input["command"] = input_data["command"].replace(

278 "/tmp", "/tmp/sandbox"

279 )

280 return PermissionResultAllow(updated_input=sandboxed_input)

281 return PermissionResultAllow(updated_input=input_data)

282 ```

283 

284 ```typescript TypeScript theme={null}

285 canUseTool: async (toolName, input) => {

286 if (toolName === "Bash") {

287 // Usuário aprovou, mas escope todos os comandos para sandbox

288 const sandboxedInput = {

289 ...input,

290 command: input.command.replace("/tmp", "/tmp/sandbox")

291 };

292 return { behavior: "allow", updatedInput: sandboxedInput };

293 }

294 return { behavior: "allow", updatedInput: input };

295 };

296 ```

297 </CodeGroup>

298 </Tab>

299 

300 <Tab title="Rejeitar">

301 O usuário não quer que esta ação aconteça. Bloqueie a ferramenta e forneça uma mensagem explicando por quê. Claude vê esta mensagem e pode tentar uma abordagem diferente.

302 

303 <CodeGroup>

304 ```python Python theme={null}

305 async def can_use_tool(tool_name, input_data, context):

306 approved = await ask_user(f"Allow {tool_name}?")

307 

308 if not approved:

309 return PermissionResultDeny(message="User rejected this action")

310 return PermissionResultAllow(updated_input=input_data)

311 ```

312 

313 ```typescript TypeScript theme={null}

314 canUseTool: async (toolName, input) => {

315 const approved = await askUser(`Allow ${toolName}?`);

316 

317 if (!approved) {

318 return {

319 behavior: "deny",

320 message: "User rejected this action"

321 };

322 }

323 return { behavior: "allow", updatedInput: input };

324 };

325 ```

326 </CodeGroup>

327 </Tab>

328 

329 <Tab title="Sugerir alternativa">

330 O usuário não quer esta ação específica, mas tem uma ideia diferente. Bloqueie a ferramenta e inclua orientação em sua mensagem. Claude lerá isso e decidirá como proceder com base em seu feedback.

331 

332 <CodeGroup>

333 ```python Python theme={null}

334 async def can_use_tool(tool_name, input_data, context):

335 if tool_name == "Bash" and "rm" in input_data.get("command", ""):

336 # Usuário não quer deletar, sugira arquivar em vez disso

337 return PermissionResultDeny(

338 message="User doesn't want to delete files. They asked if you could compress them into an archive instead."

339 )

340 return PermissionResultAllow(updated_input=input_data)

341 ```

342 

343 ```typescript TypeScript theme={null}

344 canUseTool: async (toolName, input) => {

345 if (toolName === "Bash" && input.command.includes("rm")) {

346 // Usuário não quer deletar, sugira arquivar em vez disso

347 return {

348 behavior: "deny",

349 message:

350 "User doesn't want to delete files. They asked if you could compress them into an archive instead."

351 };

352 }

353 return { behavior: "allow", updatedInput: input };

354 };

355 ```

356 </CodeGroup>

357 </Tab>

358 

359 <Tab title="Redirecionar completamente">

360 Para uma mudança completa de direção (não apenas um empurrão), use [entrada de streaming](/pt/agent-sdk/streaming-vs-single-mode) para enviar ao Claude uma nova instrução diretamente. Isso ignora a solicitação de ferramenta atual e dá ao Claude instruções completamente novas para seguir.

361 </Tab>

362</Tabs>

363 

364## Lidar com perguntas de esclarecimento

365 

366Quando Claude precisa de mais direção em uma tarefa com múltiplas abordagens válidas, ele chama a ferramenta `AskUserQuestion`. Isso aciona seu callback `canUseTool` com `toolName` definido como `AskUserQuestion`. A entrada contém as perguntas do Claude como opções de múltipla escolha, que você exibe ao usuário e retorna suas seleções.

367 

368<Tip>

369 Perguntas de esclarecimento são especialmente comuns no [modo `plan`](/pt/agent-sdk/permissions#plan-mode-plan), onde Claude explora a base de código e faz perguntas antes de propor um plano. Isso torna o modo plan ideal para fluxos de trabalho interativos onde você quer que Claude reúna requisitos antes de fazer alterações.

370</Tip>

371 

372Os passos a seguir mostram como lidar com perguntas de esclarecimento:

373 

374<Steps>

375 <Step title="Passe um callback canUseTool">

376 Passe um callback `canUseTool` nas opções de sua consulta. Por padrão, `AskUserQuestion` está disponível. Se você especificar um array `tools` para restringir as capacidades do Claude (por exemplo, um agente somente leitura com apenas `Read`, `Glob` e `Grep`), inclua `AskUserQuestion` nesse array. Caso contrário, Claude não será capaz de fazer perguntas de esclarecimento:

377 

378 <CodeGroup>

379 ```python Python theme={null}

380 async for message in query(

381 prompt="Analyze this codebase",

382 options=ClaudeAgentOptions(

383 # Inclua AskUserQuestion em sua lista de ferramentas

384 tools=["Read", "Glob", "Grep", "AskUserQuestion"],

385 can_use_tool=can_use_tool,

386 ),

387 ):

388 print(message)

389 ```

390 

391 ```typescript TypeScript theme={null}

392 for await (const message of query({

393 prompt: "Analyze this codebase",

394 options: {

395 // Inclua AskUserQuestion em sua lista de ferramentas

396 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

397 canUseTool: async (toolName, input) => {

398 // Lidar com perguntas de esclarecimento aqui

399 }

400 }

401 })) {

402 console.log(message);

403 }

404 ```

405 </CodeGroup>

406 </Step>

407 

408 <Step title="Detecte AskUserQuestion">

409 Em seu callback, verifique se `toolName` é igual a `AskUserQuestion` para tratá-lo diferentemente de outras ferramentas:

410 

411 <CodeGroup>

412 ```python Python theme={null}

413 async def can_use_tool(tool_name: str, input_data: dict, context):

414 if tool_name == "AskUserQuestion":

415 # Sua implementação para coletar respostas do usuário

416 return await handle_clarifying_questions(input_data)

417 # Lidar com outras ferramentas normalmente

418 return await prompt_for_approval(tool_name, input_data)

419 ```

420 

421 ```typescript TypeScript theme={null}

422 canUseTool: async (toolName, input) => {

423 if (toolName === "AskUserQuestion") {

424 // Sua implementação para coletar respostas do usuário

425 return handleClarifyingQuestions(input);

426 }

427 // Lidar com outras ferramentas normalmente

428 return promptForApproval(toolName, input);

429 };

430 ```

431 </CodeGroup>

432 </Step>

433 

434 <Step title="Analise a entrada da pergunta">

435 A entrada contém as perguntas do Claude em um array `questions`. Cada pergunta tem uma `question` (o texto a exibir), `options` (as escolhas) e `multiSelect` (se múltiplas seleções são permitidas):

436 

437 ```json theme={null}

438 {

439 "questions": [

440 {

441 "question": "How should I format the output?",

442 "header": "Format",

443 "options": [

444 { "label": "Summary", "description": "Brief overview" },

445 { "label": "Detailed", "description": "Full explanation" }

446 ],

447 "multiSelect": false

448 },

449 {

450 "question": "Which sections should I include?",

451 "header": "Sections",

452 "options": [

453 { "label": "Introduction", "description": "Opening context" },

454 { "label": "Conclusion", "description": "Final summary" }

455 ],

456 "multiSelect": true

457 }

458 ]

459 }

460 ```

461 

462 Veja [Formato de pergunta](#question-format) para descrições completas de campos.

463 </Step>

464 

465 <Step title="Colete respostas do usuário">

466 Apresente as perguntas ao usuário e colete suas seleções. Como você faz isso depende de seu aplicativo: um prompt de terminal, um formulário web, um diálogo móvel, etc.

467 </Step>

468 

469 <Step title="Retorne respostas ao Claude">

470 Construa o objeto `answers` como um registro onde cada chave é o texto `question` e cada valor é o `label` da opção selecionada:

471 

472 | Do objeto de pergunta | Use como |

473 | ------------------------------------------------------------------- | -------- |

474 | Campo `question` (por exemplo, `"How should I format the output?"`) | Chave |

475 | Campo `label` da opção selecionada (por exemplo, `"Summary"`) | Valor |

476 

477 Para perguntas de seleção múltipla, passe um array de labels ou junte-os com `", "`. Se você [suportar entrada de texto livre](#support-free-text-input), use o texto personalizado do usuário como o valor.

478 

479 <CodeGroup>

480 ```python Python theme={null}

481 return PermissionResultAllow(

482 updated_input={

483 "questions": input_data.get("questions", []),

484 "answers": {

485 "How should I format the output?": "Summary",

486 "Which sections should I include?": ["Introduction", "Conclusion"],

487 },

488 }

489 )

490 ```

491 

492 ```typescript TypeScript theme={null}

493 return {

494 behavior: "allow",

495 updatedInput: {

496 questions: input.questions,

497 answers: {

498 "How should I format the output?": "Summary",

499 "Which sections should I include?": "Introduction, Conclusion"

500 }

501 }

502 };

503 ```

504 </CodeGroup>

505 </Step>

506</Steps>

507 

508### Formato de pergunta

509 

510A entrada contém as perguntas geradas pelo Claude em um array `questions`. Cada pergunta tem estes campos:

511 

512| Campo | Descrição |

513| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |

514| `question` | O texto completo da pergunta a exibir |

515| `header` | Rótulo curto para a pergunta (máximo 12 caracteres) |

516| `options` | Array de 2-4 escolhas, cada uma com `label` e `description`. TypeScript: opcionalmente `preview` (veja [abaixo](#option-previews-type-script)) |

517| `multiSelect` | Se `true`, os usuários podem selecionar múltiplas opções |

518 

519A estrutura que seu callback recebe:

520 

521```json theme={null}

522{

523 "questions": [

524 {

525 "question": "How should I format the output?",

526 "header": "Format",

527 "options": [

528 { "label": "Summary", "description": "Brief overview of key points" },

529 { "label": "Detailed", "description": "Full explanation with examples" }

530 ],

531 "multiSelect": false

532 }

533 ]

534}

535```

536 

537#### Visualizações de opção (TypeScript)

538 

539`toolConfig.askUserQuestion.previewFormat` adiciona um campo `preview` a cada opção para que seu aplicativo possa mostrar uma simulação visual ao lado do rótulo. Sem esta configuração, Claude não gera visualizações e o campo está ausente.

540 

541| `previewFormat` | `preview` contém |

542| :-------------------- | :------------------------------------------------------------------------------------------------------------------------- |

543| não definido (padrão) | Campo está ausente. Claude não gera visualizações. |

544| `"markdown"` | Arte ASCII e blocos de código cercados |

545| `"html"` | Um fragmento `<div>` estilizado (o SDK rejeita `<script>`, `<style>` e `<!DOCTYPE>` antes que seu callback seja executado) |

546 

547O formato se aplica a todas as perguntas na sessão. Claude inclui `preview` em opções onde uma comparação visual ajuda (escolhas de layout, esquemas de cores) e a omite onde não ajudaria (confirmações sim/não, escolhas apenas de texto). Verifique se há `undefined` antes de renderizar.

548 

549```typescript theme={null}

550import { query } from "@anthropic-ai/claude-agent-sdk";

551 

552for await (const message of query({

553 prompt: "Help me choose a card layout",

554 options: {

555 toolConfig: {

556 askUserQuestion: { previewFormat: "html" }

557 },

558 canUseTool: async (toolName, input) => {

559 // input.questions[].options[].preview é uma string HTML ou undefined

560 return { behavior: "allow", updatedInput: input };

561 }

562 }

563})) {

564 // ...

565}

566```

567 

568Uma opção com uma visualização HTML:

569 

570```json theme={null}

571{

572 "label": "Compact",

573 "description": "Title and metric value only",

574 "preview": "<div style=\"padding:12px;border:1px solid #ddd;border-radius:8px\"><div style=\"font-size:12px;color:#666\">Active users</div><div style=\"font-size:28px;font-weight:600\">1,284</div></div>"

575}

576```

577 

578### Formato de resposta

579 

580Retorne um objeto `answers` mapeando cada campo `question` da pergunta para o `label` da opção selecionada:

581 

582| Campo | Descrição |

583| ----------- | ----------------------------------------------------------------------------------- |

584| `questions` | Passe o array de perguntas original (obrigatório para processamento de ferramentas) |

585| `answers` | Objeto onde as chaves são texto de pergunta e os valores são labels selecionados |

586 

587Para perguntas de seleção múltipla, passe um array de labels ou junte-os com `", "`. Para entrada de texto livre, use o texto personalizado do usuário diretamente.

588 

589```json theme={null}

590{

591 "questions": [

592 // ...

593 ],

594 "answers": {

595 "How should I format the output?": "Summary",

596 "Which sections should I include?": ["Introduction", "Conclusion"]

597 }

598}

599```

600 

601#### Suporte para entrada de texto livre

602 

603As opções predefinidas do Claude nem sempre cobrirão o que os usuários querem. Para permitir que os usuários digitem sua própria resposta:

604 

605* Exiba uma escolha "Outro" adicional após as opções do Claude que aceita entrada de texto

606* Use o texto personalizado do usuário como o valor da resposta (não a palavra "Outro")

607 

608Veja o [exemplo completo](#complete-example) abaixo para uma implementação completa.

609 

610### Exemplo completo

611 

612Claude faz perguntas de esclarecimento quando precisa de entrada do usuário para prosseguir. Por exemplo, quando solicitado a ajudar a decidir sobre uma pilha de tecnologia para um aplicativo móvel, Claude pode perguntar sobre cross-platform vs nativo, preferências de backend ou plataformas alvo. Essas perguntas ajudam Claude a tomar decisões que correspondem às preferências do usuário em vez de adivinhar.

613 

614Este exemplo lida com essas perguntas em um aplicativo de terminal. Aqui está o que acontece em cada etapa:

615 

6161. **Rotear a solicitação**: O callback `canUseTool` verifica se o nome da ferramenta é `"AskUserQuestion"` e roteia para um manipulador dedicado

6172. **Exibir perguntas**: O manipulador percorre o array `questions` e imprime cada pergunta com opções numeradas

6183. **Coletar entrada**: O usuário pode inserir um número para selecionar uma opção ou digitar texto livre diretamente (por exemplo, "jquery", "não sei")

6194. **Mapear respostas**: O código verifica se a entrada é numérica (usa o label da opção) ou texto livre (usa o texto diretamente)

6205. **Retornar ao Claude**: A resposta inclui tanto o array `questions` original quanto o mapeamento `answers`

621 

622<CodeGroup>

623 ```python Python theme={null}

624 import asyncio

625 

626 from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

627 from claude_agent_sdk.types import HookMatcher, PermissionResultAllow

628 

629 

630 def parse_response(response: str, options: list) -> str:

631 """Analise a entrada do usuário como número(s) de opção ou texto livre."""

632 try:

633 indices = [int(s.strip()) - 1 for s in response.split(",")]

634 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]

635 return ", ".join(labels) if labels else response

636 except ValueError:

637 return response

638 

639 

640 async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:

641 """Exiba as perguntas do Claude e colete respostas do usuário."""

642 answers = {}

643 

644 for q in input_data.get("questions", []):

645 print(f"\n{q['header']}: {q['question']}")

646 

647 options = q["options"]

648 for i, opt in enumerate(options):

649 print(f" {i + 1}. {opt['label']} - {opt['description']}")

650 if q.get("multiSelect"):

651 print(" (Enter numbers separated by commas, or type your own answer)")

652 else:

653 print(" (Enter a number, or type your own answer)")

654 

655 response = input("Your choice: ").strip()

656 answers[q["question"]] = parse_response(response, options)

657 

658 return PermissionResultAllow(

659 updated_input={

660 "questions": input_data.get("questions", []),

661 "answers": answers,

662 }

663 )

664 

665 

666 async def can_use_tool(

667 tool_name: str, input_data: dict, context

668 ) -> PermissionResultAllow:

669 # Rotear AskUserQuestion para nosso manipulador de perguntas

670 if tool_name == "AskUserQuestion":

671 return await handle_ask_user_question(input_data)

672 # Auto-aprovar outras ferramentas para este exemplo

673 return PermissionResultAllow(updated_input=input_data)

674 

675 

676 async def prompt_stream():

677 yield {

678 "type": "user",

679 "message": {

680 "role": "user",

681 "content": "Help me decide on the tech stack for a new mobile app",

682 },

683 }

684 

685 

686 # Solução alternativa necessária: hook fictício mantém o fluxo aberto para can_use_tool

687 async def dummy_hook(input_data, tool_use_id, context):

688 return {"continue_": True}

689 

690 

691 async def main():

692 async for message in query(

693 prompt=prompt_stream(),

694 options=ClaudeAgentOptions(

695 can_use_tool=can_use_tool,

696 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

697 ),

698 ):

699 if isinstance(message, ResultMessage) and message.subtype == "success":

700 print(message.result)

701 

702 

703 asyncio.run(main())

704 ```

705 

706 ```typescript TypeScript theme={null}

707 import { query } from "@anthropic-ai/claude-agent-sdk";

708 import * as readline from "readline/promises";

709 

710 // Auxiliar para solicitar entrada do usuário no terminal

711 async function prompt(question: string): Promise<string> {

712 const rl = readline.createInterface({ input: process.stdin, output: process.stdout });

713 const answer = await rl.question(question);

714 rl.close();

715 return answer;

716 }

717 

718 // Analise a entrada do usuário como número(s) de opção ou texto livre

719 function parseResponse(response: string, options: any[]): string {

720 const indices = response.split(",").map((s) => parseInt(s.trim()) - 1);

721 const labels = indices

722 .filter((i) => !isNaN(i) && i >= 0 && i < options.length)

723 .map((i) => options[i].label);

724 return labels.length > 0 ? labels.join(", ") : response;

725 }

726 

727 // Exiba as perguntas do Claude e colete respostas do usuário

728 async function handleAskUserQuestion(input: any) {

729 const answers: Record<string, string> = {};

730 

731 for (const q of input.questions) {

732 console.log(`\n${q.header}: ${q.question}`);

733 

734 const options = q.options;

735 options.forEach((opt: any, i: number) => {

736 console.log(` ${i + 1}. ${opt.label} - ${opt.description}`);

737 });

738 if (q.multiSelect) {

739 console.log(" (Enter numbers separated by commas, or type your own answer)");

740 } else {

741 console.log(" (Enter a number, or type your own answer)");

742 }

743 

744 const response = (await prompt("Your choice: ")).trim();

745 answers[q.question] = parseResponse(response, options);

746 }

747 

748 // Retorne as respostas ao Claude (deve incluir perguntas originais)

749 return {

750 behavior: "allow",

751 updatedInput: { questions: input.questions, answers }

752 };

753 }

754 

755 async function main() {

756 for await (const message of query({

757 prompt: "Help me decide on the tech stack for a new mobile app",

758 options: {

759 canUseTool: async (toolName, input) => {

760 // Rotear AskUserQuestion para nosso manipulador de perguntas

761 if (toolName === "AskUserQuestion") {

762 return handleAskUserQuestion(input);

763 }

764 // Auto-aprovar outras ferramentas para este exemplo

765 return { behavior: "allow", updatedInput: input };

766 }

767 }

768 })) {

769 if ("result" in message) console.log(message.result);

770 }

771 }

772 

773 main();

774 ```

775</CodeGroup>

776 

777## Limitações

778 

779* **Subagentes**: `AskUserQuestion` não está disponível em subagentes gerados por meio da ferramenta Agent

780* **Limites de perguntas**: cada chamada `AskUserQuestion` suporta 1-4 perguntas com 2-4 opções cada

781 

782## Outras maneiras de obter entrada do usuário

783 

784O callback `canUseTool` e a ferramenta `AskUserQuestion` cobrem a maioria dos cenários de aprovação e esclarecimento, mas o SDK oferece outras maneiras de obter entrada dos usuários:

785 

786### Entrada de streaming

787 

788Use [entrada de streaming](/pt/agent-sdk/streaming-vs-single-mode) quando você precisar:

789 

790* **Interromper o agente no meio da tarefa**: enviar um sinal de cancelamento ou mudar de direção enquanto Claude está trabalhando

791* **Fornecer contexto adicional**: adicionar informações que Claude precisa sem esperar que ele pergunte

792* **Construir interfaces de chat**: permitir que os usuários enviem mensagens de acompanhamento durante operações de longa duração

793 

794A entrada de streaming é ideal para interfaces conversacionais onde os usuários interagem com o agente durante toda a execução, não apenas em pontos de aprovação.

795 

796### Ferramentas personalizadas

797 

798Use [ferramentas personalizadas](/pt/agent-sdk/custom-tools) quando você precisar:

799 

800* **Coletar entrada estruturada**: construir formulários, assistentes ou fluxos de trabalho de várias etapas que vão além do formato de múltipla escolha do `AskUserQuestion`

801* **Integrar sistemas de aprovação externos**: conectar a plataformas de ticketing, fluxo de trabalho ou aprovação existentes

802* **Implementar interações específicas do domínio**: criar ferramentas adaptadas às necessidades do seu aplicativo, como interfaces de revisão de código ou listas de verificação de implantação

803 

804As ferramentas personalizadas lhe dão controle total sobre a interação, mas requerem mais trabalho de implementação do que usar o callback `canUseTool` integrado.

805 

806## Recursos relacionados

807 

808* [Configurar permissões](/pt/agent-sdk/permissions): configurar modos e regras de permissão

809* [Controlar execução com hooks](/pt/agent-sdk/hooks): executar código personalizado em pontos-chave do ciclo de vida do agente

810* [Referência do SDK TypeScript](/pt/agent-sdk/typescript#canusetool): documentação completa da API canUseTool

Details

24* [Inspecionar sua configuração efetiva](#inspect-the-defaults-and-your-effective-config) com os subcomandos `claude auto-mode`24* [Inspecionar sua configuração efetiva](#inspect-the-defaults-and-your-effective-config) com os subcomandos `claude auto-mode`

25* [Revisar negações](#review-denials) para saber o que adicionar a seguir25* [Revisar negações](#review-denials) para saber o que adicionar a seguir

26 26 

27## Where the classifier reads configuration27## Onde o classificador a configuração

28 28 

29O classificador lê o mesmo conteúdo [CLAUDE.md](/pt/memory) que o próprio Claude carrega, portanto uma instrução como "nunca force push" no CLAUDE.md do seu projeto orienta tanto Claude quanto o classificador ao mesmo tempo. Comece ali para convenções de projeto e regras de comportamento.29O classificador lê o mesmo conteúdo [CLAUDE.md](/pt/memory) que o próprio Claude carrega, portanto uma instrução como "nunca force push" no CLAUDE.md do seu projeto orienta tanto Claude quanto o classificador ao mesmo tempo. Comece ali para convenções de projeto e regras de comportamento.

30 30 


39 39 

40O classificador não lê `autoMode` de configurações de projeto compartilhadas em `.claude/settings.json`, portanto um repositório verificado não pode injetar suas próprias regras de permissão.40O classificador não lê `autoMode` de configurações de projeto compartilhadas em `.claude/settings.json`, portanto um repositório verificado não pode injetar suas próprias regras de permissão.

41 41 

42As entradas de cada escopo são combinadas. Um desenvolvedor pode estender `environment`, `allow` e `soft_deny` com entradas pessoais, mas não pode remover entradas que as configurações gerenciadas fornecem. Como as regras de permissão atuam como exceções às regras de bloqueio dentro do classificador, uma entrada `allow` adicionada por um desenvolvedor pode substituir uma entrada `soft_deny` da organização: a combinação é aditiva, não um limite de política rígida.42As entradas de cada escopo são combinadas. Um desenvolvedor pode estender `environment`, `allow`, `soft_deny` e `hard_deny` com entradas pessoais, mas não pode remover entradas que as configurações gerenciadas fornecem. Como as regras de permissão atuam como exceções às regras de bloqueio suave dentro do classificador, uma entrada `allow` adicionada por um desenvolvedor pode substituir uma entrada `soft_deny` da organização: a combinação é aditiva, não um limite de política rígida.

43 43 

44<Note>44<Note>

45 O classificador é um segundo portão que é executado após o [sistema de permissões](/pt/permissions). Para ações que nunca devem ser executadas, independentemente da intenção do usuário ou da configuração do classificador, use `permissions.deny` em configurações gerenciadas, que bloqueia a ação antes do classificador ser consultado e não pode ser substituída.45 O classificador é um segundo portão que é executado após o [sistema de permissões](/pt/permissions). Para ações que nunca devem ser executadas, independentemente da intenção do usuário ou da configuração do classificador, use `permissions.deny` em configurações gerenciadas, que bloqueia a ação antes do classificador ser consultado e não pode ser substituída.


99 99 

100## Substituir as regras de bloqueio e permissão100## Substituir as regras de bloqueio e permissão

101 101 

102Dois campos adicionais permitem que você substitua as listas de regras integradas do classificador: `autoMode.soft_deny` controla o que é bloqueado e `autoMode.allow` controla quais exceções se aplicam. Cada um é uma matriz de descrições em prosa, lidas como regras em linguagem natural. Não há campo `autoMode.deny`; para bloquear uma ação de forma rígida, independentemente da intenção, use [`permissions.deny`](/pt/permissions), que é executado antes do classificador.102Três campos adicionais permitem que você substitua as listas de regras integradas do classificador: `autoMode.hard_deny` para limites de segurança incondicionais, `autoMode.soft_deny` para ações destrutivas que a intenção do usuário pode contornar, e `autoMode.allow` para exceções. Cada um é uma matriz de descrições em prosa, lidas como regras em linguagem natural. Para bloqueios baseados em padrões de ferramentas que são executados antes do classificador, use [`permissions.deny`](/pt/permissions).

103 103 

104Dentro do classificador, a precedência funciona em três camadas:104Dentro do classificador, a precedência funciona em quatro camadas:

105 105 

106* Regras `soft_deny` bloqueiam primeiro106* Regras `hard_deny` bloqueiam incondicionalmente. A intenção do usuário e exceções `allow` não se aplicam.

107* Regras `allow` então substituem bloqueios correspondentes como exceções107* Regras `soft_deny` bloqueiam em seguida. A intenção do usuário e exceções `allow` podem substituir estas.

108* A intenção explícita do usuário substitui ambas: se a mensagem do usuário descreve direta e especificamente a ação exata que Claude está prestes a executar, o classificador a permite mesmo quando uma regra `soft_deny` corresponde108* Regras `allow` então substituem regras `soft_deny` correspondentes como exceções.

109* A intenção explícita do usuário substitui os bloqueios soft restantes: se a mensagem do usuário descreve direta e especificamente a ação exata que Claude está prestes a executar, o classificador a permite mesmo quando uma regra `soft_deny` corresponde.

109 110 

110Solicitações gerais não contam como intenção explícita. Pedir ao Claude para "limpar o repositório" não autoriza force-push, mas pedir ao Claude para "force-push este branch" autoriza.111Solicitações gerais não contam como intenção explícita. Pedir ao Claude para "limpar o repositório" não autoriza force-push, mas pedir ao Claude para "force-push este branch" autoriza.

111 112 

112Para afrouxar, adicione a `allow` quando o classificador sinalizar repetidamente um padrão rotineiro que as exceções padrão não cobrem. Para apertar, adicione a `soft_deny` para riscos específicos do seu ambiente que os padrões perdem. Para manter as regras integradas enquanto adiciona as suas próprias, inclua a string literal `"$defaults"` na matriz. As regras padrão são inseridas nessa posição, portanto suas regras personalizadas podem vir antes ou depois delas, e você continua a herdar atualizações conforme a lista integrada muda entre versões.113Para afrouxar, adicione a `allow` quando o classificador sinalizar repetidamente um padrão rotineiro que as exceções padrão não cobrem. Para apertar, adicione a `soft_deny` para riscos destrutivos específicos do seu ambiente que os padrões perdem, ou a `hard_deny` para limites de segurança que nunca devem ser ultrapassados. Para manter as regras integradas enquanto adiciona as suas próprias, inclua a string literal `"$defaults"` na matriz. As regras padrão são inseridas nessa posição, portanto suas regras personalizadas podem vir antes ou depois delas, e você continua a herdar atualizações conforme a lista integrada muda entre versões.

113 114 

114```json theme={null}115```json theme={null}

115{116{


127 "$defaults",128 "$defaults",

128 "Never run database migrations outside the migrations CLI, even against dev databases",129 "Never run database migrations outside the migrations CLI, even against dev databases",

129 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"130 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"

131 ],

132 "hard_deny": [

133 "$defaults",

134 "Never send repository contents to third-party code-review APIs"

130 ]135 ]

131 }136 }

132}137}

133```138```

134 139 

135<Danger>140<Danger>

136 Definir qualquer um de `environment`, `allow` ou `soft_deny` sem `"$defaults"` substitui a lista padrão inteira para essa seção. Se você definir `soft_deny` com uma única entrada e omitir `"$defaults"`, todas as regras de bloqueio integradas serão descartadas: force push, exfiltração de dados, `curl | bash`, implantações em produção e todas as outras regras de bloqueio padrão se tornam permitidas. Omita `"$defaults"` apenas quando você pretender assumir a propriedade total da lista. Nesse caso, execute `claude auto-mode defaults` para imprimir as regras integradas, copie-as para seu arquivo de configurações e depois revise cada regra em relação ao seu próprio pipeline e tolerância ao risco.141 Definir qualquer um de `environment`, `allow`, `soft_deny` ou `hard_deny` sem `"$defaults"` substitui a lista padrão inteira para essa seção. Uma matriz `soft_deny` sem `"$defaults"` descarta todas as regras de bloqueio integradas, incluindo force push, `curl | bash` e implantações em produção. Uma matriz `hard_deny` sem `"$defaults"` descarta as regras integradas de exfiltração de dados e bypass de verificação de segurança.

137</Danger>142</Danger>

138 143 

139Cada seção é avaliada independentemente, portanto definir `environment` sozinho deixa as listas padrão `allow` e `soft_deny` intactas.144Cada seção é avaliada independentemente, portanto definir `environment` sozinho deixa as listas padrão `allow`, `soft_deny` e `hard_deny` intactas. Omita `"$defaults"` apenas quando você pretender assumir a propriedade total da lista. Para fazer isso com segurança, execute `claude auto-mode defaults` para imprimir as regras integradas, copie-as para seu arquivo de configurações e depois revise cada regra em relação ao seu próprio pipeline e tolerância ao risco.

140 145 

141## Inspecione os padrões e sua configuração efetiva146## Inspecione os padrões e sua configuração efetiva

142 147 

143Três subcomandos CLI ajudam você a inspecionar e validar sua configuração.148Três subcomandos CLI ajudam você a inspecionar e validar sua configuração.

144 149 

145Imprima as regras `environment`, `allow` e `soft_deny` integradas como JSON:150Imprima as regras `environment`, `allow`, `soft_deny` e `hard_deny` integradas como JSON:

146 151 

147```bash theme={null}152```bash theme={null}

148claude auto-mode defaults153claude auto-mode defaults


154claude auto-mode config159claude auto-mode config

155```160```

156 161 

157Obtenha feedback de IA sobre suas regras `allow` e `soft_deny` personalizadas:162Obtenha feedback de IA sobre suas regras `allow`, `soft_deny` e `hard_deny` personalizadas:

158 163 

159```bash theme={null}164```bash theme={null}

160claude auto-mode critique165claude auto-mode critique

commands.md +3 −2

Details

46| `/btw <question>` | Fazer uma [pergunta rápida](/pt/interactive-mode#side-questions-with-%2Fbtw) sem adicionar à conversa |46| `/btw <question>` | Fazer uma [pergunta rápida](/pt/interactive-mode#side-questions-with-%2Fbtw) sem adicionar à conversa |

47| `/chrome` | Configurar configurações do [Claude no Chrome](/pt/chrome) |47| `/chrome` | Configurar configurações do [Claude no Chrome](/pt/chrome) |

48| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/pt/skills#bundled-skills).** Carregar material de referência da API Claude para a linguagem do seu projeto (Python, TypeScript, Java, Go, Ruby, C#, PHP ou cURL) e referência de Managed Agents. Cobre uso de ferramentas, streaming, lotes, saídas estruturadas e armadilhas comuns. Também ativa automaticamente quando seu código importa `anthropic` ou `@anthropic-ai/sdk`. Execute `/claude-api migrate` para atualizar o código existente da API Claude para um modelo mais recente: Claude pergunta quais arquivos verificar e qual modelo direcionar, depois atualiza IDs de modelo, configuração de thinking e outros parâmetros que mudaram entre versões. Execute `/claude-api managed-agents-onboard` para um passo a passo interativo que cria um novo Managed Agent do zero |48| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/pt/skills#bundled-skills).** Carregar material de referência da API Claude para a linguagem do seu projeto (Python, TypeScript, Java, Go, Ruby, C#, PHP ou cURL) e referência de Managed Agents. Cobre uso de ferramentas, streaming, lotes, saídas estruturadas e armadilhas comuns. Também ativa automaticamente quando seu código importa `anthropic` ou `@anthropic-ai/sdk`. Execute `/claude-api migrate` para atualizar o código existente da API Claude para um modelo mais recente: Claude pergunta quais arquivos verificar e qual modelo direcionar, depois atualiza IDs de modelo, configuração de thinking e outros parâmetros que mudaram entre versões. Execute `/claude-api managed-agents-onboard` para um passo a passo interativo que cria um novo Managed Agent do zero |

49| `/clear` | Iniciar uma nova conversa com contexto vazio. A conversa anterior permanece disponível em `/resume`. Para liberar contexto enquanto continua a mesma conversa, use `/compact` em vez disso. Aliases: `/reset`, `/new` |49| `/clear [name]` | Iniciar uma nova conversa com contexto vazio. A conversa anterior permanece disponível em `/resume`. Passe um nome para rotular a conversa anterior no seletor `/resume`. Para liberar contexto enquanto continua a mesma conversa, use `/compact` em vez disso. Aliases: `/reset`, `/new` |

50| `/color [color\|default]` | Definir a cor da barra de prompt para a sessão atual. Cores disponíveis: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Use `default` para redefinir, ou execute sem argumento para escolher uma cor aleatória. Quando [Remote Control](/pt/remote-control) está conectado, a cor sincroniza com claude.ai/code |50| `/color [color\|default]` | Definir a cor da barra de prompt para a sessão atual. Cores disponíveis: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Use `default` para redefinir, ou execute sem argumento para escolher uma cor aleatória. Quando [Remote Control](/pt/remote-control) está conectado, a cor sincroniza com claude.ai/code |

51| `/compact [instructions]` | Liberar contexto resumindo a conversa até agora. Opcionalmente, passe instruções de foco para o resumo. Consulte [como a compactação lida com regras, skills e arquivos de memória](/pt/context-window#what-survives-compaction) |51| `/compact [instructions]` | Liberar contexto resumindo a conversa até agora. Opcionalmente, passe instruções de foco para o resumo. Consulte [como a compactação lida com regras, skills e arquivos de memória](/pt/context-window#what-survives-compaction) |

52| `/config` | Abrir a interface de [Configurações](/pt/settings) para ajustar tema, modelo, [estilo de saída](/pt/output-styles) e outras preferências. Alias: `/settings` |52| `/config` | Abrir a interface de [Configurações](/pt/settings) para ajustar tema, modelo, [estilo de saída](/pt/output-styles) e outras preferências. Alias: `/settings` |

53| `/context` | Visualizar o uso atual de contexto como uma grade colorida. Mostra sugestões de otimização para ferramentas pesadas em contexto, inchaço de memória e avisos de capacidade |53| `/context [all]` | Visualizar o uso atual de contexto como uma grade colorida. Mostra sugestões de otimização para ferramentas pesadas em contexto, inchaço de memória e avisos de capacidade. No [modo tela cheia](/pt/fullscreen), o detalhamento por item é recolhido para manter a grade visível. Passe `all` para expandi-lo |

54| `/copy [N]` | Copiar a última resposta do assistente para a área de transferência. Passe um número `N` para copiar a N-ésima resposta mais recente: `/copy 2` copia a segunda mais recente. Quando há blocos de código, mostra um seletor interativo para selecionar blocos individuais ou a resposta completa. Pressione `w` no seletor para escrever a seleção em um arquivo em vez da área de transferência, o que é útil via SSH |54| `/copy [N]` | Copiar a última resposta do assistente para a área de transferência. Passe um número `N` para copiar a N-ésima resposta mais recente: `/copy 2` copia a segunda mais recente. Quando há blocos de código, mostra um seletor interativo para selecionar blocos individuais ou a resposta completa. Pressione `w` no seletor para escrever a seleção em um arquivo em vez da área de transferência, o que é útil via SSH |

55| `/cost` | Alias para `/usage` |55| `/cost` | Alias para `/usage` |

56| `/debug [description]` | **[Skill](/pt/skills#bundled-skills).** Ativar registro de depuração para a sessão atual e solucionar problemas lendo o log de depuração da sessão. O registro de depuração está desativado por padrão, a menos que você tenha iniciado com `claude --debug`, então executar `/debug` no meio da sessão começa a capturar logs a partir desse ponto. Opcionalmente, descreva o problema para focar a análise |56| `/debug [description]` | **[Skill](/pt/skills#bundled-skills).** Ativar registro de depuração para a sessão atual e solucionar problemas lendo o log de depuração da sessão. O registro de depuração está desativado por padrão, a menos que você tenha iniciado com `claude --debug`, então executar `/debug` no meio da sessão começa a capturar logs a partir desse ponto. Opcionalmente, descreva o problema para focar a análise |


88| `/powerup` | Descobrir recursos do Claude Code através de lições interativas rápidas com demos animadas |88| `/powerup` | Descobrir recursos do Claude Code através de lições interativas rápidas com demos animadas |

89| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Removido na v2.1.91. Peça ao Claude diretamente para visualizar comentários de solicitação de pull. Em versões anteriores, busca e exibe comentários de uma solicitação de pull do GitHub; detecta automaticamente o PR para o branch atual, ou passe uma URL ou número de PR. Requer a CLI `gh` |89| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Removido na v2.1.91. Peça ao Claude diretamente para visualizar comentários de solicitação de pull. Em versões anteriores, busca e exibe comentários de uma solicitação de pull do GitHub; detecta automaticamente o PR para o branch atual, ou passe uma URL ou número de PR. Requer a CLI `gh` |

90| `/privacy-settings` | Visualizar e atualizar suas configurações de privacidade. Disponível apenas para assinantes dos planos Pro e Max |90| `/privacy-settings` | Visualizar e atualizar suas configurações de privacidade. Disponível apenas para assinantes dos planos Pro e Max |

91| `/radio` | Abrir Claude FM lo-fi radio em seu navegador. Imprime a URL do stream quando nenhum navegador está disponível. Não disponível no Bedrock, Vertex ou Foundry |

91| `/recap` | Gerar um resumo de uma linha da sessão atual sob demanda. Consulte [Session recap](/pt/interactive-mode#session-recap) para o recap automático que aparece depois que você esteve ausente |92| `/recap` | Gerar um resumo de uma linha da sessão atual sob demanda. Consulte [Session recap](/pt/interactive-mode#session-recap) para o recap automático que aparece depois que você esteve ausente |

92| `/release-notes` | Visualizar o changelog em um seletor de versão interativo. Selecione uma versão específica para ver suas notas de lançamento, ou escolha mostrar todas as versões |93| `/release-notes` | Visualizar o changelog em um seletor de versão interativo. Selecione uma versão específica para ver suas notas de lançamento, ou escolha mostrar todas as versões |

93| `/reload-plugins` | Recarregar todos os [plugins](/pt/plugins) ativos para aplicar alterações pendentes sem reiniciar. Relata contagens para cada componente recarregado e sinaliza quaisquer erros de carregamento |94| `/reload-plugins` | Recarregar todos os [plugins](/pt/plugins) ativos para aplicar alterações pendentes sem reiniciar. Relata contagens para cada componente recarregado e sinaliza quaisquer erros de carregamento |

env-vars.md +3 −1

Details

116| `CLAUDE_CODE_MAX_RETRIES` | Substitua o número de vezes para tentar novamente solicitações de API falhadas (padrão: 10) |116| `CLAUDE_CODE_MAX_RETRIES` | Substitua o número de vezes para tentar novamente solicitações de API falhadas (padrão: 10) |

117| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Número máximo de ferramentas somente leitura e subagentes que podem executar em paralelo (padrão: 10). Valores mais altos aumentam o paralelismo mas consomem mais recursos |117| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Número máximo de ferramentas somente leitura e subagentes que podem executar em paralelo (padrão: 10). Valores mais altos aumentam o paralelismo mas consomem mais recursos |

118| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Defina como `1` para gerar servidores MCP stdio com apenas um ambiente de linha de base segura mais o `env` configurado do servidor, em vez de herdar seu ambiente de shell |118| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Defina como `1` para gerar servidores MCP stdio com apenas um ambiente de linha de base segura mais o `env` configurado do servidor, em vez de herdar seu ambiente de shell |

119| `CLAUDE_CODE_NATIVE_CURSOR` | Defina como `1` para mostrar o cursor próprio do terminal no cursor de entrada em vez de um bloco desenhado. O cursor respeita as configurações de piscar, forma e foco do terminal |

119| `CLAUDE_CODE_NEW_INIT` | Defina como `1` para fazer `/init` executar um fluxo de configuração interativo. O fluxo pergunta quais arquivos gerar, incluindo CLAUDE.md, skills e hooks, antes de explorar a base de código e escrevê-los. Sem essa variável, `/init` gera um CLAUDE.md automaticamente sem solicitar. |120| `CLAUDE_CODE_NEW_INIT` | Defina como `1` para fazer `/init` executar um fluxo de configuração interativo. O fluxo pergunta quais arquivos gerar, incluindo CLAUDE.md, skills e hooks, antes de explorar a base de código e escrevê-los. Sem essa variável, `/init` gera um CLAUDE.md automaticamente sem solicitar. |

120| `CLAUDE_CODE_NO_FLICKER` | Defina como `1` para habilitar [renderização em tela cheia](/pt/fullscreen), uma visualização de pesquisa que reduz cintilação e mantém memória plana em conversas longas. Equivalente à configuração [`tui`](/pt/settings#available-settings); você também pode alternar com `/tui fullscreen` |121| `CLAUDE_CODE_NO_FLICKER` | Defina como `1` para habilitar [renderização em tela cheia](/pt/fullscreen), uma visualização de pesquisa que reduz cintilação e mantém memória plana em conversas longas. Equivalente à configuração [`tui`](/pt/settings#available-settings); você também pode alternar com `/tui fullscreen` |

121| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Token de atualização OAuth para autenticação Claude.ai. Quando definido, `claude auth login` troca esse token diretamente em vez de abrir um navegador. Requer `CLAUDE_CODE_OAUTH_SCOPES`. Útil para provisionar autenticação em ambientes automatizados |122| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Token de atualização OAuth para autenticação Claude.ai. Quando definido, `claude auth login` troca esse token diretamente em vez de abrir um navegador. Requer `CLAUDE_CODE_OAUTH_SCOPES`. Útil para provisionar autenticação em ambientes automatizados |


147| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Pule autenticação Azure para Microsoft Foundry (por exemplo, ao usar um gateway LLM) |148| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Pule autenticação Azure para Microsoft Foundry (por exemplo, ao usar um gateway LLM) |

148| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Pule autenticação AWS para Bedrock Mantle (por exemplo, ao usar um gateway LLM) |149| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Pule autenticação AWS para Bedrock Mantle (por exemplo, ao usar um gateway LLM) |

149| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Defina como `1` para pular a escrita de histórico de prompt e transcrições de sessão em disco. Sessões iniciadas com essa variável definida não aparecem em `--resume`, `--continue` ou histórico de seta para cima. Útil para sessões com script efêmeras |150| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Defina como `1` para pular a escrita de histórico de prompt e transcrições de sessão em disco. Sessões iniciadas com essa variável definida não aparecem em `--resume`, `--continue` ou histórico de seta para cima. Útil para sessões com script efêmeras |

150| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Pule autenticação Google para Vertex (por exemplo, ao usar um gateway LLM) |151| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Pule autenticação Google para Vertex (por exemplo, ao usando um gateway LLM) |

151| `CLAUDE_CODE_SUBAGENT_MODEL` | Veja [Configuração de modelo](/pt/model-config) |152| `CLAUDE_CODE_SUBAGENT_MODEL` | Veja [Configuração de modelo](/pt/model-config) |

152| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Defina como `1` para remover credenciais do Anthropic e do provedor de nuvem de ambientes de subprocesso (ferramenta Bash, hooks, servidores MCP stdio). O processo Claude pai mantém essas credenciais para chamadas de API, mas processos filhos não podem lê-las, reduzindo a exposição a ataques de injeção de prompt que tentam exfiltrar segredos via expansão de shell. No Linux, isso também executa subprocessos Bash em um namespace PID isolado para que não possam ler ambientes de processo do host via `/proc`; como efeito colateral, `ps`, `pgrep` e `kill` não podem ver ou sinalizar processos do host. `claude-code-action` define isso automaticamente quando `allowed_non_write_users` está configurado |153| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Defina como `1` para remover credenciais do Anthropic e do provedor de nuvem de ambientes de subprocesso (ferramenta Bash, hooks, servidores MCP stdio). O processo Claude pai mantém essas credenciais para chamadas de API, mas processos filhos não podem lê-las, reduzindo a exposição a ataques de injeção de prompt que tentam exfiltrar segredos via expansão de shell. No Linux, isso também executa subprocessos Bash em um namespace PID isolado para que não possam ler ambientes de processo do host via `/proc`; como efeito colateral, `ps`, `pgrep` e `kill` não podem ver ou sinalizar processos do host. `claude-code-action` define isso automaticamente quando `allowed_non_write_users` está configurado |

153| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | Defina como `1` em modo não interativo (a flag `-p`) para aguardar a conclusão da instalação de plugin antes da primeira consulta. Sem isso, plugins instalam em segundo plano e podem não estar disponíveis na primeira volta. Combine com `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` para limitar a espera |154| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | Defina como `1` em modo não interativo (a flag `-p`) para aguardar a conclusão da instalação de plugin antes da primeira consulta. Sem isso, plugins instalam em segundo plano e podem não estar disponíveis na primeira volta. Combine com `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` para limitar a espera |


191| `DISABLE_TELEMETRY` | Defina como `1` para optar por não participar da telemetria. Eventos de telemetria não incluem dados do usuário como código, caminhos de arquivo ou comandos bash |192| `DISABLE_TELEMETRY` | Defina como `1` para optar por não participar da telemetria. Eventos de telemetria não incluem dados do usuário como código, caminhos de arquivo ou comandos bash |

192| `DISABLE_UPDATES` | Defina como `1` para bloquear todas as atualizações, incluindo manual `claude update` e `claude install`. Mais rigoroso que `DISABLE_AUTOUPDATER`. Use ao distribuir Claude Code através de seus próprios canais e usuários não devem auto-atualizar |193| `DISABLE_UPDATES` | Defina como `1` para bloquear todas as atualizações, incluindo manual `claude update` e `claude install`. Mais rigoroso que `DISABLE_AUTOUPDATER`. Use ao distribuir Claude Code através de seus próprios canais e usuários não devem auto-atualizar |

193| `DISABLE_UPGRADE_COMMAND` | Defina como `1` para ocultar o comando `/upgrade` |194| `DISABLE_UPGRADE_COMMAND` | Defina como `1` para ocultar o comando `/upgrade` |

195| `DO_NOT_TRACK` | Defina como `1` para optar por não participar da telemetria. Equivalente a definir `DISABLE_TELEMETRY`. Honrado como a [convenção padrão entre ferramentas](https://consoledonottrack.com/) |

194| `ENABLE_CLAUDEAI_MCP_SERVERS` | Defina como `false` para desabilitar [servidores MCP claude.ai](/pt/mcp#use-mcp-servers-from-claude-ai) no Claude Code. Habilitado por padrão para usuários conectados |196| `ENABLE_CLAUDEAI_MCP_SERVERS` | Defina como `false` para desabilitar [servidores MCP claude.ai](/pt/mcp#use-mcp-servers-from-claude-ai) no Claude Code. Habilitado por padrão para usuários conectados |

195| `ENABLE_PROMPT_CACHING_1H` | Defina como `1` para solicitar um TTL de cache de prompt de 1 hora em vez do padrão de 5 minutos. Destinado para usuários de chave de API, [Bedrock](/pt/amazon-bedrock), [Vertex](/pt/google-vertex-ai) e [Foundry](/pt/microsoft-foundry). Usuários de assinatura recebem TTL de 1 hora automaticamente. Escritas de cache de 1 hora são cobradas a uma taxa mais alta |197| `ENABLE_PROMPT_CACHING_1H` | Defina como `1` para solicitar um TTL de cache de prompt de 1 hora em vez do padrão de 5 minutos. Destinado para usuários de chave de API, [Bedrock](/pt/amazon-bedrock), [Vertex](/pt/google-vertex-ai) e [Foundry](/pt/microsoft-foundry). Usuários de assinatura recebem TTL de 1 hora automaticamente. Escritas de cache de 1 hora são cobradas a uma taxa mais alta |

196| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Descontinuado. Use `ENABLE_PROMPT_CACHING_1H` em vez disso |198| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Descontinuado. Use `ENABLE_PROMPT_CACHING_1H` em vez disso |

errors.md +16 −0

Details

31| `Not logged in · Please run /login` | [Autenticação](#not-logged-in) |31| `Not logged in · Please run /login` | [Autenticação](#not-logged-in) |

32| `Invalid API key` | [Autenticação](#invalid-api-key) |32| `Invalid API key` | [Autenticação](#invalid-api-key) |

33| `This organization has been disabled` | [Autenticação](#this-organization-has-been-disabled) |33| `This organization has been disabled` | [Autenticação](#this-organization-has-been-disabled) |

34| `Routines are disabled by your organization's policy` | [Autenticação](#routines-are-disabled-by-your-organizations-policy) |

34| `OAuth token revoked` / `OAuth token has expired` | [Autenticação](#oauth-token-revoked-or-expired) |35| `OAuth token revoked` / `OAuth token has expired` | [Autenticação](#oauth-token-revoked-or-expired) |

35| `does not meet scope requirement user:profile` | [Autenticação](#oauth-scope-requirement) |36| `does not meet scope requirement user:profile` | [Autenticação](#oauth-scope-requirement) |

36| `Unable to connect to API` | [Rede](#unable-to-connect-to-api) |37| `Unable to connect to API` | [Rede](#unable-to-connect-to-api) |


252* Execute `/status` depois para confirmar que a credencial ativa é sua assinatura253* Execute `/status` depois para confirmar que a credencial ativa é sua assinatura

253* Se nenhuma variável de ambiente estiver definida e o erro persistir, a organização desabilitada é a vinculada ao seu `/login`. Entre em contato com o suporte ou faça login com uma conta diferente.254* Se nenhuma variável de ambiente estiver definida e o erro persistir, a organização desabilitada é a vinculada ao seu `/login`. Entre em contato com o suporte ou faça login com uma conta diferente.

254 255 

256### Routines are disabled by your organization's policy

257 

258Seu administrador de Team ou Enterprise desativou rotinas no nível da organização. O erro aparece quando você tenta criar ou executar uma rotina, incluindo de `/schedule` e da interface de usuário [Routines](/pt/routines) em claude.ai/code.

259 

260```text theme={null}

261Routines are disabled by your organization's policy.

262```

263 

264Esta é uma configuração do lado do servidor, portanto não pode ser substituída por configurações locais, variáveis de ambiente ou sinalizadores CLI.

265 

266**O que fazer:**

267 

268* Peça ao seu administrador para ativar o toggle **Routines** em [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)

269* Para trabalho agendado único que não requer rotinas no nível da organização, consulte [scheduled tasks](/pt/scheduled-tasks)

270 

255### OAuth token revoked or expired271### OAuth token revoked or expired

256 272 

257Seu login salvo não é mais válido. Um token revogado significa que você se desconectou em todos os lugares ou um administrador removeu o acesso; um token expirado significa que a atualização automática falhou no meio da sessão.273Seu login salvo não é mais válido. Um token revogado significa que você se desconectou em todos os lugares ou um administrador removeu o acesso; um token expirado significa que a atualização automática falhou no meio da sessão.

Details

289 289 

290Após Claude responder, as sugestões continuam aparecendo com base no seu histórico de conversa, como uma etapa de acompanhamento de uma solicitação de várias partes ou uma continuação natural do seu fluxo de trabalho.290Após Claude responder, as sugestões continuam aparecendo com base no seu histórico de conversa, como uma etapa de acompanhamento de uma solicitação de várias partes ou uma continuação natural do seu fluxo de trabalho.

291 291 

292* Pressione **Tab** ou **Right arrow** para aceitar a sugestão, ou pressione **Enter** para aceitar e enviar292* Pressione **Tab** ou **Right arrow** para colocar a sugestão na entrada de prompt, depois **Enter** para enviar

293* Comece a digitar para descartá-la293* Comece a digitar para descartá-la

294 294 

295A sugestão é executada como uma solicitação em segundo plano que reutiliza o cache de prompt da conversa pai, então o custo adicional é mínimo. Claude Code pula a geração de sugestão quando o cache está frio para evitar custo desnecessário.295A sugestão é executada como uma solicitação em segundo plano que reutiliza o cache de prompt da conversa pai, então o custo adicional é mínimo. Claude Code pula a geração de sugestão quando o cache está frio para evitar custo desnecessário.

mcp.md +2 −0

Details

265 --header "Authorization: Bearer your-token"265 --header "Authorization: Bearer your-token"

266```266```

267 267 

268Ao configurar servidores MCP via JSON em `.mcp.json`, `~/.claude.json`, ou `claude mcp add-json`, o campo `type` aceita `streamable-http` como um alias para `http`. A especificação MCP usa o nome `streamable-http` para este transporte, portanto as configurações copiadas da documentação do servidor funcionam sem modificação.

269 

268### Opção 2: Adicionar um servidor SSE remoto270### Opção 2: Adicionar um servidor SSE remoto

269 271 

270<Warning>272<Warning>

permissions.md +7 −0

Details

210* `Edit(//tmp/scratch.txt)`: edita o caminho absoluto `/tmp/scratch.txt`210* `Edit(//tmp/scratch.txt)`: edita o caminho absoluto `/tmp/scratch.txt`

211* `Read(src/**)`: lê de `<diretório-atual>/src/`211* `Read(src/**)`: lê de `<diretório-atual>/src/`

212 212 

213Uma regra só corresponde a arquivos sob sua âncora, portanto a âncora determina o quão longe uma regra deny alcança. Nomes de arquivo simples seguem semântica gitignore e correspondem em qualquer profundidade, portanto `Read(.env)` e `Read(**/.env)` são equivalentes:

214 

215| Regra deny | Bloqueia | Não bloqueia |

216| ------------------------------- | -------------------------------------------------------- | ------------------------------------------------------- |

217| `Read(.env)` ou `Read(**/.env)` | qualquer `.env` no ou sob o diretório atual | `.env` em um diretório pai ou outro projeto |

218| `Read(//**/.env)` | qualquer `.env` em qualquer lugar do sistema de arquivos | nada; a regra é ancorada na raiz do sistema de arquivos |

219 

213<Note>220<Note>

214 Em padrões gitignore, `*` corresponde a arquivos em um único diretório enquanto `**` corresponde recursivamente entre diretórios. Para permitir acesso a todos os arquivos, use apenas o nome da ferramenta sem parênteses: `Read`, `Edit` ou `Write`.221 Em padrões gitignore, `*` corresponde a arquivos em um único diretório enquanto `**` corresponde recursivamente entre diretórios. Para permitir acesso a todos os arquivos, use apenas o nome da ferramenta sem parênteses: `Read`, `Edit` ou `Write`.

215</Note>222</Note>

Details

423 423 

424| Campo | Tipo | Descrição | Exemplo |424| Campo | Tipo | Descrição | Exemplo |

425| :---------------------- | :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |425| :---------------------- | :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

426| `skills` | string\|array | Diretórios de skill personalizados contendo `<name>/SKILL.md` (substitui padrão `skills/`) | `"./custom/skills/"` |426| `skills` | string\|array | Diretórios de skill personalizados contendo `<name>/SKILL.md` (além do padrão `skills/`) | `"./custom/skills/"` |

427| `commands` | string\|array | Arquivos de skill `.md` planos personalizados ou diretórios (substitui padrão `commands/`) | `"./custom/cmd.md"` ou `["./cmd1.md"]` |427| `commands` | string\|array | Arquivos de skill `.md` planos personalizados ou diretórios (substitui padrão `commands/`) | `"./custom/cmd.md"` ou `["./cmd1.md"]` |

428| `agents` | string\|array | Arquivos de agent personalizados (substitui padrão `agents/`) | `"./custom/agents/reviewer.md"` |428| `agents` | string\|array | Arquivos de agent personalizados (substitui padrão `agents/`) | `"./custom/agents/reviewer.md"` |

429| `hooks` | string\|array\|object | Caminhos de configuração de hooks ou configuração inline | `"./my-extra-hooks.json"` |429| `hooks` | string\|array\|object | Caminhos de configuração de hooks ou configuração inline | `"./my-extra-hooks.json"` |


510 510 

511### Regras de comportamento de caminho511### Regras de comportamento de caminho

512 512 

513Para `skills`, `commands`, `agents`, `outputStyles`, `experimental.themes` e `experimental.monitors`, um caminho personalizado substitui o padrão. Se o manifesto especificar `skills`, o diretório padrão `skills/` não é verificado; se especificar `experimental.monitors`, o padrão `monitors/monitors.json` não é carregado. [Hooks](#hooks), [MCP servers](#mcp-servers) e [LSP servers](#lsp-servers) têm semântica diferente para lidar com múltiplas fontes.513Se um caminho personalizado substitui ou estende o diretório padrão do plugin depende do campo:

514 

515* **Substitui o padrão**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Por exemplo, quando o manifesto especifica `commands`, o diretório padrão `commands/` não é verificado. Para manter o padrão e adicionar mais, liste-o explicitamente: `"commands": ["./commands/", "./extras/"]`

516* **Adiciona ao padrão**: `skills`. O diretório padrão `skills/` é sempre verificado, e diretórios listados em `skills` são carregados junto com ele

517* **Regras de mesclagem próprias**: [hooks](#hooks), [MCP servers](#mcp-servers) e [LSP servers](#lsp-servers). Veja cada seção para como múltiplas fontes se combinam

518 

519Para todos os campos de caminho:

514 520 

515* Todos os caminhos devem ser relativos à raiz do plugin e começar com `./`521* Todos os caminhos devem ser relativos à raiz do plugin e começar com `./`

516* Componentes de caminhos personalizados usam as mesmas regras de nomenclatura e namespacing522* Componentes de caminhos personalizados usam as mesmas regras de nomenclatura e namespacing

517* Múltiplos caminhos podem ser especificados como arrays523* Múltiplos caminhos podem ser especificados como arrays

518* Para manter o diretório padrão e adicionar mais caminhos para skills, commands, agents ou output styles, inclua o padrão em seu array: `"skills": ["./skills/", "./extras/"]`

519* Quando um caminho de skill aponta para um diretório que contém um `SKILL.md` diretamente, por exemplo `"skills": ["./"]` apontando para a raiz do plugin, o campo frontmatter `name` em `SKILL.md` determina o nome de invocação da skill. Isso fornece um nome estável independentemente do diretório de instalação. Se `name` não estiver definido no frontmatter, o nome base do diretório é usado como fallback.524* Quando um caminho de skill aponta para um diretório que contém um `SKILL.md` diretamente, por exemplo `"skills": ["./"]` apontando para a raiz do plugin, o campo frontmatter `name` em `SKILL.md` determina o nome de invocação da skill. Isso fornece um nome estável independentemente do diretório de instalação. Se `name` não estiver definido no frontmatter, o nome base do diretório é usado como fallback.

520 525 

521**Exemplos de caminho**:526**Exemplos de caminho**:

routines.md +8 −0

Details

22 22 

23As rotinas estão disponíveis nos planos Pro, Max, Team e Enterprise com [Claude Code na web](/pt/claude-code-on-the-web) ativado. Crie e gerencie-as em [claude.ai/code/routines](https://claude.ai/code/routines), ou a partir da CLI com `/schedule`.23As rotinas estão disponíveis nos planos Pro, Max, Team e Enterprise com [Claude Code na web](/pt/claude-code-on-the-web) ativado. Crie e gerencie-as em [claude.ai/code/routines](https://claude.ai/code/routines), ou a partir da CLI com `/schedule`.

24 24 

25Os administradores de Team e Enterprise podem desabilitar rotinas para todos os membros com o botão de alternância Rotinas em [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code). Quando desabilitadas, as rotinas existentes param de ser executadas e os membros não podem criar novas.

26 

25Esta página aborda a criação de uma rotina, a configuração de cada tipo de acionador, o gerenciamento de execuções e como os limites de uso se aplicam.27Esta página aborda a criação de uma rotina, a configuração de cada tipo de acionador, o gerenciamento de execuções e como os limites de uso se aplicam.

26 28 

27## Exemplos de casos de uso29## Exemplos de casos de uso


360 362 

361As execuções únicas não contam contra o limite diário de execução de rotina. Elas reduzem seu uso de assinatura regular como qualquer outra sessão, mas estão isentas da permissão de execução de rotina diária por conta.363As execuções únicas não contam contra o limite diário de execução de rotina. Elas reduzem seu uso de assinatura regular como qualquer outra sessão, mas estão isentas da permissão de execução de rotina diária por conta.

362 364 

365## Solução de problemas

366 

367### "As rotinas estão desabilitadas pela política da sua organização"

368 

369Seu administrador de Team ou Enterprise provavelmente desativou o botão de alternância **Routines** em [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code). Esta é uma configuração de organização no servidor, portanto não pode ser substituída pela sua configuração local. Entre em contato com seu administrador para solicitar que as rotinas sejam habilitadas para sua organização.

370 

363## Recursos relacionados371## Recursos relacionados

364 372 

365* [`/loop` e agendamento em sessão](/pt/scheduled-tasks): agende tarefas locais dentro de uma sessão CLI aberta373* [`/loop` e agendamento em sessão](/pt/scheduled-tasks): agende tarefas locais dentro de uma sessão CLI aberta

security.md +1 −1

Details

59* **Aprovação de solicitação de rede**: Ferramentas que fazem solicitações de rede requerem aprovação do usuário por padrão59* **Aprovação de solicitação de rede**: Ferramentas que fazem solicitações de rede requerem aprovação do usuário por padrão

60* **Janelas de contexto isoladas**: Web fetch usa uma janela de contexto separada para evitar injetar prompts potencialmente maliciosos60* **Janelas de contexto isoladas**: Web fetch usa uma janela de contexto separada para evitar injetar prompts potencialmente maliciosos

61* **Verificação de confiança**: Primeiras execuções de base de código e novos MCP servers requerem verificação de confiança61* **Verificação de confiança**: Primeiras execuções de base de código e novos MCP servers requerem verificação de confiança

62 * Nota: A verificação de confiança é desabilitada ao executar de forma não interativa com a flag `-p`62 * Nota: A verificação de confiança é desabilitada ao executar de forma não interativa com a flag `-p`. A exceção é [`--worktree`](/pt/worktrees), que ainda requer que a confiança tenha sido aceita para o diretório

63* **Detecção de injeção de comando**: Comandos bash suspeitos requerem aprovação manual mesmo se previamente permitidos63* **Detecção de injeção de comando**: Comandos bash suspeitos requerem aprovação manual mesmo se previamente permitidos

64* **Correspondência fail-closed**: Comandos não correspondidos padrão para exigir aprovação manual64* **Correspondência fail-closed**: Comandos não correspondidos padrão para exigir aprovação manual

65* **Descrições em linguagem natural**: Comandos bash complexos incluem explicações para compreensão do usuário65* **Descrições em linguagem natural**: Comandos bash complexos incluem explicações para compreensão do usuário

Details

41 </Step>41 </Step>

42 42 

43 <Step title="Definir suas configurações">43 <Step title="Definir suas configurações">

44 Adicione sua configuração como JSON. Todas as [configurações disponíveis em `settings.json`](/pt/settings#available-settings) são suportadas, incluindo [hooks](/pt/hooks), [variáveis de ambiente](/pt/env-vars) e [configurações apenas gerenciadas](/pt/permissions#managed-only-settings) como `allowManagedPermissionRulesOnly`.44 Adicione sua configuração como JSON. Todas as [configurações disponíveis em `settings.json`](/pt/settings#available-settings) são suportadas, exceto aquelas restritas à entrega de política em nível do SO; veja [Limitações atuais](#current-limitations) para essa lista curta. Isso inclui [hooks](/pt/hooks), [variáveis de ambiente](/pt/env-vars) e [configurações apenas gerenciadas](/pt/permissions#managed-only-settings) como `allowManagedPermissionRulesOnly`.

45 45 

46 Este exemplo impõe uma lista de negação de permissões, impede que os usuários ignorem as permissões e restringe as regras de permissão àquelas definidas nas configurações gerenciadas:46 Este exemplo impõe uma lista de negação de permissões, impede que os usuários ignorem as permissões e restringe as regras de permissão àquelas definidas nas configurações gerenciadas:

47 47 


93 }93 }

94 ```94 ```

95 95 

96 Como hooks executam comandos shell, os usuários veem uma [caixa de diálogo de aprovação de segurança](#security-approval-dialogs) antes de serem aplicados. Veja [Configurar o modo automático](/pt/auto-mode-config) para saber como as entradas `autoMode` afetam o que o classificador bloqueia e avisos importantes sobre os campos `allow` e `soft_deny`.96 Como hooks executam comandos shell, os usuários veem uma [caixa de diálogo de aprovação de segurança](#security-approval-dialogs) antes de serem aplicados. Veja [Configurar o modo automático](/pt/auto-mode-config) para saber como as entradas `autoMode` afetam o que o classificador bloqueia e avisos importantes sobre os campos `environment`, `allow`, `soft_deny` e `hard_deny`.

97 </Step>97 </Step>

98 98 

99 <Step title="Salvar e implantar">99 <Step title="Salvar e implantar">


124 124 

125* As configurações se aplicam uniformemente a todos os usuários da organização. Configurações por grupo ainda não são suportadas.125* As configurações se aplicam uniformemente a todos os usuários da organização. Configurações por grupo ainda não são suportadas.

126* [Configurações de servidor MCP](/pt/mcp#managed-mcp-configuration) não podem ser distribuídas através de configurações gerenciadas pelo servidor.126* [Configurações de servidor MCP](/pt/mcp#managed-mcp-configuration) não podem ser distribuídas através de configurações gerenciadas pelo servidor.

127* Configurações restritas a fontes de política em nível do SO, como `policyHelper` e `wslInheritsWindowsSettings`, não são honradas. Implante-as através de MDM ou um arquivo `managed-settings.json` do sistema.

127 128 

128## Entrega de configurações129## Entrega de configurações

129 130 

settings.md +28 −1

Details

169| `attribution` | Personalizar atribuição para commits git e pull requests. Veja [Configurações de atribuição](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |169| `attribution` | Personalizar atribuição para commits git e pull requests. Veja [Configurações de atribuição](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

170| `autoMemoryDirectory` | Diretório personalizado para armazenamento de [memória automática](/pt/memory#storage-location). Aceita um caminho absoluto ou um caminho com prefixo `~/`. Aceito de configurações de política e usuário, e da flag `--settings`. Não aceito de configurações de projeto ou local, já que um repositório clonado poderia fornecer qualquer arquivo para redirecionar escritas de memória para locais sensíveis | `"~/my-memory-dir"` |170| `autoMemoryDirectory` | Diretório personalizado para armazenamento de [memória automática](/pt/memory#storage-location). Aceita um caminho absoluto ou um caminho com prefixo `~/`. Aceito de configurações de política e usuário, e da flag `--settings`. Não aceito de configurações de projeto ou local, já que um repositório clonado poderia fornecer qualquer arquivo para redirecionar escritas de memória para locais sensíveis | `"~/my-memory-dir"` |

171| `autoMemoryEnabled` | Ativar [memória automática](/pt/memory#enable-or-disable-auto-memory). Quando `false`, Claude não lê ou escreve no diretório de memória automática. Padrão: `true`. Você também pode alternar isto com `/memory` durante uma sessão. Para desabilitar via variável de ambiente, defina [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/pt/env-vars) em `env` | `false` |171| `autoMemoryEnabled` | Ativar [memória automática](/pt/memory#enable-or-disable-auto-memory). Quando `false`, Claude não lê ou escreve no diretório de memória automática. Padrão: `true`. Você também pode alternar isto com `/memory` durante uma sessão. Para desabilitar via variável de ambiente, defina [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/pt/env-vars) em `env` | `false` |

172| `autoMode` | Personalizar o que o classificador de [modo automático](/pt/permission-modes#eliminate-prompts-with-auto-mode) bloqueia e permite. Contém arrays `environment`, `allow`, e `soft_deny` de regras em prosa. Inclua a string literal `"$defaults"` em um array para herdar as regras integradas nessa posição. Veja [Configurar modo automático](/pt/auto-mode-config). Não lido de configurações de projeto compartilhadas | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |172| `autoMode` | Personalizar o que o classificador de [modo automático](/pt/permission-modes#eliminate-prompts-with-auto-mode) bloqueia e permite. Contém arrays `environment`, `allow`, `soft_deny`, e `hard_deny` de regras em prosa. Inclua a string literal `"$defaults"` em um array para herdar as regras integradas nessa posição. Veja [Configurar modo automático](/pt/auto-mode-config). Não lido de configurações de projeto compartilhadas | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

173| `autoScrollEnabled` | Em [renderização fullscreen](/pt/fullscreen), seguir nova saída até o fundo da conversa. Padrão: `true`. Aparece em `/config` como **Auto-scroll**. Prompts de permissão ainda rolam para a vista quando isto está desligado | `false` |173| `autoScrollEnabled` | Em [renderização fullscreen](/pt/fullscreen), seguir nova saída até o fundo da conversa. Padrão: `true`. Aparece em `/config` como **Auto-scroll**. Prompts de permissão ainda rolam para a vista quando isto está desligado | `false` |

174| `autoUpdatesChannel` | Canal de lançamento a seguir para atualizações. Use `"stable"` para uma versão que é tipicamente cerca de uma semana antiga e pula versões com regressões maiores, ou `"latest"` (padrão) para o lançamento mais recente. Para desabilitar auto-atualizações completamente, defina [`DISABLE_AUTOUPDATER`](/pt/setup#disable-auto-updates) em `env` | `"stable"` |174| `autoUpdatesChannel` | Canal de lançamento a seguir para atualizações. Use `"stable"` para uma versão que é tipicamente cerca de uma semana antiga e pula versões com regressões maiores, ou `"latest"` (padrão) para o lançamento mais recente. Para desabilitar auto-atualizações completamente, defina [`DISABLE_AUTOUPDATER`](/pt/setup#disable-auto-updates) em `env` | `"stable"` |

175| `availableModels` | Restringir quais modelos os usuários podem selecionar via `/model`, `--model`, ou `ANTHROPIC_MODEL`. Não afeta a opção Padrão. Veja [Restringir seleção de modelo](/pt/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |175| `availableModels` | Restringir quais modelos os usuários podem selecionar via `/model`, `--model`, ou `ANTHROPIC_MODEL`. Não afeta a opção Padrão. Veja [Restringir seleção de modelo](/pt/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |


215| `permissions` | Veja a tabela abaixo para a estrutura de permissões. | |215| `permissions` | Veja a tabela abaixo para a estrutura de permissões. | |

216| `plansDirectory` | Personalizar onde os arquivos de plano são armazenados. O caminho é relativo à raiz do projeto. Padrão: `~/.claude/plans` | `"./plans"` |216| `plansDirectory` | Personalizar onde os arquivos de plano são armazenados. O caminho é relativo à raiz do projeto. Padrão: `~/.claude/plans` | `"./plans"` |

217| `pluginTrustMessage` | (Apenas configurações gerenciadas) Mensagem personalizada anexada ao aviso de confiança de plugin mostrado antes da instalação. Use isto para adicionar contexto específico da organização, por exemplo para confirmar que plugins do seu marketplace interno são verificados. | `"All plugins from our marketplace are approved by IT"` |217| `pluginTrustMessage` | (Apenas configurações gerenciadas) Mensagem personalizada anexada ao aviso de confiança de plugin mostrado antes da instalação. Use isto para adicionar contexto específico da organização, por exemplo para confirmar que plugins do seu marketplace interno são verificados. | `"All plugins from our marketplace are approved by IT"` |

218| `policyHelper` | {/* min-version: 2.1.136 */}Executável implantado por administrador que calcula configurações gerenciadas dinamicamente na inicialização. Apenas honrado de MDM ou um arquivo `managed-settings.json` do sistema. Veja [Calcular configurações gerenciadas com um auxiliar de política](#compute-managed-settings-with-a-policy-helper). Requer Claude Code v2.1.136 ou posterior | `{"path": "/usr/local/bin/claude-policy"}` |

218| `preferredNotifChannel` | Método para notificações de conclusão de tarefa e prompt de permissão: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"`, ou `"notifications_disabled"`. Padrão: `"auto"`, que envia uma notificação de desktop em iTerm2, Ghostty, e Kitty e não faz nada em outros terminais. Defina `"terminal_bell"` para tocar o caractere de sino em qualquer terminal. Aparece em `/config` como **Notifications**. Veja [Obter um sino de terminal ou notificação](/pt/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |219| `preferredNotifChannel` | Método para notificações de conclusão de tarefa e prompt de permissão: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"`, ou `"notifications_disabled"`. Padrão: `"auto"`, que envia uma notificação de desktop em iTerm2, Ghostty, e Kitty e não faz nada em outros terminais. Defina `"terminal_bell"` para tocar o caractere de sino em qualquer terminal. Aparece em `/config` como **Notifications**. Veja [Obter um sino de terminal ou notificação](/pt/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |

219| `prefersReducedMotion` | Reduzir ou desabilitar animações de UI (spinners, shimmer, efeitos de flash) para acessibilidade | `true` |220| `prefersReducedMotion` | Reduzir ou desabilitar animações de UI (spinners, shimmer, efeitos de flash) para acessibilidade | `true` |

220| `prUrlTemplate` | Modelo de URL para o badge de PR mostrado no rodapé e em resumos de resultado de ferramenta. Substitui `{host}`, `{owner}`, `{repo}`, `{number}`, e `{url}` da URL de PR relatada por `gh`. Use para apontar links de PR para uma ferramenta de revisão de código interna em vez de `github.com`. Não afeta autolinks `#123` na prosa do Claude | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |221| `prUrlTemplate` | Modelo de URL para o badge de PR mostrado no rodapé e em resumos de resultado de ferramenta. Substitui `{host}`, `{owner}`, `{repo}`, `{number}`, e `{url}` da URL de PR relatada por `gh`. Use para apontar links de PR para uma ferramenta de revisão de código interna em vez de `github.com`. Não afeta autolinks `#123` na prosa do Claude | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |


470}471}

471```472```

472 473 

474### Calcular configurações gerenciadas com um auxiliar de política

475 

476A configuração `policyHelper` aponta para um executável que calcula configurações gerenciadas na inicialização, para que administradores possam derivar política da postura do dispositivo, identidade, ou um serviço remoto em vez de um arquivo estático. Configure-o a partir de MDM ou um arquivo `managed-settings.json` do sistema. O Claude Code ignora `policyHelper` quando aparece em qualquer outro escopo, incluindo configurações de usuário, configurações de projeto, a hive de registro HKCU, e [configurações gerenciadas pelo servidor](/pt/server-managed-settings).

477 

478A configuração aceita estas chaves:

479 

480| Chave | Tipo | Descrição |

481| ------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------- |

482| `path` | string | Caminho absoluto para o executável auxiliar |

483| `timeoutMs` | number | Quanto tempo esperar pelo auxiliar antes de tratar a execução como falha |

484| `refreshIntervalMs` | number | Com que frequência re-executar o auxiliar em background. Defina como `0` para desabilitar atualização, ou para pelo menos `60000` |

485 

486O auxiliar escreve um envelope JSON para stdout. Coloque as configurações sob uma chave `managedSettings` em vez de no nível superior, já que um objeto de configurações simples analisa com `managedSettings` indefinido e não aplica nada:

487 

488```json theme={null}

489{

490 "managedSettings": {

491 "permissions": { "deny": ["Read(//etc/secrets/**)"] }

492 },

493 "claudeMd": "# Organization context\n...",

494 "appendSystemPrompt": "Always cite the internal style guide."

495}

496```

497 

498Quando o auxiliar emite `managedSettings`, esse objeto substitui as configurações gerenciadas baseadas em arquivo para a execução. Quando o auxiliar sai com código não-zero na inicialização, Claude Code imprime o erro e recusa iniciar, então um auxiliar que precisa de resiliência de interrupção deve servir a partir de seu próprio cache e sair com `0`.

499 

473### Precedência de configurações500### Precedência de configurações

474 501 

475Configurações se aplicam em ordem de precedência. De mais alta para mais baixa:502Configurações se aplicam em ordem de precedência. De mais alta para mais baixa:

whats-new.md +17 −1

Details

8 8 

9O resumo semanal para desenvolvedores destaca os recursos com maior probabilidade de mudar a forma como você trabalha. Cada entrada inclui código executável, uma breve demonstração e um link para a documentação completa. Para cada correção de bug e melhoria menor, consulte o [changelog](/pt/changelog).9O resumo semanal para desenvolvedores destaca os recursos com maior probabilidade de mudar a forma como você trabalha. Cada entrada inclui código executável, uma breve demonstração e um link para a documentação completa. Para cada correção de bug e melhoria menor, consulte o [changelog](/pt/changelog).

10 10 

11<Update label="Week 19" description="4–8 de maio de 2026" tags={["v2.1.128–v2.1.136"]}>

12 **Plugins carregam de arquivos `.zip` e URLs**: `--plugin-dir` agora aceita arquivos `.zip`, e `--plugin-url` busca um arquivo de plugin para a sessão atual.

13 

14 Também esta semana: **`worktree.baseRef`** escolhe se novas worktrees ramificam do padrão remoto ou do `HEAD` local; **regras de negação rígida do modo automático** bloqueiam ações incondicionalmente, independentemente de exceções de permissão; e **hooks veem o nível de esforço ativo** via `effort.level` e `$CLAUDE_EFFORT`.

15 

16 [Leia o resumo da Week 19 →](/pt/whats-new/2026-w19)

17</Update>

18 

19<Update label="Week 18" description="27 de abril – 1º de maio de 2026" tags={["v2.1.120–v2.1.126"]}>

20 **Windows sem Git Bash**: Git para Windows não é mais necessário, e Claude Code usa PowerShell como a ferramenta de shell quando Bash está ausente.

21 

22 Também esta semana: **`claude ultrareview`** traz revisão de código em nuvem para CI e scripts; **`claude project purge`** limpa o estado local de um projeto; e colar uma **URL de PR em `/resume`** encontra a sessão que a criou.

23 

24 [Leia o resumo da Week 18 →](/pt/whats-new/2026-w18)

25</Update>

26 

11<Update label="Week 17" description="20–24 de abril de 2026" tags={["v2.1.114–v2.1.119"]}>27<Update label="Week 17" description="20–24 de abril de 2026" tags={["v2.1.114–v2.1.119"]}>

12 **`/ultrareview`** abre como uma visualização pública de pesquisa: uma frota de agentes de caça a bugs é executada na nuvem e os resultados chegam automaticamente ao seu CLI ou Desktop.28 **`/ultrareview`** abre como uma visualização pública de pesquisa: uma frota de agentes de caça a bugs é executada na nuvem e os resultados chegam automaticamente ao seu CLI ou Desktop.

13 29 


19<Update label="Week 16" description="13–17 de abril de 2026" tags={["v2.1.105–v2.1.113"]}>35<Update label="Week 16" description="13–17 de abril de 2026" tags={["v2.1.105–v2.1.113"]}>

20 **Claude Opus 4.7** chega como o novo padrão no Max e Team Premium, com um novo nível de esforço `xhigh` que é a configuração recomendada para a maioria do trabalho de codificação e um controle deslizante `/effort` interativo para ajustá-lo.36 **Claude Opus 4.7** chega como o novo padrão no Max e Team Premium, com um novo nível de esforço `xhigh` que é a configuração recomendada para a maioria do trabalho de codificação e um controle deslizante `/effort` interativo para ajustá-lo.

21 37 

22 Também esta semana: **Routines** no Claude Code na web disparam agentes de nuvem templados a partir de um cronograma, evento do GitHub ou chamada de API; `/ultrareview` executa revisão de código multi-agente paralela na nuvem; `/usage` mostra o que está impulsionando seus limites; e o CLI passa para binários nativos.38 Também esta semana: **Routines** no Claude Code na web disparam agentes de nuvem templados a partir de um cronograma, evento do GitHub ou chamada de API; **notificações push móveis** alertam seu telefone quando uma tarefa longa termina ou Claude precisa de você; `/usage` mostra o que está impulsionando seus limites; e o CLI passa para binários nativos.

23 39 

24 [Leia o resumo da Week 16 →](/pt/whats-new/2026-w16)40 [Leia o resumo da Week 16 →](/pt/whats-new/2026-w16)

25</Update>41</Update>

Details

4 4 

5# Semana 16 · 13–17 de abril de 20265# Semana 16 · 13–17 de abril de 2026

6 6 

7> Claude Opus 4.7 com o novo nível de esforço xhigh, Routines no Claude Code na web, /ultrareview revisão de código na nuvem, um /usage breakdown que mostra o que está impulsionando seus limites, e binários nativos substituindo o JavaScript agrupado.7> Claude Opus 4.7 com o novo nível de esforço xhigh, Routines no Claude Code na web, notificações push móveis que alertam seu telefone quando Claude precisa de você, um /usage breakdown que mostra o que está impulsionando seus limites, e binários nativos substituindo o JavaScript agrupado.

8 8 

9<div className="digest-meta">9<div className="digest-meta">

10 <span>Releases <a href="/pt/docs/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>10 <span>Releases <a href="/pt/docs/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>


73 73 

74<div className="digest-feature">74<div className="digest-feature">

75 <div className="digest-feature-header">75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>76 <span className="digest-feature-title">Notificações push móveis</span>

77 <span className="digest-feature-pill">v2.1.111</span>77 <span className="digest-feature-pill">mobile</span>

78 </div>78 </div>

79 79 

80 <p className="digest-feature-lede">Revisão abrangente de código na nuvem. Ultrareview distribui sua branch em revisores paralelos no Claude Code na web, executa uma passagem de crítica adversarial sobre cada descoberta e retorna um relatório de descobertas verificadas enquanto seu terminal permanece livre. Chame-o sem argumentos para revisar sua branch atual, ou passe um número de PR para buscar e revisar esse PR. O diálogo de inicialização agora mostra um diffstat para que você saiba o que está sendo enviado antes de confirmar.</p>80 <p className="digest-feature-lede">Com <a href="/pt/docs/remote-control">Controle Remoto</a> conectado, Claude pode enviar uma notificação push para seu telefone quando uma tarefa longa terminar ou quando precisar de uma decisão para continuar. Ative-o com "Enviar quando Claude decidir" em <code>/config</code>, ou peça por um em seu prompt. Útil quando você inicia uma execução de agente longa e quer se afastar do terminal.</p>

81 81 

82 <p className="digest-feature-try">Revise a branch em que você está:</p>82 <Frame>

83 83 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/uII1TETOZxBUZ3lB/images/whats-new/push-notifications.mp4?fit=max&auto=format&n=uII1TETOZxBUZ3lB&q=85&s=c91a967139596500cbdb581a53822ac1" data-path="images/whats-new/push-notifications.mp4" />

84 ```text Claude Code theme={null}84 </Frame>

85 > /ultrareview

86 ```

87 85 

88 <p className="digest-feature-try">Ou aponte para um PR:</p>86 <p className="digest-feature-try">Peça ao Claude para alertá-lo quando terminar:</p>

89 87 

90 ```text Claude Code theme={null}88 ```text Claude Code theme={null}

91 > /ultrareview 123489 > notify me when the tests pass

92 ```90 ```

93 91 

94 <a className="digest-feature-link" href="/pt/docs/ultrareview">Guia de Ultrareview</a>92 <a className="digest-feature-link" href="/pt/docs/remote-control#mobile-push-notifications">Controle Remoto: notificações push móveis</a>

95</div>93</div>

96 94 

97<div className="digest-feature">95<div className="digest-feature">


116 <p className="digest-wins-title">Outras vitórias</p>114 <p className="digest-wins-title">Outras vitórias</p>

117 115 

118 <div className="digest-wins-grid">116 <div className="digest-wins-grid">

117 <div>Novo <a href="/pt/docs/ultrareview"><code>/ultrareview</code></a>: revisão abrangente de código na nuvem usando análise paralela de múltiplos agentes e uma passagem de crítica adversarial. Execute-o sem argumentos para revisar sua branch atual, ou <code>/ultrareview \<PR#></code> para um PR específico</div>

119 <div><a href="/pt/docs/permission-modes#eliminate-prompts-with-auto-mode">Modo automático</a> agora está disponível para assinantes Max no Opus 4.7, e a flag <code>--enable-auto-mode</code> não é mais necessária</div>118 <div><a href="/pt/docs/permission-modes#eliminate-prompts-with-auto-mode">Modo automático</a> agora está disponível para assinantes Max no Opus 4.7, e a flag <code>--enable-auto-mode</code> não é mais necessária</div>

120 <div><a href="/pt/docs/interactive-mode#session-recap">Recapitulação de sessão</a> mostra um resumo de uma linha do que aconteceu enquanto você estava ausente; execute <code>/recap</code> sob demanda ou desative-o em <code>/config</code></div>119 <div><a href="/pt/docs/interactive-mode#session-recap">Recapitulação de sessão</a> mostra um resumo de uma linha do que aconteceu enquanto você estava ausente; execute <code>/recap</code> sob demanda ou desative-o em <code>/config</code></div>

121 <div>Novo comando <code>/tui</code> e configuração <code>tui</code> alternam entre renderização clássica e sem cintilação no meio da conversa; visualização de foco movida de <code>Ctrl+O</code> para seu próprio comando <code>/focus</code></div>120 <div>Novo comando <code>/tui</code> e configuração <code>tui</code> alternam entre renderização clássica e sem cintilação no meio da conversa; visualização de foco movida de <code>Ctrl+O</code> para seu próprio comando <code>/focus</code></div>

122 <div>Ferramenta de notificação push: com <a href="/pt/docs/remote-control">Controle Remoto</a> conectado e "Enviar quando Claude decidir" ativado, Claude pode fazer ping no seu telefone quando precisar de você</div>

123 <div>Plugins podem enviar observadores de fundo através de uma chave de manifesto de nível superior <code>monitors</code> que se arma automaticamente no início da sessão ou na invocação de skill</div>121 <div>Plugins podem enviar observadores de fundo através de uma chave de manifesto de nível superior <code>monitors</code> que se arma automaticamente no início da sessão ou na invocação de skill</div>

124 <div>Opção "Automático (corresponder terminal)" em <code>/theme</code> segue o modo escuro/claro do seu terminal</div>122 <div>Opção "Automático (corresponder terminal)" em <code>/theme</code> segue o modo escuro/claro do seu terminal</div>

125 <div><code>/fewer-permission-prompts</code> verifica suas transcrições em busca de chamadas Bash e MCP comuns somente leitura e propõe uma lista de permissões para <code>.claude/settings.json</code></div>123 <div><code>/fewer-permission-prompts</code> verifica suas transcrições em busca de chamadas Bash e MCP comuns somente leitura e propõe uma lista de permissões para <code>.claude/settings.json</code></div>

whats-new/2026-w18.md +113 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Semana 18 · 27 de abril – 1º de maio de 2026

6 

7> Claude Code no Windows funciona sem Git Bash, claude auth login aceita um código OAuth colado quando o callback do navegador não consegue alcançar localhost, claude project purge limpa o estado local por projeto, e colar uma URL de PR em /resume encontra a sessão que a criou.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/pt/docs/changelog#2-1-120">v2.1.120 → v2.1.126</a></span>

11 <span>4 recursos · 27 de abril – 1º de maio</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Faça login sem callback do navegador</span>

17 <span className="digest-feature-pill">v2.1.126</span>

18 </div>

19 

20 <p className="digest-feature-lede"><code>claude auth login</code> agora aceita o código OAuth colado diretamente no terminal quando o callback do navegador não consegue alcançar localhost. Isso cobre WSL2, sessões SSH e contêineres, onde o redirecionamento para uma porta local não funciona. A mesma versão também corrige timeouts de login em conexões lentas ou com proxy e em devcontainers somente IPv6.</p>

21 

22 <p className="digest-feature-try">Faça login e cole o código do navegador:</p>

23 

24 ```bash theme={null}

25 claude auth login

26 ```

27 

28 <a className="digest-feature-link" href="/pt/docs/cli-reference#cli-commands">Referência CLI</a>

29</div>

30 

31<div className="digest-feature">

32 <div className="digest-feature-header">

33 <span className="digest-feature-title">claude project purge</span>

34 <span className="digest-feature-pill">v2.1.126</span>

35 </div>

36 

37 <p className="digest-feature-lede">Exclua todo o estado do Claude Code para um projeto: transcrições, tarefas, histórico de arquivos e a entrada de configuração do projeto. Suporta `--dry-run` para visualizar, `-y`/`--yes` para pular confirmação, `-i`/`--interactive` para escolher e `--all` para limpar todos os projetos.</p>

38 

39 <p className="digest-feature-try">Visualize o que seria removido:</p>

40 

41 ```bash theme={null}

42 claude project purge --dry-run

43 ```

44 

45 <p className="digest-feature-try">Depois execute de verdade:</p>

46 

47 ```bash theme={null}

48 claude project purge

49 ```

50 

51 <a className="digest-feature-link" href="/pt/docs/cli-reference">Referência CLI</a>

52</div>

53 

54<div className="digest-feature">

55 <div className="digest-feature-header">

56 <span className="digest-feature-title">Retomar por URL de PR</span>

57 <span className="digest-feature-pill">v2.1.122</span>

58 </div>

59 

60 <p className="digest-feature-lede">Quando você cria um pull request com <code>gh pr create</code>, Claude Code o vincula à sessão que o produziu. Agora você pode voltar a essa sessão apenas pela URL do PR, sem precisar lembrar seu nome.</p>

61 

62 <p className="digest-feature-try">Abra o seletor de sessão:</p>

63 

64 ```text Claude Code theme={null}

65 > /resume

66 ```

67 

68 <p className="digest-feature-try">Cole a URL do PR no seletor. O primeiro caractere da colagem o coloca no modo de busca e a lista filtra para a sessão que criou esse PR. Pressione Enter para retomar. URLs de pull e merge requests do GitHub, GitHub Enterprise, GitLab e Bitbucket funcionam.</p>

69 

70 ```text Claude Code theme={null}

71 https://github.com/your-org/your-repo/pull/1234

72 ```

73 

74 <p className="digest-feature-try">Para pular o seletor, passe o número do PR na linha de comando:</p>

75 

76 ```bash theme={null}

77 claude --from-pr 1234

78 ```

79 

80 <a className="digest-feature-link" href="/pt/docs/sessions#use-the-session-picker">Sessões: use o seletor de sessão</a>

81</div>

82 

83<div className="digest-feature">

84 <div className="digest-feature-header">

85 <span className="digest-feature-title">Windows sem Git Bash</span>

86 <span className="digest-feature-pill">Windows</span>

87 </div>

88 

89 <p className="digest-feature-lede">Git para Windows não é mais necessário. Quando Bash está ausente, Claude Code usa PowerShell como a ferramenta de shell, e quando a ferramenta PowerShell está habilitada, ela é tratada como o shell primário. PowerShell 7 instalado via Microsoft Store, MSI sem PATH ou como uma ferramenta global `.NET` agora é detectado automaticamente.</p>

90 

91 <a className="digest-feature-link" href="/pt/docs/setup">Guia de configuração</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">Outras melhorias</p>

96 

97 <div className="digest-wins-grid">

98 <div>Servidores MCP podem optar por não usar deferral de busca de ferramentas com <code>alwaysLoad: true</code> em sua configuração para que todas as ferramentas desse servidor estejam sempre disponíveis</div>

99 <div>Novo <code>claude plugin prune</code> remove dependências de plugin auto-instaladas órfãs, e <code>plugin uninstall --prune</code> cascata</div>

100 <div><code>/skills</code> agora tem uma caixa de busca com digitação para filtrar para que você possa encontrar uma skill em uma lista longa sem rolar</div>

101 <div>Hooks <code>PostToolUse</code> podem substituir a saída da ferramenta para qualquer ferramenta via <code>hookSpecificOutput.updatedToolOutput</code>, não apenas ferramentas MCP</div>

102 <div>Novo subcomando <a href="/pt/docs/ultrareview"><code>claude ultrareview</code></a> executa <code>/ultrareview</code> de forma não interativa a partir de CI ou scripts: imprime descobertas em stdout (<code>--json</code> para saída bruta) e sai com 0 na conclusão ou 1 em caso de falha</div>

103 <div><code>--dangerously-skip-permissions</code> agora ignora prompts para gravações em <code>.claude/</code>, <code>.git/</code>, <code>.vscode/</code>, arquivos de configuração de shell e outros caminhos previamente protegidos, enquanto comandos de remoção catastróficos ainda solicitam como rede de segurança</div>

104 <div>O seletor <code>/model</code> pode listar modelos do endpoint <code>/v1/models</code> do seu gateway quando <code>ANTHROPIC\_BASE\_URL</code> aponta para um gateway compatível com Anthropic; opte por <code>CLAUDE\_CODE\_ENABLE\_GATEWAY\_MODEL\_DISCOVERY=1</code> desde v2.1.129</div>

105 <div>Servidores MCP que encontram um erro transitório durante a inicialização agora tentam novamente automaticamente até 3 vezes em vez de permanecerem desconectados</div>

106 <div><code>ANTHROPIC\_BEDROCK\_SERVICE\_TIER</code> seleciona um nível de serviço Bedrock: <code>default</code>, <code>flex</code> ou <code>priority</code></div>

107 <div><code>/terminal-setup</code> habilita a configuração de acesso à área de transferência do iTerm2 para que <code>/copy</code> funcione, inclusive a partir de tmux</div>

108 <div>Vertex AI agora suporta Workload Identity Federation baseada em certificado X.509 (mTLS ADC)</div>

109 <div>Correções significativas de vazamento de memória: sessões com muitas imagens, <code>/usage</code> em históricos de transcrição grandes e ferramentas de longa duração sem eventos de progresso</div>

110 </div>

111</div>

112 

113[Changelog completo para v2.1.120–v2.1.126 →](/pt/changelog#2-1-120)

whats-new/2026-w19.md +60 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Semana 19 · 4–8 de maio de 2026

6 

7> Carregue plugins de arquivos .zip e URLs, pesquise o histórico de comandos em todos os projetos com Ctrl+R, crie novas worktrees a partir do HEAD local ou do padrão remoto, e bloqueie ações incondicionalmente com regras de negação rígida do modo automático.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/pt/changelog#2-1-128">v2.1.128 → v2.1.136</a></span>

11 <span>2 recursos · 4–8 de maio</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Plugins de arquivos .zip e URLs</span>

17 </div>

18 

19 <p className="digest-feature-lede">`--plugin-dir` agora aceita um arquivo de plugin <code>.zip</code> além de um diretório, e a nova flag `--plugin-url` busca um arquivo de plugin de uma URL para a sessão atual. Útil para testar um plugin antes de adicioná-lo a um marketplace, ou para enviar plugins internos de um armazenamento de artefatos.</p>

20 

21 <p className="digest-feature-try">Carregue um plugin diretamente de uma URL:</p>

22 

23 ```bash terminal theme={null}

24 claude --plugin-url https://example.com/my-plugin.zip

25 ```

26 

27 <a className="digest-feature-link" href="/pt/plugins">Guia de plugins</a>

28</div>

29 

30<div className="digest-feature">

31 <div className="digest-feature-header">

32 <span className="digest-feature-title">Pesquisa de histórico em todos os seus projetos</span>

33 <span className="digest-feature-pill">v2.1.129</span>

34 </div>

35 

36 <p className="digest-feature-lede"><code>Ctrl+R</code> a pesquisa reversa agora usa como padrão todos os prompts em todos os projetos, restaurando o comportamento anterior à v2.1.124. Pressione <code>Ctrl+S</code> enquanto pesquisa para restringir novamente ao projeto ou sessão atual. Útil quando você se lembra de um comando que executou em outro repositório na semana passada e não quer ficar procurando por ele.</p>

37 

38 <a className="digest-feature-link" href="/pt/interactive-mode#command-history">Modo interativo: histórico de comandos</a>

39</div>

40 

41<div className="digest-wins">

42 <p className="digest-wins-title">Outras melhorias</p>

43 

44 <div className="digest-wins-grid">

45 <div>A nova configuração <code>worktree.baseRef</code> (<code>fresh</code> | <code>head</code>) controla se <code>--worktree</code>, a ferramenta <code>EnterWorktree</code> e as worktrees de isolamento de agente criam branches a partir do branch padrão remoto ou do <code>HEAD</code> local; o padrão <code>fresh</code> mantém commits não enviados fora das novas worktrees</div>

46 <div>As novas regras <code>settings.autoMode.hard\_deny</code> bloqueiam ações correspondentes incondicionalmente no modo automático, independentemente de exceções de permissão, para ações que nunca devem ser executadas automaticamente mesmo quando regras de permissão mais amplas se aplicam</div>

47 <div>Os Hooks agora recebem o nível de esforço ativo através do campo de entrada JSON `effort.level` e da variável de ambiente `$CLAUDE_EFFORT`, e os comandos da ferramenta Bash podem ler <code>\$CLAUDE\_EFFORT</code></div>

48 <div><code>CLAUDE\_CODE\_DISABLE\_ALTERNATE\_SCREEN=1</code> desativa o renderizador de tela alternativa em tela cheia e mantém a conversa no scrollback nativo do terminal</div>

49 <div><code>CLAUDE\_CODE\_PACKAGE\_MANAGER\_AUTO\_UPDATE</code> permite que as instalações do Homebrew ou WinGet executem a atualização em segundo plano e solicitem reinicialização</div>

50 <div><code>CLAUDE\_CODE\_SESSION\_ID</code> agora está no ambiente do subprocesso Bash, correspondendo ao `session_id` passado para hooks</div>

51 <div><code>/mcp</code> agora mostra a contagem de ferramentas para servidores conectados e sinaliza servidores que se conectaram com 0 ferramentas</div>

52 <div><code>--channels</code> agora funciona com autenticação de console (chave de API)</div>

53 <div>Subprocessos como Bash, hooks, MCP e LSP não herdam mais variáveis de ambiente <code>OTEL\_\*</code>, portanto aplicativos instrumentados com OTEL executados através da ferramenta Bash não pegam mais o próprio endpoint OTLP do CLI</div>

54 <div>Os resumos de progresso do sub-agente agora atingem o cache de prompt, reduzindo o custo do token <code>cache\_creation</code> em aproximadamente 3x</div>

55 <div>Várias correções de confiabilidade de OAuth e credenciais: sessões paralelas não terminam mais em 401 após uma corrida de token de atualização, tokens de atualização OAuth do MCP não são mais perdidos quando vários servidores são atualizados simultaneamente, e um raro loop de login de uma escrita de credencial concorrente é corrigido</div>

56 <div>A nova chave de administrador <code>parentSettingsBehavior</code> permite que administradores optem pelo SDK <code>managedSettings</code> na mesclagem de política</div>

57 </div>

58</div>

59 

60[Changelog completo para v2.1.128–v2.1.136 →](/pt/changelog#2-1-128)