Configuration, personnalisation, paramètres de plateforme et références API pour Pi.

Thèmes

pi peut créer des thèmes. Demandez-lui d'en créer un pour votre configuration.

Les thèmes sont des fichiers JSON qui définissent les couleurs du TUI.

Table des matières

Emplacements

Pi charge les thèmes de:

  • Intégré: dark, light
  • Mondial: ~/.pi/agent/themes/*.json
  • Projet: .pi/themes/*.json (uniquement une fois le projet approuvé)
  • Forfaits: themes/ répertoires ou pi.themes entrées dans package.json
  • Paramètres: themes tableau avec des fichiers ou des répertoires
  • CLI: --theme <path> (répétable)

Désactivez la découverte avec --no-themes.

Sélection d'un thème

Sélectionnez un thème via /settings ou en settings.json:

{
  "theme": "my-theme"
}

Lors de la première exécution, pi détecte l'arrière-plan de votre terminal et prend par défaut la valeur dark ou light.

Création d'un thème personnalisé

  1. Créez un fichier de thème:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json
  1. Définissez le thème avec toutes les couleurs requises (voir 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. Sélectionnez le thème via /settings.

Rechargement à chaud: Lorsque vous modifiez le fichier de thème personnalisé actuellement actif, pi le recharge automatiquement pour un retour visuel immédiat.

Format du thème

{
  "$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 est obligatoire, doit être unique et ne doit pas contenir /.
  • vars est facultatif. Définissez ici les couleurs réutilisables, puis référencez-les dans colors.
  • colors doit définir les 51 jetons requis. thinkingMax est facultatif et revient à thinkingXhigh; scrollbarThumb est facultatif et revient à selectedBg.

Le champ $schema permet la saisie semi-automatique et la validation de l'éditeur.

Jetons de couleur

Chaque thème doit définir les 51 jetons de couleur requis. thinkingMax et scrollbarThumb sont facultatifs pour la compatibilité avec les thèmes existants; lorsqu'ils sont omis, ils utilisent respectivement thinkingXhigh et selectedBg.

Interface utilisateur principale (11 couleurs)

Jeton But
accent Accent principal (logo, éléments sélectionnés, curseur)
border Frontières normales
borderAccent Bordures en surbrillance
borderMuted Bordures subtiles (éditeur)
success États de réussite
error États d'erreur
warning États d'avertissement
muted Texte secondaire
dim Texte tertiaire
text Texte par défaut (généralement "")
thinkingText Texte du bloc de réflexion

Arrière-plans et contenu (11 requis, 1 facultatif)

Jeton But
selectedBg Arrière-plan de la ligne sélectionnée
scrollbarThumb Arrière-plan du pouce de la barre de défilement plein écran; facultatif, revient à selectedBg
userMessageBg Contexte du message utilisateur
userMessageText Texte du message utilisateur
customMessageBg Arrière-plan du message d'extension
customMessageText Texte du message d'extension
customMessageLabel Libellé du message d'extension
toolPendingBg Boîte à outils (en attente)
toolSuccessBg Boîte à outils (succès)
toolErrorBg Boîte à outils (erreur)
toolTitle Titre de l'outil
toolOutput Texte de sortie de l'outil

Markdown (10 couleurs)

Jeton But
mdHeading Rubriques
mdLink Texte du lien
mdLinkUrl URL du lien
mdCode Code en ligne
mdCodeBlock Contenu du bloc de code
mdCodeBlockBorder Clôtures de blocs de code
mdQuote Texte de citation
mdQuoteBorder Bordure de citation de bloc
mdHr Règle horizontale
mdListBullet Liste des puces

Différents d'outils (3 couleurs)

Jeton But
toolDiffAdded Lignes ajoutées
toolDiffRemoved Lignes supprimées
toolDiffContext Lignes de contexte

Mise en évidence de la syntaxe (9 couleurs)

Jeton But
syntaxComment Commentaires
syntaxKeyword Mots-clés
syntaxFunction Noms des fonctions
syntaxVariable Variables
syntaxString Cordes
syntaxNumber Nombres
syntaxType Espèces
syntaxOperator Opérateurs
syntaxPunctuation Ponctuation

Bordures du niveau de réflexion (6 obligatoires, 1 facultative)

Couleurs de bordure de l'éditeur indiquant le niveau de réflexion (hiérarchie visuelle de subtil à proéminent):

Jeton But
thinkingOff Penser
thinkingMinimal Pensée minimale
thinkingLow Faible réflexion
thinkingMedium Pensée moyenne
thinkingHigh Haute réflexion
thinkingXhigh Réflexion très élevée
thinkingMax Réflexion maximale; facultatif, revient à thinkingXhigh

Mode Bash (1 couleur)

Jeton But
bashMode Bordure de l'éditeur en mode bash (préfixe !)

Exportation HTML (facultatif)

La section export contrôle les couleurs pour la sortie HTML /export. En cas d'omission, les couleurs sont dérivées de userMessageBg.

{
  "export": {
    "pageBg": "#18181e",
    "cardBg": "#1e1e24",
    "infoBg": "#3c3728"
  }
}

Valeurs de couleur

Quatre formats sont pris en charge:

Format Exemple Description
Hex "#ff0000" RVB hexadécimal à 6 chiffres
256 couleurs 39 Index de palette xterm de 256 couleurs (0-255)
Variable "primary" Référence à une entrée vars
Défaut "" Couleur par défaut du terminal

Palette de 256 couleurs

  • 0-15: couleurs ANSI de base (en fonction du terminal)
  • 16-231: cube RVB 6×6×6 (16 + 36×R + 6×G + B où R, V, B sont 0-5)
  • 232-255: rampe en niveaux de gris

Compatibilité des terminaux

Pi utilise des couleurs RVB 24 bits. La plupart des terminaux modernes le prennent en charge (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). Pour les terminaux plus anciens ne prenant en charge que 256 couleurs, pi revient à l'approximation la plus proche.

Vérifiez la prise en charge des couleurs vraies:

echo $COLORTERM  # Should output "truecolor" or "24bit"

Conseils

Terminaux sombres: Utilisez des couleurs vives et saturées avec un contraste plus élevé.

Bornes claires: Utilisez des couleurs plus sombres et atténuées avec un contraste plus faible.

Harmonie des couleurs: Commencez par une palette de base (Nord, Gruvbox, Tokyo Night), définissez-la en vars et référencez-la de manière cohérente.

Test: Vérifiez votre thème avec différents types de messages, états d'outils, contenu de démarque et texte long renvoyé à la ligne.

Code VS: Réglez terminal.integrated.minimumContrastRatio sur 1 pour des couleurs précises.

Exemples

Voir les thèmes intégrés: