Pular para o conteúdo principal
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

/config ui                     # mostra o tema ativo + perfil de cor detectado
/config ui theme               # mesma coisa (forma explícita)
/config ui theme dark          # troca para o tema escuro
/config ui theme dracula       # troca para qualquer tema pelo nome
/config ui theme tokyo-night   # nomes com hífen funcionam normalmente

/config theme dracula          # atalho equivalente a /config ui theme dracula
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:
GrupoCampoUso
Marca/HierarquiaPrimarynome do modelo, ações primárias
Secondarymulti-agent, batch, badges secundários
Accentênfase de raciocínio / cognitiva
Mutedbordas neutras, texto secundário, defaults
Estado semânticoSuccesssucesso de tool, habilitado
Warningavisos, desabilitado
Dangererros, falha de tool
Infonotas / explicações
EstruturalBorderborda padrão dos cards
Text / TextStrongcorpo de texto / negrito e títulos
Backgroundfundo dos code blocks

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.
PerfilSignificado
TrueColorterminal 24-bit
ANSI256terminal 8-bit (256 cores)
ANSIterminal clássico de 16 cores (SGR 30–37 / 90–97)
ASCIIsem cor — NO_COLOR, dumb, pipe/redirect
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:
CHATCLI_THEME=light
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.