Pi 的配置、扩展、平台设置和 API 参考。

Themes

pi 可以创建主题。要求它为您的设置构建一个。

主题是定义 TUI 颜色的 JSON 文件。

目录

地点

Pi 从以下位置加载主题:

  • 内置:darklight
  • 全球:~/.pi/agent/themes/*.json
  • 项目:.pi/themes/*.json(仅在项目被信任后)
  • 包:themes/目录或package.json中的pi.themes条目
  • 设置:themes包含文件或目录的数组
  • CLI: --theme <path>(可重复)

使用 --no-themes 禁用发现。

选择主题

通过 /settingssettings.json 选择主题:

{
  "theme": "my-theme"
}

首次运行时,pi 会检测您的终端背景并默认为 darklight

创建自定义主题

  1. 创建主题文件:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json
  1. 使用所有必需的颜色定义主题(参见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. 通过/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 是可选的,并回落到 thinkingXhighscrollbarThumb 是可选的,并回落到 selectedBg

$schema 字段支持编辑器自动完成和验证。

颜色标记

每个主题必须定义所有 51 个必需的颜色标记。 thinkingMaxscrollbarThumb是可选的,以兼容现有主题;省略时,它们分别使用 thinkingXhighselectedBg

核心 UI(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 链接网址
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

重击模式(1 种颜色)

代币 目的
bashMode bash 模式下的编辑器边框(! 前缀)

HTML 导出(可选)

export 部分控制 /export HTML 输出的颜色。如果省略,则颜色源自 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:6×6×6 RGB 立方体(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 会回落到最接近的近似值。

检查真彩色支持:

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

尖端

深色终端: 使用明亮、饱和且对比度较高的颜色。

灯终端: 使用较暗、柔和的颜色和较低的对比度。

色彩和谐: 从基础调色板(Nord、Gruvbox、Tokyo Night)开始,在 vars 中定义它,并一致地引用。

测试: 使用不同的消息类型、工具状态、Markdown 内容和长换行文本检查您的主题。

VS Code:terminal.integrated.minimumContrastRatio 设置为 1 以获得准确的颜色。

示例

查看内置主题: