ask_user (@ask). Você responde num overlay interativo (Bubble Tea, o mesmo motor do command palette) e as seleções voltam estruturadas ao modelo no mesmo turno. É o equivalente ao AskUserQuestion do Claude Code.
Onde funciona
A interface
Cada chamada traz de 1 a 6 perguntas. Para cada pergunta:- um cabeçalho curto e o texto da pergunta;
- uma lista de opções (rótulo + descrição);
- single-select (radio
(•)) ou multi-select (checkbox[x]); - uma linha “Other” para digitar uma resposta livre.
Controles
Single vs múltipla escolha
Quem decide é o modelo, por pergunta, através do campomultiSelect:
multiSelect: false(ou omitido) → escolha única (radios).multiSelect: true→ múltipla escolha (checkboxes[x]); oespaçomarca/desmarca vários e oenterconfirma o conjunto.
Exceção no modo chat
O modo chat é tool-less por design — ele nunca executa tools. As exceções sancionadas são quatro, todas inofensivas por construção: oask_user (interativa), a consulta read-only à knowledge base (/config chat knowledge), o @graphview (renderização única, /config chat graphview) e a memória (/config chat memory — persiste fatos duráveis que você revela no mesmo turno e carrega o caminho de pull que permite ao chat honrar o modo de memória index: digest compacto, recall sob demanda, blocos proativos de auto-recall/session-recall/card do grafo). Quando habilitadas, o chat oferece exclusivamente essas ferramentas (nenhuma de leitura de arquivos/escrita/execução).
Funciona com qualquer provider:
- Providers com tools nativas (Claude por API key, OpenAI…): turno de decisão estruturado.
- Providers sem tools nativas (ex.: Claude em modo OAuth): turno de decisão via XML, com o formato injetado e o markup suprimido antes de chegar à tela.
Ligar/desligar
A exceção do chat vem ligada por padrão e pode ser controlada em runtime:.env:
Com a exceção ligada, cada turno de chat passa por um turno de decisão buffered (necessário para detectar/suprimir a chamada antes de exibi-la). Se preferir o streaming token-a-token no dia a dia, use
/config chat ask off.Contextos não-interativos
Em execução desassistida (gateway/daemon), pipe ou one-shot (-p) não há terminal para o overlay. Nesses casos o ask_user não trava: retorna a primeira opção de cada pergunta como fallback determinístico, deixando claro que foi auto-selecionado, e o fluxo segue.
Resultado para o modelo
A resposta volta como um resumo legível seguido de um bloco JSON canônico, para que tanto modelos fracos quanto fortes interpretem sem ambiguidade:Veja também
- Tool Use Nativo — como as chamadas estruturadas funcionam
- Modo Agente
- Modo Coder