@ityme/ipiui
Pi extension for a compact status row and shared terminal pane titles
Package details
Install @ityme/ipiui from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@ityme/ipiui- Package
@ityme/ipiui- Version
1.2.1- Published
- Nov 10, 2026
- Downloads
- 456/mo · 456/wk
- Author
- ityme
- License
- GPL-3.0-only
- Types
- extension
- Size
- 189.6 KB
- Dependencies
- 0 dependencies · 5 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
ipiui
A Pi extension that adds a compact status row above Pi's native editor and aggregates pane titles across terminal panes.


Requirements
- Pi 1.5.0 or newer (tested with Pi 1.5.0)
- Node.js 22.19 or newer
Pi loads the TypeScript extension directly; no build step is needed.
Install
Install the checked-out package directory:
pi install /absolute/path/to/ipiui
On Windows, for example:
pi install I:/ispace/ipiui
For a project-local install, add --local. Pi will load the package directory in place, so keep it available. After this repository is pushed, the Git source can be installed with:
pi install git:github.com/ityme/ipiui
The npm package name is @ityme/ipiui (the unscoped name is rejected by npm because it resembles another package). After publication, install with pi install npm:@ityme/ipiui. To publish from this directory, run npm publish --access public. The Pi command remains /ipiui.
Restart Pi or run /reload after installation. To try a checkout for one invocation without saving package settings:
pi -e /absolute/path/to/ipiui
If this directory is already listed in your Pi extensions setting, remove that duplicate entry after installing it as a package.
Status row
The row appears above Pi's native editor. It retains the native prompt, completion menu, paste, IME, mouse and keyboard handling. The footer is left empty. Five compact blocks show:
- Pi run status and elapsed time. Labels are lowercase:
workingduring execution,thinkingduring a provider's thinking stream, anderroron failure. Thinking ends when the provider reports it or tool execution starts. Providers without thinking stream events keep theworkinglabel. - Project directory and Git branch.
- Model and thinking level.
- Input/output tokens and estimated cost. The cost number is Pi's estimate; the displayed
¥is a requested label, not currency conversion. - Context usage bar, percentage and token limit.
Right-side fields use fixed colors: soft yellow for project, pale blue for branch and input tokens, muted blue-gray for model names, a distinct fixed color per letter for thinking levels, soft green for output tokens, and gold for cost. Context labels use teal-gray, the empty track is muted, and token counts use a separate neutral tone. The filled bar and percentage use teal through 60%, amber above 60%, and coral above 80%. Brackets and separators are neutral gray. Each icon receives the same ANSI foreground as its associated text; color emoji may retain their font-defined colors. During working/thinking, a 2–3-column highlight head travels left to right across all visible right-side fields, followed by a 4–6-column fading tail. It travels for 4.5 seconds, pauses for 0.5 seconds, then repeats. The effect preserves each field's hue and chroma (including the multicolor thinking letters), changing only lightness; light appearance uses stronger ink for contrast. Idle, error and aborted states stay static. Semantic status colors remain vivid, while idle stays neutral gray. Foreground colors preserve WCAG AA text contrast in dark and light appearances. Narrow terminals hide blocks by priority instead of overflowing.
Themes
chase(default): fixed field colors, multicolor thinking letters and the running highlight chase described above.rainbow: a continuous seven-color band across the project, model, usage and context blocks. It flows while working/thinking and freezes at idle. It uses the same layout and backgrounds, with no chase overlay.
Choose a theme in /ipiui → Theme (or 主题 in Chinese), or run /ipiui theme chase / /ipiui theme rainbow. /ipiui theme shows the selected theme. The choice is stored in the active Pi session branch, restored on /reload or resuming that session, and follows /tree navigation. It does not change Pi's global theme or other sessions.
Commands
Run /ipiui to open the interactive settings panel. Language is the first row; main settings and theme descriptions use Pi's native SelectList label/description columns. Open Status row to choose On or Off explicitly; Enter on the main row does not toggle it. Use the arrow keys to choose an action, Enter to confirm and Esc to cancel or go back.
The panel lets you:
- Show or hide the status row.
- Set a custom pane name or reset it to the project directory name.
- Enable/disable title synchronization or switch groups.
- Enable/disable the title activity spinner independently of synchronization.
- Choose the Chase or Rainbow theme.
- Switch panel language between English and Simplified Chinese.
- View help.
The panel defaults to English. Open /ipiui → Language and choose English or 简体中文, or run /ipiui language en / /ipiui language zh. Menus, prompts, command feedback and help switch immediately. The choice is saved to the active Pi session branch and restored on /reload, resume and /tree navigation. It does not change other sessions or the status row's working / thinking / error labels.
Direct commands are also available:
| Command | Action |
|---|---|
/ipiui on, /ipiui off, /ipiui toggle |
Control status row visibility |
/ipiui name NAME |
Set the pane title label |
/ipiui name reset |
Follow the project directory name again |
/ipiui group NAME |
Join or switch the shared title group |
/ipiui group off |
Disable title synchronization |
| `/ipiui indicator [on | off]` |
| `/ipiui theme [chase | rainbow]` |
| `/ipiui language [en | zh]` |
/ipiui status, /ipiui help |
Show current settings or command help |
Compatibility aliases remain available: /topbar, /tabname and /tabgroup.
Terminal pane titles
Title synchronization is disabled by default. Enable it in /ipiui → Title sync, or run /ipiui group NAME. The title activity spinner is a separate setting, enabled by default; control it in /ipiui → Title activity or with /ipiui indicator on|off. With synchronization off, the current pane's title shows the spinner while that Pi process is running. Turning the indicator off restores the plain pi title unless group synchronization is active. The panel uses IPIUI_GROUP (or all) as the suggested default group; setting the environment variable does not enable synchronization automatically. Each member's braille spinner can be hidden independently; idle or completed panes show just their label. Animated frames use in-memory records; temporary files synchronize state between separate Pi processes once per second. The files are removed on clean shutdown, and abandoned records expire. If the temporary sync directory disappears, ipiui recreates it automatically. Other sync failures retry with exponential backoff (up to 30 seconds); a warning appears only after three consecutive failures and includes the operation/error code, without local paths. Successful synchronization resets the failure state.
When enabled, the all group is shared across terminal windows too. To isolate windows, assign the same custom group to panes that should share a title, and a different group to other windows. Set IPIUI_GROUP before starting Pi to choose the panel's default group, then enable synchronization in the panel; or run /ipiui group NAME in each pane. Windows Terminal's WT_SESSION identifies an individual pane connection, so the extension does not use it as a window identifier.
Terminal titles are plain text; they cannot use the status row's ANSI colors. No title color escape sequences are emitted.
Development and release checks
npm test
npm run check
npm run check:package
npm run check:package creates a tarball, installs it with the Pi CLI in an isolated configuration directory, and verifies package discovery, extension loading and removal. It does not modify your normal Pi settings or call a model.
Create a local release archive with:
mkdir -p dist
npm pack --pack-destination dist
The archive contains the runtime source, metadata, documentation and license, but excludes tests and development scripts.
License
GPL-3.0-only. See LICENSE.