Pi Customization
Grounding
pi-mono/packages/coding-agent/docs/themes.md— theme JSON format (name, optionalvars, required 51colorstokens), locations (~/.pi/agent/themes/*.json,.pi/themes/*.json, packages, settings, CLI--theme), hot reload, color value formats.pi-mono/packages/coding-agent/docs/keybindings.md— customization via~/.pi/agent/keybindings.json, namespaced action IDs (tui.input.submit,tui.editor.cursorUp,app.interrupt, etc.), key format (modifier+key), full action tables.pi-mono/packages/coding-agent/docs/prompt-templates.md— Markdown snippets invoked via/name, locations (~/.pi/agent/prompts/*.md,.pi/prompts/*.md, packages), positional arguments ($1,$2,$@,${@:N}), YAML frontmatter with optionaldescription.pi-mono/packages/coding-agent/README.md— Context Files section for.pi/SYSTEM.md,~/.pi/agent/SYSTEM.md, andAPPEND_SYSTEM.md.pi-mono/packages/coding-agent/docs/settings.md— the overallsettings.jsonstructure for tying these together.
Invariants
- Theme Format: Themes define
name(required, unique), optionalvarsfor reusable color aliases, and all 51colorstokens. There is notype,ui,syntax, orborderstop-level key — everything is undercolors. Loaded from~/.pi/agent/themes/*.json(global) and.pi/themes/*.json(project). - Keybinding Config: Keybindings are configured in
~/.pi/agent/keybindings.json(notsettings.json). IDs are namespaced:tui.input.submit(submit),tui.editor.cursorUp,app.interrupt, etc. Run/reloadto apply changes without restarting. - Prompt Template Arguments: Templates use
$1,$2,$@,${@:N}positional syntax — not{variable}or<include>. The filename (minus.md) becomes the/namecommand. - System Prompt Override: Replace the default system prompt with
.pi/SYSTEM.md(project) or~/.pi/agent/SYSTEM.md(global). UseAPPEND_SYSTEM.mdto append instead of replace. Context files and skills are still appended after the override.
Workflows
- Create a Theme: Copy
dark.jsonfrompackages/coding-agent/src/modes/interactive/theme/, customize color values under thecolorskey, place it in~/.pi/agent/themes/, and select via/settingsorpi --theme <name>. - Override Keys: Create or edit
~/.pi/agent/keybindings.jsonmapping action IDs to key arrays (e.g.,"tui.input.submit": ["ctrl+enter"]). Run/reloadto apply. - Create a Prompt Template: Write a
.mdfile in~/.pi/agent/prompts/with optional YAML frontmatter (description); use$1,$@for arguments. Invoke with/filenamein the editor. - Override the System Prompt: Create
.pi/SYSTEM.mdin the project or~/.pi/agent/SYSTEM.mdglobally to replace the default system prompt. UseAPPEND_SYSTEM.mdat the same locations if you want to append custom instructions instead.
Anti-patterns
- Do not hardcode keybindings into agent component source code — use the configurable namespaces from
keybindings.md. - Do not put keybindings in
settings.json— keybindings have their own file (~/.pi/agent/keybindings.json). - Do not use
{variable}or<include src="...">syntax in prompt templates — the actual syntax is$1,$@,${@:N}.