pi-construct

A minimal Pi loadout menu for project-local packages.

Packages

Package details

extension

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

$ pi install npm:pi-construct
Package
pi-construct
Version
0.0.7
Published
Jun 19, 2026
Downloads
not available
Author
wdphoto
License
MIT
Types
extension
Size
84.8 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "./extensions/construct/index.ts"
  ]
}

Security note

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

README

The Construct

The Construct is a global Pi extension for managing project-level resources like extensions and skills.

Run /construct, select your loadout with the spacebar, then hit Enter to apply changes. If changes were made, the final panel lets you press Enter to reload Pi or Esc to return to the session.

Construct loadout
=================
Project: /Users/you/project
2 enabled · 3 available · 1 project-only

Enabled
-------
[x] pi-web-access  npm:pi-web-access
[x] pi-subagents   npm:pi-subagents

Available
---------
[ ] pi-lens         npm:pi-lens
[ ] pi-chrome       npm:pi-chrome
[ ] pi-ask-user     npm:pi-ask-user

Project-only
------------
[!] local-tooling   /Users/you/dev/local-tooling

Space toggles Construct packages. Enter applies. Esc cancels.
Project-only rows are read-only; run /construct sync to adopt them.
After changes: Enter reloads Pi, Esc returns to the session.
Runtime commands and tools are listed in /construct status.

Basic workflow

Install a Pi package locally in your project:

pi install <source> -l --approve

Sync that package declaration to Construct:

/construct sync

Use /construct sync auto only when you explicitly want to adopt every new package declaration in the current project.

In another project, run /construct. The menu shows remembered packages and lets you toggle them on or off for that project.

After applying loadout changes, press Enter on the final Construct panel to reload Pi. If you return to the session instead, run /reload when you are ready.

How it works

  • .pi/settings.json is the source of truth.
  • .pi/construct.json is advisory metadata for Construct's UI.
  • ~/.pi/agent/construct/catalog.json is your user-local Construct library.

Commands

/construct             # open the loadout menu
/construct status      # read-only diagnostics
/construct sync        # choose current project packages to remember
/construct sync auto   # remember all new current project packages
/construct sync off    # explain that automatic sync is off
/construct profile list          # list saved package groups
/construct profile save <name>   # save active Construct-managed packages
/construct profile apply <name>  # turn on a saved package group

Install

Install from npm:

pi install npm:pi-construct

Install from git:

pi install git:github.com/wdphoto/pi-construct
# or
pi install https://github.com/wdphoto/pi-construct

Install from a local checkout or filepath:

pi install /path/to/pi-construct
pi install ./relative/path/to/pi-construct
# or, from the repo root
pi install .

Development

Load this extension from the repo without installing it globally:

pi --no-extensions -e .

Run checks:

npm run check
npm run smoke
npm run e2e-smoke
npm run install-smoke
npm run invalid-drift-smoke

Test package install/discovery with a disposable home:

TMP="$(mktemp -d)"
mkdir -p "$TMP/home" "$TMP/project"
HOME="$TMP/home" pi install "$PWD" --approve
(cd "$TMP/project" && HOME="$TMP/home" pi -p '/construct status')

Do not use live global Pi config for tests unless you explicitly mean to.

Repository-local .pi/

This repo does not need to commit local .pi/ state right now. Treat .pi/settings.json and .pi/construct.json here as personal/dev-machine loadout unless that changes deliberately.

Uninstall

Remove Construct using the same source form you installed with:

pi remove npm:pi-construct
pi remove git:github.com/wdphoto/pi-construct
pi remove /path/to/pi-construct

pi uninstall <source> is also supported as an alias for pi remove <source>.

License

MIT