keyboard-first minimal gui for pi
- background sessions
- git review with commit history and inline comments
- markdown, syntax highlighting, and rich diffs
- file attachments with image previews
requires bun 1.4+
bunx @hyperpuncher/pi-uithe quick installers start pi-ui in the background and at login
curl -fsSL https://pi-ui.app/install | shirm https://pi-ui.app/install.ps1 | iexopen http://127.0.0.1:31415 in your browser
requires bun 1.4+
bun i -g @hyperpuncher/pi-uiparu -S pi-ui-binbrew install hyperpuncher/tap/pi-uipackage-manager installs must be started with
pi-uior configured as a background service below
start pi-ui now and at login:
pi-ui service installstop pi-ui and remove the service:
pi-ui service uninstallhomebrew manages the service separately:
brew services start pi-ui
brew services stop pi-uirequires bun 1.4+
bun ci
bun run devpi-ui stores its configuration in:
- linux:
~/.config/pi-ui/config.json - macos:
~/.config/pi-ui/config.json - windows:
%APPDATA%\pi-ui\config.json
all options with their defaults:
{
"$schema": "https://pi-ui.app/config.schema.json",
"autoTitle": {
"enabled": true,
"models": [
"openai/gpt-6-luna:low",
"openai-codex/gpt-6-luna:low",
"opencode-go/deepseek-v4.1-flash:off"
],
"prompt": "use lowercase"
},
"codeTheme": {
"dark": "pierre-dark-soft",
"light": "pierre-light"
},
"fonts": {
"mono": "system",
"sans": "system"
},
"gitView": {
"changesRatio": 0.5,
"gitPaneRatio": 0.5,
"layout": "split",
"mode": "all",
"reviewSidebarWidth": 272,
"tab": "git",
"wrap": true
},
"keybindHints": true,
"keybinds": {
"new-chat": "ctrl o",
"new-temporary-chat": "ctrl alt o",
"resume-session": "ctrl r",
"previous-session": "ctrl ^",
"command-palette": "ctrl k",
"toggle-minimal-mode": "alt m",
"toggle-tool-output": "alt o",
"switch-model": "ctrl l",
"cycle-model": "ctrl p",
"cycle-thinking": "alt t",
"cycle-thinking-backward": "alt shift t",
"toggle-thinking": "ctrl alt t",
"toggle-review": "ctrl g",
"change-workspace": "ctrl /",
"cycle-model-backward": "ctrl shift p",
"toggle-sessions": "ctrl b",
"focus-prompt": "alt p",
"focus-conversation": "alt c",
"focus-sessions": "alt s",
"focus-workspace-files": "alt f",
"focus-workspace-changes": "alt g",
"focus-workspace-editor": "alt e"
},
"minimalMode": false,
"sessionSidebar": {
"open": true,
"width": 288
},
"toolOutputHidden": false,
"toolbarHidden": false,
"updateCheck": true
}| key | action |
|---|---|
| ctrl/⌘ k | command palette |
| alt p | focus prompt |
| alt c | focus conversation |
| alt f | focus workspace files |
| alt g | focus git changes |
| alt e | focus file or diff |
| alt s | focus sessions |
| j / k or ↑ / ↓ | move or scroll focused pane |
| gg / G | top / bottom |
| ctrl/⌘ o | new session |
| ctrl/⌘ alt o | temporary chat |
| ctrl/⌘ 1–9 | switch session |
| ctrl/⌘ ^ | previous session |
| ctrl/⌘ r | session picker |
| ctrl/⌘ b | toggle session sidebar |
| ctrl/⌘ / | workspace picker |
| ctrl/⌘ g | toggle workspace |
| ctrl/⌘ l | model picker |
| ctrl/⌘ p | cycle favorite model |
| ctrl/⌘ shift p | cycle favorite model back |
| alt t | cycle thinking level |
| alt shift t | cycle thinking back |
| ctrl/⌘ alt t | toggle thinking blocks |
| alt m | toggle minimal mode |
| alt o | toggle tool output |
| / | slash commands |
| @ | file picker |
| alt enter | queue follow-up |
| alt ↑ | restore queued text |
mit