Configuração, personalização, ajustes de plataforma e referências de API para Pi.

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 entradas pi.themes em package.json
  • Configurações: themes array 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

  1. Crie um arquivo de tema:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json
  1. 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"
  }
}
  1. 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 em colors.
  • colors deve definir todos os 51 tokens necessários. thinkingMax é opcional e volta para thinkingXhigh; scrollbarThumb é opcional e volta para selectedBg.

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 + B onde 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: