pi-profile-manager
Isolated profiles for Pi configuration
Package details
Install pi-profile-manager from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-profile-manager- Package
pi-profile-manager- Version
0.3.0- Published
- Aug 28, 2026
- Downloads
- 495/mo · 19/wk
- Author
- platinium
- License
- MIT
- Types
- extension
- Size
- 30.7 KB
- Dependencies
- 1 dependency · 1 peer
Pi manifest JSON
{
"extensions": [
"./extensions/profile-manager"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-profile-manager
Isolated, shareable profiles for Pi. Each profile is a normal Pi agent directory with its own settings, packages, resources, sessions, and credentials.
Install
pi install git:github.com/pl8tinium/pi-profile-manager
# or
pi install npm:pi-profile-manager
Restart Pi after installing the extension.
Quick start
/profile create work # create an empty profile
/profile use work # select it and exit Pi
Launch Pi again. You are now running inside the work profile, and everything Pi reads or writes — settings, packages, sessions, credentials — lives in that profile's directory.
How it works
Profiles live in ~/.pi/profiles/<profile_name>/. Each profile is a standalone Pi agent directory:
~/.pi/profiles/<profile_name>/
├── settings.json
├── extensions/
├── skills/
├── prompts/
├── themes/
├── sessions/
└── auth.json
When a profile is active, the extension starts Pi with the profile directory as PI_CODING_AGENT_DIR. The profile's settings.json is the only configuration Pi reads — there is no manifest, inheritance, or synchronization with the base environment. Launching a profile never fetches anything.
Two CLI flags control routing for a single launch:
pi --profile <profile_name> # launch this profile, without changing the active selection
pi --no-profile # launch the base environment, even with an active profile
Commands
| Command | Description |
|---|---|
/profile list |
Lists all profiles and marks the active one. |
/profile create <profile_name> |
Creates an empty profile. |
/profile install-profile <profile_name> <settings_source> |
Creates a profile from a local or HTTPS JSON settings file. |
/profile refresh <profile_name> <settings_source> |
Replaces the profile's settings.json from a local or HTTPS source. |
/profile use <profile_name> |
Selects a profile and exits Pi so it can be used on the next launch. |
/profile off |
Disables profile routing and exits Pi. |
/profile show [<profile_name>] |
Displays the settings.json of the named or active profile. |
/profile install <package_source> |
Installs a Pi package. Restart Pi to load it. |
/profile remove <package_source> |
Removes a Pi package. Restart Pi to apply it. |
/profile update --extensions |
Updates all packages. Restart Pi to load the updates. |
/profile update <package_source> |
Updates a package. Restart Pi to load the update. |
/profile delete <profile_name> |
Deletes the profile, including sessions and credentials. Must be inactive. |
Sharing a profile
A shareable profile is a plain Pi settings.json. It has no profile name embedded — the installer picks the local name.
{
"packages": [
"npm:<package_name>",
"git:github.com/<owner>/<repository>@<ref>"
],
"defaultProvider": "<provider>",
"defaultModel": "<model>"
}
Install it from a local file or an HTTPS URL:
/profile install-profile <profile_name> ~/shared-profiles/settings.json
/profile install-profile <profile_name> https://raw.githubusercontent.com/<owner>/<repository>/<ref>/settings.json
The file is validated and copied to ~/.pi/profiles/<profile_name>/settings.json. /profile show reads that local file.
Selecting or disabling profile routing exits Pi because the agent directory cannot be changed safely inside the current process. Package and settings changes also require launching Pi again to load them.
Refreshing a profile
/profile refresh <profile_name> <settings_source>
Refresh fetches the source and replaces the profile's settings.json — it never merges, so local edits to that file are overwritten. Extensions, sessions, credentials, and all other files are left untouched. The source is not remembered; pass it again each time you refresh.
Packages and loose resources
Use Pi's package manager for shareable extensions, skills, prompts, and themes:
/profile install npm:<package_name>
/profile install git:github.com/<owner>/<repository>@<ref>
Packages are recorded in the profile's own settings.json and installed under the profile directory.
For local-only resources, drop files directly into the profile's extensions/, skills/, prompts/, or themes/ directories. Those files are user-owned and never reconciled. Remote profile files should reference npm/Git packages rather than loose remote files.