Pular para o conteúdo principal
Quando o modelo precisa de uma decisão sua — qual abordagem seguir, qual alvo usar, confirmar um plano — em vez de escrever “me diga A ou B” em texto solto, ele chama a ferramenta 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

ModoDisponívelObservação
Agent (/agent)Junto das demais tools (nativo ou via XML)
Coder (/coder)Idem, sob a mesma política de segurança
Chat✅ (exceção controlada)Chat é tool-less por design; abre exceção apenas para ask_user e para a consulta read-only à knowledge base, nunca para tools de execução

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

TeclaAção
/ Move o cursor
espaçoMarca/desmarca (multi) · marca o radio (single) · foca o campo “Other”
enterConfirma a pergunta e avança (finaliza após a última)
escVolta à pergunta anterior · cancela na primeira
digitarPreenche o campo “Other” (quando focado)
[1/2] Banco de dados
Qual banco devo usar?

❯ (•) Postgres   Relacional, ACID
  ( ) SQLite     Embarcado, zero-config
  [+] Other (digite uma resposta)…

↑/↓ mover · espaço/enter selecionar · esc voltar/cancelar

Single vs múltipla escolha

Quem decide é o modelo, por pergunta, através do campo multiSelect:
  • multiSelect: false (ou omitido) → escolha única (radios).
  • multiSelect: true → múltipla escolha (checkboxes [x]); o espaço marca/desmarca vários e o enter confirma o conjunto.
Para induzir múltipla escolha, basta pedir: “me pergunte, permitindo múltipla escolha, quais ambientes…”.

Exceção no modo chat

O modo chat é tool-less por design — ele nunca executa tools. As exceções sancionadas são duas, ambas inofensivas por construção: o ask_user (interativa) e a consulta read-only à knowledge base (/config chat knowledge). 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.
Em ambos os casos, depois que você responde, o mesmo spinner do prompt do turno normal aparece enquanto a IA elabora a resposta final.

Ligar/desligar

A exceção do chat vem ligada por padrão e pode ser controlada em runtime:
/config chat                 # status: modo (native/XML) e se está ativo
/config chat ask on          # ativa
/config chat ask off         # desativa (chat volta 100% sem tools)
/config chat ask toggle      # inverte
Para um padrão permanente, defina no .env:
CHATCLI_CHAT_ASK=true   # (padrão) ou false para desligar
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:
User answered:
- Banco de dados → Postgres
- Ambientes → staging, prod

{"answers":[
  {"header":"Banco de dados","selected":["Postgres"],"other":""},
  {"header":"Ambientes","selected":["staging","prod"],"other":""}
]}
Cancelar (Esc) não é erro: o modelo recebe um aviso de que você não respondeu e segue com defaults razoáveis ou pergunta de novo em texto.

Veja também