One-command Pi distribution. pi-skore bundles four Pi packages — three
extensions and one skill lifecycle — into a single npm package.
pi install npm:@probabl/pi-skoreThat is the whole setup. Pi installs the package, and the bundled extensions
are discovered from the package's pi manifest. Nothing else to configure.
| Extension | Source | What it adds |
|---|---|---|
| skill lifecycle | @probabl/pi-skill-lifecycle |
OpenCode-style skill loading: a skill tool, a binding skill protocol, and archiving of stale skill bodies. No configuration. |
| ask user question | @probabl/pi-ask-user-question |
The ask_user_question tool, scaled past 4 questions × 4 options, with a windowed tab bar and scrolling option lists. PgUp / PgDn and the mouse wheel scroll the conversation behind the dialog while you answer. |
| thinking fold | @99percentpeople/pi-thinking-fold |
Folds reasoning/thinking output in the TUI. |
| web access | pi-web-access |
Web search and fetch tools (search providers, fetch_content, video/PDF/GitHub fetching). |
Each package is declared with an unrestricted range (*) and pinned by the
committed package-lock.json, so a given pi-skore release is a reproducible
set of extension versions rather than a floating set. Because the packages are
bundled, the resolved tree is embedded in the published tarball: consumers
extract it verbatim and never re-resolve the ranges themselves.
The package has no source of its own. It declares the four packages in
dependencies, lists them in bundleDependencies, and points its pi
manifest at their real entry points inside node_modules:
{
"pi": {
"extensions": [
"./node_modules/@probabl/pi-skill-lifecycle/extensions/index.ts",
"./node_modules/@probabl/pi-ask-user-question/index.ts",
"./node_modules/@99percentpeople/pi-thinking-fold/index.min.js",
"./node_modules/pi-web-access/dist"
]
},
"dependencies": { "…": "*" },
"bundleDependencies": ["…"]
}Bundling is required, not cosmetic. Pi installs npm packages into one shared
root (~/.pi/agent/npm), so a dependency's files are hoisted to
node_modules/<name> next to @probabl/pi-skore — not into a package-local
node_modules. A relative ./node_modules/… path would therefore not resolve
for a registry install. bundleDependencies makes npm pack place each
dependency (and its transitive tree) physically inside the published tarball,
which is what Pi documents for Pi packages used as dependencies.
Check the bundle before publishing:
npm install # populates node_modules with the four pinned packages
npm run verify # every dependency present, every pi.extensions path resolves
npm pack # -> probabl-pi-skore-<version>.tgz (self-contained)The tarball is large (~15 MB) because pi-web-access pulls in Express, the MCP
SDK, unpdf, undici, and friends. Those licenses ship inside the tarball.
pi update npm:@probabl/pi-skore # move to the newest pi-skore release
pi update --extensions # update every installed packageBecause the inner versions are pinned by the lockfile, an update arrives as a
new pi-skore release. To move the bundle to newer inner versions, refresh the
lockfile (npm update --legacy-peer-deps), run
npm run verify && npm pack --dry-run, then bump pi-skore's own version and
publish. The * ranges in package.json only describe what the lockfile is
allowed to resolve; the committed lockfile and CI's npm ci decide the exact
versions that get bundled.
pi remove npm:@probabl/pi-skorepi-skore already ships all four packages. Installing
@probabl/pi-skill-lifecycle, @probabl/pi-ask-user-question,
@99percentpeople/pi-thinking-fold, or pi-web-access separately alongside
pi-skore loads two copies with separate module roots. Add the individual
package only if you want it instead of the bundle.
@probabl/pi-skill-lifecycle— MIT, Probabl.@probabl/pi-ask-user-question— MIT, Probabl; a fork of@juicesharp/rpiv-ask-user-questionby juicesharp.@99percentpeople/pi-thinking-fold— MIT, 99percentpeople.pi-web-access— MIT, Nicolas Bailon.
Each package's own LICENSE file is included in the tarball.
MIT — see LICENSE.