Konfigurasi, kustomisasi, pengaturan platform, dan referensi API untuk Pi.

Tema

pi dapat membuat tema. Mintalah untuk membuatkannya untuk pengaturan Anda.

Tema adalah file JSON yang menentukan warna untuk TUI.

Daftar isi

Lokasi

Pi memuat tema dari:

  • Bawaan: dark, light
  • Global: ~/.pi/agent/themes/*.json
  • Proyek: .pi/themes/*.json (hanya setelah proyek dipercaya)
  • Paket: themes/ direktori atau pi.themes entri di package.json
  • Pengaturan: themes array dengan file atau direktori
  • CLI: --theme <path> (dapat diulang)

Nonaktifkan penemuan dengan --no-themes.

Memilih Tema

Pilih tema melalui /settings atau di settings.json:

{
  "theme": "my-theme"
}

Saat pertama kali dijalankan, pi mendeteksi latar belakang terminal Anda dan defaultnya adalah dark atau light.

Membuat Tema Kustom

  1. Buat file tema:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json
  1. Tentukan tema dengan semua warna yang diperlukan (lihat 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. Pilih tema melalui /settings.

Hot reload: Saat Anda mengedit file tema khusus yang sedang aktif, pi memuat ulang secara otomatis untuk mendapatkan masukan visual langsung.

Format 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 wajib diisi, harus unik, dan tidak boleh mengandung /.
  • vars adalah opsional. Tentukan warna yang dapat digunakan kembali di sini, lalu referensikan di colors.
  • colors harus mendefinisikan seluruh 51 token yang diperlukan. thinkingMax bersifat opsional dan kembali ke thinkingXhigh; scrollbarThumb bersifat opsional dan kembali ke selectedBg.

Bidang $schema mengaktifkan pelengkapan dan validasi otomatis editor.

Token Warna

Setiap tema harus menentukan 51 token warna yang diperlukan. thinkingMax dan scrollbarThumb bersifat opsional untuk kompatibilitas dengan tema yang ada; jika dihilangkan, masing-masing menggunakan thinkingXhigh dan selectedBg.

UI Inti (11 warna)

Token Tujuan
accent Aksen utama (logo, item yang dipilih, kursor)
border Perbatasan biasa
borderAccent Perbatasan yang disorot
borderMuted Batas halus (editor)
success Status sukses
error Status kesalahan
warning Status peringatan
muted Teks sekunder
dim Teks tersier
text Teks default (biasanya "")
thinkingText Teks blok berpikir

Latar Belakang & Konten (11 wajib, 1 opsional)

Token Tujuan
selectedBg Latar belakang garis yang dipilih
scrollbarThumb Latar belakang jempol scrollbar layar penuh; opsional, kembali ke selectedBg
userMessageBg Latar belakang pesan pengguna
userMessageText Teks pesan pengguna
customMessageBg Latar belakang pesan ekstensi
customMessageText Teks pesan ekstensi
customMessageLabel Label pesan ekstensi
toolPendingBg Kotak alat (menunggu keputusan)
toolSuccessBg Kotak alat (sukses)
toolErrorBg Kotak alat (kesalahan)
toolTitle Judul alat
toolOutput Teks keluaran alat

Markdown (10 warna)

Token Tujuan
mdHeading Judul
mdLink Teks tautan
mdLinkUrl URL tautan
mdCode Kode sebaris
mdCodeBlock Konten blok kode
mdCodeBlockBorder Pagar blok kode
mdQuote Teks kutipan blok
mdQuoteBorder Batas blokquote
mdHr Aturan horisontal
mdListBullet Daftar poin-poin

Perbedaan Alat (3 warna)

Token Tujuan
toolDiffAdded Menambahkan baris
toolDiffRemoved Garis yang dihapus
toolDiffContext Garis konteks

Penyorotan Sintaks (9 warna)

Token Tujuan
syntaxComment Komentar
syntaxKeyword Kata kunci
syntaxFunction Nama fungsi
syntaxVariable Variabel
syntaxString string
syntaxNumber Angka
syntaxType Jenis
syntaxOperator Operator
syntaxPunctuation tanda baca

Batas Tingkat Berpikir (6 wajib, 1 opsional)

Warna batas editor menunjukkan tingkat berpikir (hierarki visual dari halus hingga menonjol):

Token Tujuan
thinkingOff Berpikir
thinkingMinimal Minimal berpikir
thinkingLow Berpikir rendah
thinkingMedium Pemikiran sedang
thinkingHigh Berpikir tinggi
thinkingXhigh Pemikiran ekstra tinggi
thinkingMax Pemikiran maksimal; opsional, kembali ke thinkingXhigh

Mode Pesta (1 warna)

Token Tujuan
bashMode Batas editor dalam mode bash (awalan !)

Ekspor HTML (opsional)

Bagian export mengontrol warna untuk /export keluaran HTML. Jika dihilangkan, warna berasal dari userMessageBg.

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

Nilai Warna

Empat format yang didukung:

Format Contoh Keterangan
kutukan "#ff0000" RGB heksa 6 digit
256 warna 39 xterm indeks palet 256 warna (0-255)
Variabel "primary" Referensi ke entri vars
Bawaan "" Warna default terminal

Palet 256 Warna

  • 0-15: Warna dasar ANSI (tergantung terminal)
  • 16-231: 6×6×6 kubus RGB (16 + 36×R + 6×G + B dengan R,G,B adalah 0-5)
  • 232-255: Jalan skala abu-abu

Kompatibilitas Terminal

Pi menggunakan warna RGB 24-bit. Kebanyakan terminal modern mendukung ini (iTerm2, Kitty, WezTerm, Terminal Windows, VS Code). Untuk terminal lama yang hanya mendukung 256 warna, pi kembali ke perkiraan terdekat.

Periksa dukungan warna asli:

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

Kiat

Terminal gelap: Gunakan warna cerah dan jenuh dengan kontras lebih tinggi.

Terminal terang: Gunakan warna yang lebih gelap dan kalem dengan kontras lebih rendah.

Harmoni warna: Mulailah dengan palet dasar (Nord, Gruvbox, Tokyo Night), tentukan di vars, dan rujuk secara konsisten.

Pengujian: Periksa tema Anda dengan berbagai jenis pesan, status alat, konten penurunan harga, dan teks panjang.

Kode VS: Setel terminal.integrated.minimumContrastRatio ke 1 untuk warna yang akurat.

Contoh

Lihat tema bawaan: