@d3ara1n/pi-editor-shell
Replaces pi's default editor and status bar with a unified rounded-corner shell embedding status info in the border
Package details
Install @d3ara1n/pi-editor-shell from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@d3ara1n/pi-editor-shell- Package
@d3ara1n/pi-editor-shell- Version
0.7.0- Published
- Jul 13, 2026
- Downloads
- 1,139/mo · 205/wk
- Author
- d3ara1n
- License
- MIT
- Types
- extension
- Size
- 74.5 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
],
"image": "https://raw.githubusercontent.com/d3ara1n/pi-extensions/main/packages/pi-editor-shell/preview.png"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-editor-shell
Replaces pi's default editor and status bar with a unified rounded-corner shell drawn with box-drawing glyphs (╭╮││╰╯), with status info embedded in the border. The frame and spinner use only standard Unicode; the six border icons are Nerd Font glyphs (overridable — see Configuration).
What shows up where
- Top border —
model · thinking-level(left) + pinned extension statuses (right, viapinnedStatusconfig) - Bottom border —
ctx NN%/NNk|N.NM · ⚡ cacheRead (total) hitRate%(left) + ~/Projects (main +2 ~1)(right, shows git branch + dirty state when in a repo) - Below shell — Auto-wrapping extension status line (all
setStatusentries not pinned to the top) - Border color follows pi's thinking-level / bash-mode indicator automatically.
All segments are re-read from live session state on every paint, so switching thinking level or burning context updates the frame on the next render with no extra wiring. When the agent is active, the current phase spinner (thinking/outputting/toolcall/exec) replaces the model text in the top-left slot.
Configuration
In ~/.pi/agent/settings.json under the editorShell key:
{
"editorShell": {
"pinnedStatus": ["subagent", "access-denied"],
"icons": {
"model": "robot",
"cache": "\\uf0e7"
}
}
}
Default icons
| Slot | Glyph | Nerd Font name |
|---|---|---|
model |
|
oct-cpu |
thinking |
|
oct-light_bulb |
context |
|
oct-cache |
cache |
⚡ |
oct-zap |
hitRate |
|
fa-bullseye |
folder |
|
fa-folder_open |
Model display
How the model is labeled in the top-left border ("name" by default):
{
"editorShell": {
"modelDisplay": "name"
}
}
| Value | Example |
|---|---|
"name" (default) |
Claude Opus 4.8 (Yanproxy) |
"provider-id" |
yanproxy/anthropic/claude-opus-4-8 |
"name" uses model.name; a model with no name falls back to its id, so the slot never goes blank.
Commands
| Command | Description |
|---|---|
/editor-shell:status |
Show debug info: pinned config, all extension statuses with their keys, cache totals |
How it works
The default pi editor only draws a horizontal line above and below the input area (no side borders), and a separate footer renders the status bar. This extension replaces both — it wraps the built-in CustomEditor, renders it at width - 2, wraps every line with left/right glyphs, and embeds the status bar information (extension statuses) below the shell. The total width is unchanged. Border color follows pi's borderColor (which encodes thinking level / bash mode), so the shell stays semantically consistent and reacts to theme changes automatically.
When the autocomplete popup is open, the divider between editor content and popup items becomes a T-junction (├─┤) carrying the context/cwd info, closing everything into one connected card with two panes. Below MIN_WIDTH (20 columns), it falls back to the default editor.
Installation
pi install npm:@d3ara1n/pi-editor-shell
Or add to ~/.pi/agent/settings.json:
{
"extensions": [
"/absolute/path/to/pi-extensions/packages/pi-editor-shell"
]
}
Caveats
- Mutually exclusive with other editor-replacing extensions (
border-status-editor,rainbow-editor,modal-editor, …). Disable those when enabling this one —setEditorComponentis last-writer-wins. - When the content scrolls, pi's native
↑ N more/↓ N moreindicators are replaced by the embedded status text (status takes precedence). - Falls back to the default editor below
MIN_WIDTH(20 columns).
