Темы
pi может создавать темы. Попросите его создать его для вашей установки.
Темы — это файлы JSON, определяющие цвета для TUI.
Оглавление
Локации
Pi загружает темы из:
- Встроенные:
dark,light - Глобально:
~/.pi/agent/themes/*.json - Проект:
.pi/themes/*.json(только после того, как проекту доверяют) - Пакеты:
themes/каталогов илиpi.themesзаписей вpackage.json. - Настройки:
themesмассив с файлами или каталогами. - CLI:
--theme <path>(повторяемый)
Отключите обнаружение с помощью --no-themes.
Выбор темы
Выберите тему с помощью /settings или settings.json:
{
"theme": "my-theme"
}При первом запуске pi определяет фон вашего терминала и по умолчанию устанавливает значение dark или light.
Создание пользовательской темы
- Создайте файл темы:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json- Определите тему со всеми необходимыми цветами (см. 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"
}
}- Выберите тему с помощью
/settings.
Горячая перезагрузка. Когда вы редактируете активный в данный момент файл пользовательской темы, pi автоматически перезагружает его для немедленной визуальной обратной связи.
Формат темы
{
"$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обязателен, должен быть уникальным и не должен содержать/.varsне является обязательным. Определите здесь повторно используемые цвета, а затем укажите их вcolors.colorsдолжен определять все 51 требуемый токен.thinkingMaxне является обязательным и возвращается кthinkingXhigh;scrollbarThumbне является обязательным и возвращается кselectedBg.
Поле $schema включает автозаполнение и проверку редактора.
Цветные жетоны
Каждая тема должна определять все 51 требуемый жетон цвета. thinkingMax и scrollbarThumb являются необязательными для совместимости с существующими темами; если они опущены, они используют thinkingXhigh и selectedBg соответственно.
Базовый пользовательский интерфейс (11 цветов)
| Токен | Цель |
|---|---|
accent |
Основной акцент (логотип, выбранные элементы, курсор) |
border |
Нормальные границы |
borderAccent |
Выделенные границы |
borderMuted |
Тонкие границы (редактор) |
success |
Состояние успеха |
error |
Состояния ошибок |
warning |
Предупреждающие состояния |
muted |
Вторичный текст |
dim |
Третичный текст |
text |
Текст по умолчанию (обычно "") |
thinkingText |
Текст блока мышления |
Фоны и контент (11 обязательны, 1 по желанию)
| Токен | Цель |
|---|---|
selectedBg |
Фон выбранной линии |
scrollbarThumb |
Полноэкранный фон большого пальца полосы прокрутки; необязательно, возвращается к selectedBg |
userMessageBg |
Фон сообщения пользователя |
userMessageText |
Текст сообщения пользователя |
customMessageBg |
Фон сообщения расширения |
customMessageText |
Текст сообщения расширения |
customMessageLabel |
Метка сообщения расширения |
toolPendingBg |
Ящик для инструментов (на рассмотрении) |
toolSuccessBg |
Ящик для инструментов (успех) |
toolErrorBg |
Ящик для инструментов (ошибка) |
toolTitle |
Название инструмента |
toolOutput |
Текст вывода инструмента |
Markdown (10 цветов)
| Токен | Цель |
|---|---|
mdHeading |
Заголовки |
mdLink |
Текст ссылки |
mdLinkUrl |
URL-адрес ссылки |
mdCode |
Встроенный код |
mdCodeBlock |
Содержимое блока кода |
mdCodeBlockBorder |
Заборы из кодовых блоков |
mdQuote |
Текст цитаты |
mdQuoteBorder |
Граница цитаты |
mdHr |
Горизонтальное правило |
mdListBullet |
Список маркеров |
Различия инструментов (3 цвета)
| Токен | Цель |
|---|---|
toolDiffAdded |
Добавлены строки |
toolDiffRemoved |
Удалены строки |
toolDiffContext |
Контекстные строки |
Подсветка синтаксиса (9 цветов)
| Токен | Цель |
|---|---|
syntaxComment |
Комментарии |
syntaxKeyword |
Ключевые слова |
syntaxFunction |
Имена функций |
syntaxVariable |
Переменные |
syntaxString |
Струны |
syntaxNumber |
Числа |
syntaxType |
Типы |
syntaxOperator |
Операторы |
syntaxPunctuation |
Пунктуация |
Границы уровня мышления (6 обязательны, 1 по желанию)
Цвета границ редактора обозначают уровень мышления (визуальная иерархия от незаметного до заметного):
| Токен | Цель |
|---|---|
thinkingOff |
Размышляя |
thinkingMinimal |
Минимальное мышление |
thinkingLow |
Низкое мышление |
thinkingMedium |
Среднее мышление |
thinkingHigh |
Высокое мышление |
thinkingXhigh |
Очень высокое мышление |
thinkingMax |
Максимальное мышление; необязательно, возвращается к thinkingXhigh |
Режим Bash (1 цвет)
| Токен | Цель |
|---|---|
bashMode |
Граница редактора в режиме bash (префикс !) |
Экспорт HTML (необязательно)
Раздел export управляет цветами для вывода HTML /export. Если этот параметр опущен, цвета получаются из userMessageBg.
{
"export": {
"pageBg": "#18181e",
"cardBg": "#1e1e24",
"infoBg": "#3c3728"
}
}Цветовые значения
Поддерживаются четыре формата:
| Формат | Пример | Описание |
|---|---|---|
| Шестигранник | "#ff0000" |
6-значный шестнадцатеричный RGB |
| 256 цветов | 39 |
xterm 256-индекс цветовой палитры (0-255) |
| Переменная | "primary" |
Ссылка на запись vars |
| По умолчанию | "" |
Цвет терминала по умолчанию |
256-цветовая палитра
0-15: базовые цвета ANSI (зависят от терминала).16-231: RGB-куб 6×6×6 (16 + 36×R + 6×G + B, где R,G,B равны 0–5)232-255: шкала оттенков серого.
Совместимость терминалов
Pi использует 24-битные цвета RGB. Большинство современных терминалов поддерживают это (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). Для старых терминалов, поддерживающих только 256 цветов, число pi возвращается к ближайшему приближению.
Проверьте поддержку truecolor:
echo $COLORTERM # Should output "truecolor" or "24bit"Советы
Тёмные терминалы. Используйте яркие, насыщенные цвета с более высокой контрастностью.
Светлые терминалы. Используйте более темные, приглушенные цвета с меньшей контрастностью.
Цветовая гармония. Начните с базовой палитры (Nord, Gruvbox, Tokyo Night), определите ее в vars и последовательно используйте ссылки.
Тестирование. Проверьте свою тему с различными типами сообщений, состояниями инструментов, содержимым уценки и длинным текстом.
Код VS: Установите от terminal.integrated.minimumContrastRatio до 1 для получения точных цветов.
Примеры
Посмотрите встроенные темы: