@zigai/pi-status-bar
Pi package that provides a programmable active and idle status bar with timing stats.
Package details
Install @zigai/pi-status-bar from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@zigai/pi-status-bar- Package
@zigai/pi-status-bar- Version
0.5.0- Published
- Jul 17, 2026
- Downloads
- 592/mo · 97/wk
- Author
- zigai
- License
- MIT
- Types
- extension
- Size
- 264.6 KB
- Dependencies
- 2 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Pi Status Bar
Adds a coherent programmable status bar to Pi:
- active working-line status with spinner, text, elapsed time, and optional right-side messages
- idle post-run status, such as
Worked for 1m 12s. [45 tok/s] - an extension API for changing active text, spinner frames, timer state, idle text, and custom status segments
This package intentionally stays single-line and status-focused. For richer UI above the editor, use Pi's built-in API's.
Install
pi install npm:@zigai/pi-status-bar
Configuration
Global settings are stored in ~/.pi/agent/extension-settings/pi-status-bar.json.
| Option | Type | Default | Description |
|---|---|---|---|
statusBar.active.text |
string | — | Custom active status text. |
statusBar.active.spinner.frames |
string[] | — | Spinner frames displayed while Pi is active. |
statusBar.active.timer.visible |
boolean | true |
Show the active-run timer. |
statusBar.active.timer.paused |
boolean | false |
Display the active-run timer as paused. |
statusBar.idle.text |
string | — | Custom idle status text. |
statusBar.idle.visible |
boolean | true |
Show the status bar while Pi is idle. |
statusBar.idle.showLastRunSummary |
boolean | true |
Show the previous run summary while idle. |
rightMessages.enabled |
boolean | false |
Enable rotating messages on the right side. |
rightMessages.intervalMs |
integer | 10000 |
Delay between rotating messages in milliseconds. |
rightMessages.minGap |
integer | 4 |
Minimum spaces between repeated scrolling messages. |
rightMessages.minScrollCycles |
integer | 1 |
Minimum completed scroll cycles before advancing. |
rightMessages.scrollColumnIntervalMs |
integer | 120 |
Delay between horizontal scroll columns in milliseconds. |
rightMessages.dimmed |
boolean | true |
Render rotating messages with dim styling. |
rightMessages.italic |
boolean | true |
Render rotating messages with italic styling. |
rightMessages.messages |
string[] | [] |
Inline rotating status messages. |
rightMessages.messagesFile |
string | — | Path to a newline-delimited messages file. |
{
"$schema": "./schemas/pi-status-bar.schema.json",
"statusBar": {
"active": {
"timer": {
"visible": true,
"paused": false
}
},
"idle": {
"visible": true,
"showLastRunSummary": true
}
},
"rightMessages": {
"enabled": false,
"intervalMs": 10000,
"minGap": 4,
"minScrollCycles": 1,
"scrollColumnIntervalMs": 120,
"dimmed": true,
"italic": true,
"messages": []
}
}
Extension API
Other extensions can program the active and idle status bar through @zigai/pi-status-bar/api.
import { configureStatusBar, registerStatusBarSegment } from "@zigai/pi-status-bar/api";
const statusBar = configureStatusBar({
active: {
text: "Searching docs",
spinner: { frames: ["◐", "◓", "◑", "◒"] },
},
idle: {
text: "Ready",
showLastRunSummary: true,
},
});
statusBar.pauseTimer();
statusBar.resumeTimer();
statusBar.resetTimer();
statusBar.setActiveText("Running tests");
statusBar.setIdleText("Last run finished");
statusBar.dispose();
Custom segments can appear in the active line, idle line, or both.
const segment = registerStatusBarSegment({
id: "my-extension.status",
states: ["active", "idle"],
side: "right",
text: "review",
priority: 50,
});
segment.setText("typechecking");
segment.clear();
segment.dispose();
License
MIT