Skip to main content
A partir da v1.125, todas as cores do ChatCLI vêm de uma única fonte da verdade: o pacote ui/theme. Ele define uma paleta semântica (cores nomeadas por papel, não por matiz), detecta a capacidade de cor do terminal e expõe 11 temas prontos (dark, light + 9 da comunidade) que reskinam a interface inteira — chat, cards do /coder e /agent, bordas, markdown, code blocks e spinners — sem precisar reiniciar.
O tema é estado global do processo. Trocar de tema vale na próxima renderização, sem restart. Diferente do CHATCLI_CODER_UI (estilo de timeline), que o renderer relê do ambiente a cada chamada.

Trocar de tema em runtime

Autocomplete completo: digite /config ui theme <TAB> (ou /config theme <TAB>) e aparecem todos os temas: dark · light · dracula · nord · tokyo-night · solarized-dark · solarized-light · gruvbox · catppuccin-mocha · monokai · one-dark.
O painel de status (/config ui) mostra o tema ativo, a origem do valor (variável de ambiente vs. padrão), o perfil de cor detectado e a lista de temas com o ativo marcado por .

Temas disponíveis

São 11 temas no total. Cada faixa mostra o nome e as cores reais da paleta, na ordem modelo · accent (raciocínio) · ok · aviso · erro: Tema dark — padrão, terminais de fundo escuro Tema light — terminais de fundo claro Tema dracula — alto contraste roxo/rosa/ciano Tema nord — ártico frio, baixa saturação Tema tokyo-night — azul-noturno moderno Tema solarized-dark — Solarized na base escura Tema solarized-light — mesmos tons em fundo claro Tema gruvbox — retrô, quente, alto contraste Tema catppuccin-mocha — pastel suave (Mocha) Tema monokai — clássico de editor sobre carvão Tema one-dark — azul/cinza do Atom, accents suaves
dark e light são variantes calibradas do ChatCLI; os outros nove são adaptações das paletas clássicas da comunidade mapeadas nos papéis semânticos do ChatCLI (mesma estrutura, cores diferentes). Todos degradam para 256 e 16 cores mantendo os papéis distinguíveis.
A troca aplica a paleta a tudo de uma vez porque Colorize e o conversor ansiColorToLip roteiam pelo tema ativo — não há churn nos call-sites.

Paleta semântica

As cores são nomeadas pelo papel que cumprem, não pelo matiz. É isso que permite trocar o tema inteiro mexendo só na paleta:

Markdown temático

O markdown é renderizado pelo glamour com um StyleConfig derivado da paleta (substituindo o antigo glamour.WithStandardStyle("dark")), então as cores do markdown e dos code blocks compartilham os tons da UI. Realce de sintaxe via chroma e uma chip de linguagem acima de cada bloco de código. O documento é renderizado inteiro (não bloco a bloco), de modo que reference links, footnotes e espaçamento de parágrafo resolvem corretamente.

Perfil de cor e degradação graciosa

O ChatCLI detecta a capacidade do terminal e degrada com elegância. Em pipes, CI ou terminais dumb, a saída vira texto limpo sem códigos de cor. A detecção honra os sinais usuais (NO_COLOR, CLICOLOR_FORCE, TERM, COLORTERM). O tema dark mantém o índice ANSI16 = 10 para o verde, então terminais de 16 cores ficam idênticos ao comportamento legado.

Persistência

A troca em runtime vale só para o processo atual. Para fixar um padrão entre sessões, adicione ao seu .env:
O mutator emite essa dica logo após cada troca. O ChatCLI nunca reescreve seu .env sozinho. Veja CHATCLI_THEME na referência de variáveis de ambiente.
Mudança paralela na v1.125: o envelope de resposta do chat ganhou um footer com custo por turno e uso de contexto, e os spinners foram unificados em um único spinner braille temático, exibido só quando há terminal.