@sentiolabs/pi-scriptable-statusline
Scriptable footer and statusline UI package for Pi.
Package details
Install @sentiolabs/pi-scriptable-statusline from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@sentiolabs/pi-scriptable-statusline- Package
@sentiolabs/pi-scriptable-statusline- Version
0.2.0- Published
- May 14, 2026
- Downloads
- not available
- Author
- bfirestone45
- License
- MIT
- Types
- extension, skill, prompt
- Size
- 38.6 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./extensions/statusline.ts"
],
"skills": [
"./skills"
],
"prompts": [
"./prompts/*.md"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@sentiolabs/pi-scriptable-statusline
Scriptable footer and statusline UI package for Pi.
What it does
@sentiolabs/pi-scriptable-statusline owns Pi's footer with ctx.ui.setFooter() and can render scriptable widgets above or below the editor with ctx.ui.setWidget().
This package is for users who want to customize the whole footer/statusline experience with code instead of selecting from fixed presets.
Footer ownership: this package replaces Pi's footer. Disable other footer replacement packages such as
pi-powerline-footerwhen using it. Status entries from non-footer extensions are still available throughinput.extensionStatuses.
Installation
pi install npm:@sentiolabs/pi-scriptable-statusline
For local development from this monorepo:
pi -e ./packages/pi-scriptable-statusline
Quick start
/statusline init
/statusline doctor
Edit:
~/.pi/agent/scriptable-statusline/render.ts
Renderer API
import type { StatuslineRenderer } from "@sentiolabs/pi-scriptable-statusline";
const render: StatuslineRenderer = async (input) => ({
footer: [
`${input.model.label} · ${input.repo.name} · ${input.git.branch ?? "no-git"}`,
`ctx ${input.context.percent ?? "?"}% · ${input.tokens.totalLabel} · ${input.cost.totalLabel}`,
],
widgets: {
belowEditor: input.extensionStatuses.length
? [`statuses: ${input.extensionStatuses.map((status) => status.text).join(" · ")}`]
: [],
},
});
export default render;
Commands
/statusline initcreates the global renderer if missing./statusline reloadclears the renderer cache and rerenders./statusline doctorprints renderer diagnostics./statusline disableclears footer/widgets for the current session./statusline enablere-registers footer/widgets for the current session.
Natural-language setup
Use /statusline <request> to delegate your layout request to the statusline-setup workflow.
Example request:
/statusline show context on the first footer line, daily and weekly limits on the second line, and model/repo/branch below the editor.
Development
npm test --workspace @sentiolabs/pi-scriptable-statusline
npm run pack:dry-run --workspace @sentiolabs/pi-scriptable-statusline