@zigai/pi-status-bar

Pi package that provides a programmable active and idle status bar with timing stats.

Packages

Package details

extension

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