pi-packs

Umbrella Pi package: /install picker for a curated set of pi extensions (pi-qq, pi-chrome, pi-intercom, pi-linter, pi-bar, pi-prompt-shelf, pi-caveman).

Packages

Package details

extension

Install pi-packs from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-packs
Package
pi-packs
Version
0.7.11
Published
May 13, 2026
Downloads
1,310/mo · 1,310/wk
Author
tianrendong
License
MIT
Types
extension
Size
18.2 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./extensions/install-command.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-packs

Umbrella Pi package that lets users install a curated set of individually published pi extensions through a single /install picker:

  • pi-qq — ask side questions in an overlay.
  • pi-chrome — drive your existing Chrome profile.
  • pi-intercom — message other local Pi sessions.
  • pi-linter — lint prompt drafts before sending.
  • pi-bar — show model, thinking, and context in the footer.
  • pi-prompt-shelf — shelve and restore prompt drafts.
  • pi-caveman — make replies terse to save tokens.

Operating principles

  1. Each extension is its own independently published npm package.
  2. Each extension package that's developed in-tree lives under packages/ and is wired into the workspace through npm workspaces.
  3. pi-packs is only an umbrella installer: it lets users install a curated set of extensions with one /install command.
  4. pi-packs must not know or document implementation details of any individual extension. Extension-specific code, docs, skills, versioning, and release notes belong with that extension package.

Install

Bootstrap the umbrella once:

pi install npm:pi-packs

Or locally while developing:

npm install
pi install /Users/tianrendong/pi-packs

/install — interactive picker inside Pi

After the umbrella is loaded, run /install in any Pi session. A toggle dialog lets you pick which of the listed extensions to install as their own pi packages (so you can later update or remove them individually):

  1. Pick scope: Global (~/.pi/agent/settings.json) or Project (.pi/settings.json).
  2. All packages start selected. Use ↑/↓ to move and Space to toggle any package between install / skip.
  3. Press Enter to install the selected packages, or Esc to cancel. For each install entry, pi first removes existing installs that would register conflicting extensions/commands (for example an old local pi-chrome checkout), then shells out to pi install [-l] npm:<name>.
  4. If anything was installed, /install automatically reloads Pi so the new extensions are available immediately.

Extending the picker

The list of installable packages is declared in package.json under the "pi-packs" key, decoupled from npm dependencies so the umbrella can advertise packages it does not bundle:

{
  "pi-packs": {
    "installable": [
      { "name": "pi-qq", "description": "…" },
      { "name": "pi-chrome", "description": "…" }
    ]
  }
}

How this package works

pi-packs exposes only its installer command through the pi.extensions manifest:

{
  "pi": {
    "extensions": [
      "./extensions/install-command.ts"
    ]
  }
}

It intentionally does not auto-load the curated extensions. Loading bundled entrypoints here would conflict with users who already installed packages like pi-chrome directly. Use /install to install selected packages as first-class Pi packages instead.

The picker metadata lives in package.json under pi-packs.installable; the published umbrella intentionally has no package dependencies, so installing it does not install or auto-load the curated extensions.

Verify package contents

npm run pack:dry-run