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",
    "searchMatchBg": "#2d2d30",
    "searchMatchText": "",
    "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 個必需的標記。thinkingMaxscrollbarThumb 及兩個搜尋醒目提示標記都是選用的,並使用下文列出的回退值。

$schema 欄位支援編輯器自動完成和驗證。

顏色標記

每個主題必須定義所有 51 個必需的顏色標記。選用標記用於相容現有主題:thinkingMax 回退到 thinkingXhighscrollbarThumbsearchMatchBg 回退到 selectedBgsearchMatchText 回退到 text。其他搜尋相符項目會在 searchMatchBg 上使用帶底線的 searchMatchText;目前相符項目則會反轉這組前景色和背景色,並使用粗體。

核心 UI(11 種顏色)

代幣 目的
accent 主要強調(徽標、所選專案、游標)
border 正常邊框
borderAccent 突出顯示的邊框
borderMuted 微妙的邊界(編輯)
success 成功狀態
error 錯誤狀態
warning 警告狀態
muted 次要文字
dim 第三級文字
text 預設文字(通常為 ""
thinkingText thinking block 文字

背景和內容(11 個必需,3 個選用)

代幣 目的
selectedBg 選定的線條背景
scrollbarThumb 全螢幕滾動條拇指背景;選用,回落到 selectedBg
searchMatchBg 文字記錄搜尋相符項目的背景和目前相符項目的文字;選用,回退到 selectedBg
searchMatchText 文字記錄搜尋相符項目的文字和目前相符項目的背景;選用,回退到 text
userMessageBg 使用者留言背景
userMessageText 使用者訊息文字
customMessageBg 擴充訊息背景
customMessageText 擴充訊息文字
customMessageLabel 擴充訊息標籤
toolPendingBg 工具箱(待定)
toolSuccessBg 工具箱(成功)
toolErrorBg 工具箱(錯誤)
toolTitle 工具標題
toolOutput 工具輸出文字

Markdown(10 種顏色)

代幣 目的
mdHeading 標題
mdLink 連結文字
mdLinkUrl 連結網址
mdCode inline code
mdCodeBlock 程式碼塊內容
mdCodeBlockBorder 程式碼塊圍欄
mdQuote 塊引用文字
mdQuoteBorder 塊引用邊框
mdHr 水平尺
mdListBullet 列出項目符號

工具diff(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 部分控制 /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 以獲得準確的顏色。

範例

查看內建主題: