Hi, I'm Utpal. I use these Pi Coding Agent extensions in my daily workflow.
I'm making them open source so you can use them or adapt them to your own setup.
- pi-focus-mode keeps prompts and assistant replies visible while hiding tool activity and optionally thinking. View demo.
- pi-prompt-stash saves your half-written prompt when Pi goes off track or asks a question. Restore it when you're ready to continue. View demo.
- pi-context-window shows the agent the context window size, usage, and a percentage or fixed-token planning threshold you set. It does not change auto-compaction. View demo.
- pi-custom-header adds a blinking dot-art portrait and split workspace header. Available from a clone only, not npm. View preview.
- pi-remote-workspace lets you edit, test, and deploy on remote servers over SSH from your local Pi session. No Pi setup on each server. View demo.
Published extensions under packages/ have separate npm names and versions. pi-custom-header stays private and source-only so you can customize its design for your own setup rather than use an npm release. The workspace root is private and is never published.
Install pi-focus-mode from npm:
pi install npm:@utpalsinghdev/pi-focus-modeInstall pi-prompt-stash:
pi install npm:@utpalsinghdev/pi-prompt-stashInstall pi-context-window:
pi install npm:@utpalsinghdev/pi-context-windowInstall pi-remote-workspace:
pi install npm:@utpalsinghdev/pi-remote-workspaceWith Git and Pi installed, clone the header into your global extensions directory for automatic discovery:
extensions_dir="${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}/extensions"
mkdir -p "$extensions_dir/.sources" &&
git clone --depth 1 --filter=blob:none --sparse https://github.com/utpalsinghdev/pi-extensions.git "$extensions_dir/.sources/pi-custom-header" &&
git -C "$extensions_dir/.sources/pi-custom-header" sparse-checkout set packages/pi-custom-header &&
ln -s ".sources/pi-custom-header/packages/pi-custom-header" "$extensions_dir/pi-custom-header"Pi automatically loads ~/.pi/agent/extensions/pi-custom-header on startup. Run /reload if Pi is already open. No pi install, settings edits, dependency install, or build is needed. The snippet respects PI_CODING_AGENT_DIR if set. Sparse checkout includes repository root files but no other extensions. See the custom header README for customization paths.
Use Node.js 22.19 or newer, npm, and Git:
git clone https://github.com/utpalsinghdev/pi-extensions.git
cd pi-extensions
npm ci --ignore-scripts
npm run focusThis starts the workspace's local Pi with only pi-focus-mode loaded. No global Pi installation or personal extensions are required. Use Pi's normal /login command if model credentials are not configured.
If Pi is already installed, you can load the source directly without installing workspace development tools:
pi --no-extensions --extension ./packages/pi-focus-modeTo try prompt stash instead, run npm run stash. See its README for isolated manual testing without touching personal prompts.
To try the context window extension, run npm run context-window. Use /context-threshold 70 for a percentage or /context-threshold-static 200k for a fixed 200,000-token limit. Setting either replaces the previous mode. Use a temporary agent directory if you do not want that run to change your saved threshold. See its README.
To try the custom header, run npm run custom-header. See its README for persistent local installation and disabling animation. It is not published to npm.
To try the remote workspace extension, run npm run remote, then /remote. Authenticate in the private popup; /remote stop returns to your local workspace. Requires OpenSSH. See its README for permissions and privacy limits.
These commands do not add extensions to your saved Pi package settings. Pi loads the TypeScript source directly; no build is required.
See Contributing for setup, checks, and adding an extension.
pi-extensions/
├── docs/
│ ├── designs/pi-focus-mode.md
│ └── publishing.md
├── packages/
│ ├── pi-custom-header/
│ │ ├── assets/pi-custom-header-preview.png
│ │ ├── extensions/index.ts
│ │ ├── lib/
│ │ ├── test/
│ │ ├── package.json
│ │ ├── LICENSE
│ │ └── README.md
│ ├── pi-context-window/
│ │ ├── assets/pi-context-window-demo.gif
│ │ ├── extensions/index.ts
│ │ ├── lib/
│ │ ├── test/
│ │ ├── package.json
│ │ ├── LICENSE
│ │ └── README.md
│ ├── pi-remote-workspace/
│ │ ├── assets/pi-remote-workspace-demo.gif
│ │ ├── extensions/index.ts
│ │ ├── lib/
│ │ ├── test/
│ │ ├── package.json
│ │ ├── LICENSE
│ │ └── README.md
│ ├── pi-prompt-stash/
│ │ ├── assets/pi-prompt-stash-demo.gif
│ │ ├── extensions/index.ts
│ │ ├── lib/
│ │ ├── test/
│ │ ├── package.json
│ │ ├── LICENSE
│ │ └── README.md
│ └── pi-focus-mode/
│ ├── assets/
│ │ ├── pi-focus-mode-demo.gif
│ │ └── pi-focus-mode-demo.mp4
│ ├── extensions/index.ts
│ ├── lib/render-adapter.ts
│ ├── test/render-adapter.test.ts
│ ├── package.json
│ ├── LICENSE
│ └── README.md
├── scripts/
├── CONTRIBUTING.md
├── LICENSE
├── package.json
├── package-lock.json
└── tsconfig.json
npm releases are per extension. pi-custom-header is intentionally source-only and must remain private. Public npm packages with the pi-package keyword are eligible for the Pi package catalog.
Package manifests stay private until release metadata and publication are approved. See Publishing extensions for release steps.
MIT.