A practical collection of Pi Coding Agent extensions I use in my daily workflow.
This repository is a small monorepo. Each extension lives in its own package under packages/ and is published independently, so you only install what you need.
Important
Pi extensions run with your full user permissions. Review an extension's source before installing it from any third party, including this one.
Install an extension permanently:
pi install npm:@villoh/pi-toolsTry one without adding it permanently:
pi -e npm:@villoh/pi-toolsCombine multiple extensions:
pi -e npm:@villoh/pi-tools -e npm:@villoh/pi-skills-manager| Package | Version | Description | Install |
|---|---|---|---|
@villoh/pi-auto-name-session |
Replaces Pi's default first-message session label with a short generated title. | pi install npm:@villoh/pi-auto-name-session |
|
@villoh/pi-btw |
Adds /btw, a parallel side conversation with its own Pi sub-session, tools, model settings, and handoff commands. |
pi install npm:@villoh/pi-btw |
|
pi-cliproxy-usage |
Displays compact CLIProxyAPI account usage meters for Claude, Codex, and Grok accounts. | pi install npm:pi-cliproxy-usage |
|
@villoh/pi-extensions-manager |
Adds /extensions to enable or disable loaded extensions and reload Pi. |
pi install npm:@villoh/pi-extensions-manager |
|
@villoh/pi-skills-manager |
Adds /skills to list, enable, and disable discovered skills. |
pi install npm:@villoh/pi-skills-manager |
|
@villoh/pi-tools |
Adds /tools to enable or disable individual tools during the current session. |
pi install npm:@villoh/pi-tools |
pi-cliproxy-usagekeeps its original unscoped name because it's already published under it. Every other package moved to the@villohnpm scope to avoid clashing with unrelated packages that already existed under the unscoped name.
npm install
npm run check # lint (biome) + each package's own check script
npm run test # each package's own test scriptVersioning and npm publishing are automated with Changesets. After a change that should ship:
npm run changeset # describe the change and pick a semver bump, per affected packageMerging to main lets the Release workflow open a "Version Packages" PR; merging that PR publishes the bumped, non-private packages to npm.
Each package keeps its own license. The repository scaffolding and original extensions are MIT.