The pi adapter: what one package.json key changes
Measured on pi 0.85.0, 2026-09-08. pi resolves a package through the pi key,
else the default skills/ extensions/ prompts/ themes/ directories at the package
root. OrchestKit had neither, so pi install registered nothing and said nothing.
Flip the manifest below to see what pi's own resolver returns for each shape.
1. The manifest, three shapes
2. What the loader is actually asked
Two pi entry points, and they can disagree. collectPackageResources decides
which FILES get registered, which is what pi list shows.
loadSkillsFromDir decides which of those files becomes a skill the model can
see. A file that registers but never parses is invisible and raises nothing, which is the
108-versus-107 row below.
| Shape | Files registered | Skills parsed | Diagnostics |
|---|
3. The MCP allowlist, per server
.pi/mcp.json.example. includeTools is fail-closed at
metadata-build time: an excluded tool never enters the tool map and is not reachable
through the mcp proxy either. It is a convenience filter, not a perimeter, because pi
ships a bash tool and inherits the environment that started it.