@juanibiapina/pi-powerbar
Pi extension that renders a persistent powerline status bar with left/right segments updated via events
Package details
Install @juanibiapina/pi-powerbar from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@juanibiapina/pi-powerbar- Package
@juanibiapina/pi-powerbar- Version
0.15.1- Published
- Sep 4, 2026
- Downloads
- 3,909/mo · 1,339/wk
- Author
- juanibiapina
- License
- MIT
- Types
- extension
- Size
- 120.9 KB
- Dependencies
- 2 dependencies · 0 peers
Pi manifest JSON
{
"extensions": [
"./src",
"node_modules/@juanibiapina/pi-usage/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-powerbar
A pi extension that renders a persistent powerline-style status bar with left-aligned and right-aligned segments.
Any other pi extension can update segments by emitting a single powerbar:update event — no imports or dependencies required.
Install
pi install npm:@juanibiapina/pi-powerbar
⚠️ Load Order:
pi-powerbarmust appear afterpi-extension-settingsand before any segment-emitting extensions in yourpackagesarray in~/.pi/settings.json. It registers settings at load time (requiringpi-extension-settingsto already be loaded), and segment emitters send events thatpi-powerbarmust be ready to receive.
Usage
The powerbar renders a widget with two sides, like tmux:

Producing segments
Any extension can register and update a segment. First, register the segment so it appears in the settings menu:
pi.events.emit("powerbar:register-segment", {
id: "git-branch",
label: "Git Branch",
});
Then update it with data:
pi.events.emit("powerbar:update", {
id: "git-branch",
text: "main",
icon: "⎇",
color: "accent",
});
Segments can include a progress bar with an optional block count hint:
pi.events.emit("powerbar:update", {
id: "context-usage",
text: "",
suffix: "30%",
bar: 30, // progress value 0–100
barSegments: 10, // optional: number of discrete blocks in blocks mode
color: "muted",
});
To remove a segment:
pi.events.emit("powerbar:update", {
id: "git-branch",
text: undefined,
});
Built-in segments
| Segment ID | Description |
|---|---|
git-branch |
Current git branch (refreshes after bash commands) |
tokens |
Cumulative input/output tokens, cache reads (R) and writes (W), the latest assistant request's cache hit rate (CH), and session cost (e.g. ↑3.0k ↓400 R20k W2.0k CH80.0% $0.15). R and W are session totals; CH covers only the most recent request |
context-usage |
Context window usage as a progress bar with percentage |
provider |
Current LLM provider name (e.g. anthropic, openai) |
model |
Current model name and thinking level |
sub-hourly |
Hourly subscription usage from pi-sub-core |
sub-weekly |
Weekly subscription usage from pi-sub-core |
Configuration
Settings are managed through pi-extension-settings and can be changed via the /extension-settings command in pi.
| Setting | Description | Default |
|---|---|---|
| Left segments | Segments shown on the left side (ordered multi-select menu) | git-branch,tokens,context-usage |
| Right segments | Segments shown on the right side (ordered multi-select menu) | provider,model,sub-hourly,sub-weekly |
| Separator | String drawn between segments on the same side | │ |
| Placement | Where the powerbar appears (belowEditor or aboveEditor) |
belowEditor |
| Bar style | Visual style of progress bars (continuous or blocks) |
blocks |
| Bar width | Width of progress bars in characters (4–24) | 10 |
The left and right segment settings open an interactive menu where you can toggle segments on/off and reorder them with Shift+↑/↓. All segments registered via powerbar:register-segment appear as options. Segments not listed in either side are ignored.
Development
npm install
npm run check # lint + typecheck
npm run build # compile to dist/
npm run dev # watch mode
Testing locally against your own pi
To run pi with the powerbar loaded from this checkout instead of your globally installed version:
gh pr checkout <n> # optional: test a branch/PR
scripts/test-local.sh # launches pi with this repo's powerbar
scripts/test-local.sh seeds a throwaway agent config (under .local/) from
your real global config, swaps the powerbar package entry to this repo, and
launches pi with PI_CODING_AGENT_DIR pointing at it. Your global ~/.pi/agent
config is never modified. Extra arguments pass through to pi.
It inherits your real enabledModels (so every model you use is available) but
defaults to Claude Sonnet 4.6 at medium thinking on the anthropic provider
(your Claude subscription). Override with PI_TEST_MODEL, PI_TEST_PROVIDER,
and PI_TEST_THINKING. It symlinks your auth.json, model catalog, and the
cache/ dir (so pi-usage subscription segments populate) and writes a minimal
SYSTEM.md that marks the instance as a throwaway test on a live subscription.
License
MIT