@d3ara1n/pi-editor-shell

Replaces pi's default editor and status bar with a unified rounded-corner shell embedding status info in the border

Packages

Package details

extension

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, via pinnedStatus config)
  • 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 setStatus entries 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 — setEditorComponent is last-writer-wins.
  • When the content scrolls, pi's native ↑ N more / ↓ N more indicators are replaced by the embedded status text (status takes precedence).
  • Falls back to the default editor below MIN_WIDTH (20 columns).

Dependencies