Temas
pi pode criar temas. Peça para construir um para sua configuração.
Os temas são arquivos JSON que definem as cores do TUI.
Índice
Locais
Pi carrega temas de:
- Integrado:
dark,light - Globais:
~/.pi/agent/themes/*.json - Projeto:
.pi/themes/*.json(somente depois que o projeto for confiável) - Pacotes: diretórios
themes/ou entradaspi.themesempackage.json - Configurações:
themesarray com arquivos ou diretórios - CLI:
--theme <path>(repetível)
Desative a descoberta com --no-themes.
Selecionando um tema
Selecione um tema via /settings ou em settings.json:
{
"theme": "my-theme"
}Na primeira execução, pi detecta o plano de fundo do seu terminal e o padrão é dark ou light.
Criando um tema personalizado
- Crie um arquivo de tema:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json- Defina o tema com todas as cores necessárias (veja Color Tokens):
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "my-theme",
"vars": {
"primary": "#00aaff",
"secondary": 242
},
"colors": {
"accent": "primary",
"border": "primary",
"borderAccent": "#00ffff",
"borderMuted": "secondary",
"success": "#00ff00",
"error": "#ff0000",
"warning": "#ffff00",
"muted": "secondary",
"dim": 240,
"text": "",
"thinkingText": "secondary",
"selectedBg": "#2d2d30",
"scrollbarThumb": "#555566",
"userMessageBg": "#2d2d30",
"userMessageText": "",
"customMessageBg": "#2d2d30",
"customMessageText": "",
"customMessageLabel": "primary",
"toolPendingBg": "#1e1e2e",
"toolSuccessBg": "#1e2e1e",
"toolErrorBg": "#2e1e1e",
"toolTitle": "primary",
"toolOutput": "",
"mdHeading": "#ffaa00",
"mdLink": "primary",
"mdLinkUrl": "secondary",
"mdCode": "#00ffff",
"mdCodeBlock": "",
"mdCodeBlockBorder": "secondary",
"mdQuote": "secondary",
"mdQuoteBorder": "secondary",
"mdHr": "secondary",
"mdListBullet": "#00ffff",
"toolDiffAdded": "#00ff00",
"toolDiffRemoved": "#ff0000",
"toolDiffContext": "secondary",
"syntaxComment": "secondary",
"syntaxKeyword": "primary",
"syntaxFunction": "#00aaff",
"syntaxVariable": "#ffaa00",
"syntaxString": "#00ff00",
"syntaxNumber": "#ff00ff",
"syntaxType": "#00aaff",
"syntaxOperator": "primary",
"syntaxPunctuation": "secondary",
"thinkingOff": "secondary",
"thinkingMinimal": "primary",
"thinkingLow": "#00aaff",
"thinkingMedium": "#00ffff",
"thinkingHigh": "#ff00ff",
"thinkingXhigh": "#ff0000",
"thinkingMax": "#ff0088",
"bashMode": "#ffaa00"
}
}- Selecione o tema via
/settings.
Recarregamento a quente: Quando você edita o arquivo de tema personalizado atualmente ativo, o pi o recarrega automaticamente para feedback visual imediato.
Formato do tema
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "my-theme",
"vars": {
"blue": "#0066cc",
"gray": 242
},
"colors": {
"accent": "blue",
"muted": "gray",
"text": "",
...
}
}nameé obrigatório, deve ser exclusivo e não deve conter/.varsé opcional. Defina cores reutilizáveis aqui e referencie-as emcolors.colorsdeve definir todos os 51 tokens necessários.thinkingMaxé opcional e volta parathinkingXhigh;scrollbarThumbé opcional e volta paraselectedBg.
O campo $schema permite o preenchimento automático e a validação do editor.
Fichas de cores
Cada tema deve definir todos os 51 tokens de cores necessários. thinkingMax e scrollbarThumb são opcionais para compatibilidade com temas existentes; quando omitidos, eles usam thinkingXhigh e selectedBg, respectivamente.
UI principal (11 cores)
| Símbolo | Propósito |
|---|---|
accent |
Acento primário (logotipo, itens selecionados, cursor) |
border |
Fronteiras normais |
borderAccent |
Bordas destacadas |
borderMuted |
Fronteiras sutis (editor) |
success |
Estados de sucesso |
error |
Estados de erro |
warning |
Estados de aviso |
muted |
Texto secundário |
dim |
Texto terciário |
text |
Texto padrão (geralmente "") |
thinkingText |
Texto de bloco de pensamento |
Planos de fundo e conteúdo (11 obrigatórios, 1 opcional)
| Símbolo | Propósito |
|---|---|
selectedBg |
Plano de fundo da linha selecionada |
scrollbarThumb |
Fundo do polegar da barra de rolagem em tela cheia; opcional, volta para selectedBg |
userMessageBg |
Plano de fundo da mensagem do usuário |
userMessageText |
Texto da mensagem do usuário |
customMessageBg |
Plano de fundo da mensagem de extensão |
customMessageText |
Texto da mensagem de extensão |
customMessageLabel |
Etiqueta da mensagem de extensão |
toolPendingBg |
Caixa de ferramentas (pendente) |
toolSuccessBg |
Caixa de ferramentas (sucesso) |
toolErrorBg |
Caixa de ferramentas (erro) |
toolTitle |
Título da ferramenta |
toolOutput |
Texto de saída da ferramenta |
Markdown (10 cores)
| Símbolo | Propósito |
|---|---|
mdHeading |
Títulos |
mdLink |
Texto do link |
mdLinkUrl |
URL do link |
mdCode |
Código embutido |
mdCodeBlock |
Conteúdo do bloco de código |
mdCodeBlockBorder |
Cercas de bloqueio de código |
mdQuote |
Texto de citação em bloco |
mdQuoteBorder |
Borda de citação |
mdHr |
Regra horizontal |
mdListBullet |
Listar marcadores |
Diferenças de ferramentas (3 cores)
| Símbolo | Propósito |
|---|---|
toolDiffAdded |
Linhas adicionadas |
toolDiffRemoved |
Linhas removidas |
toolDiffContext |
Linhas de contexto |
Destaque de sintaxe (9 cores)
| Símbolo | Propósito |
|---|---|
syntaxComment |
Comentários |
syntaxKeyword |
Palavras-chave |
syntaxFunction |
Nomes de funções |
syntaxVariable |
Variáveis |
syntaxString |
Cordas |
syntaxNumber |
Números |
syntaxType |
Tipos |
syntaxOperator |
Operadores |
syntaxPunctuation |
Pontuação |
Fronteiras de nível de pensamento (6 obrigatórias, 1 opcional)
Cores da borda do editor indicando o nível de pensamento (hierarquia visual de sutil a proeminente):
| Símbolo | Propósito |
|---|---|
thinkingOff |
Pensando |
thinkingMinimal |
Pensamento mínimo |
thinkingLow |
Pensamento baixo |
thinkingMedium |
Pensamento médio |
thinkingHigh |
Pensamento elevado |
thinkingXhigh |
Pensamento extra elevado |
thinkingMax |
Pensamento máximo; opcional, volta para thinkingXhigh |
Modo Bash (1 cor)
| Símbolo | Propósito |
|---|---|
bashMode |
Borda do editor no modo bash (prefixo !) |
Exportação HTML (opcional)
A seção export controla as cores da saída HTML /export. Se omitido, as cores serão derivadas de userMessageBg.
{
"export": {
"pageBg": "#18181e",
"cardBg": "#1e1e24",
"infoBg": "#3c3728"
}
}Valores de cores
Quatro formatos são suportados:
| Formatar | Exemplo | Descrição |
|---|---|---|
| Feitiço | "#ff0000" |
RGB hexadecimal de 6 dígitos |
| 256 cores | 39 |
Índice de paleta de 256 cores xterm (0-255) |
| Variável | "primary" |
Referência a uma entrada vars |
| Padrão | "" |
Cor padrão do terminal |
Paleta de 256 cores
0-15: Cores ANSI básicas (dependente do terminal)16-231: cubo RGB 6×6×6 (16 + 36×R + 6×G + Bonde R,G,B são 0-5)232-255: Rampa em tons de cinza
Compatibilidade de terminais
Pi usa cores RGB de 24 bits. A maioria dos terminais modernos suporta isso (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). Para terminais mais antigos com suporte apenas para 256 cores, pi volta para a aproximação mais próxima.
Verifique o suporte truecolor:
echo $COLORTERM # Should output "truecolor" or "24bit"Pontas
Terminais escuros: Use cores brilhantes e saturadas com maior contraste.
Terminais claros: use cores mais escuras e suaves com menor contraste.
Harmonia de cores: Comece com uma paleta base (Nord, Gruvbox, Tokyo Night), defina-a em vars e faça referência de forma consistente.
Testes: Verifique seu tema com diferentes tipos de mensagens, estados de ferramentas, conteúdo de marcação e texto longo.
Código VS: Defina terminal.integrated.minimumContrastRatio como 1 para cores precisas.
Exemplos
Veja os temas integrados: