Honest limits of the published pi-stack packages. Not a security audit of Pi. Extensions run with full agent privileges.
Current versions this file was written against:
| Package | Version | Job |
|---|---|---|
| pi-papercuts | 0.3.3 | Agent-filed friction log |
| pi-deferred-context-engine | 0.4.3 | Defer tools/skills; promote for one run |
| pi-supernova | 0.10.1 | One CodeMode tool: read / edit / write / bash |
| pi-rotator | 0.2.1 | Multi-account rotation per provider family |
| pi-lakers-theme | 0.1.0 | Pi theme |
| pi-cliffcompaction | 0.1.0 | Mechanical autocompaction (no LLM summary) |
pi-cxx is in the tree and not published. Do not treat it as an install surface.
| In | Not in |
|---|---|
| Standalone npm packages | A private harness under some other path |
| Defer / promote / CodeMode / rotation / mechanical compact | LLM auto-routing over MCP |
| Agent-filed friction log | Automatic tool-failure sensors |
| Size caps on papercuts evidence | Secret vault / redaction pipeline |
| Workspace-bounded supernova writes | A security sandbox for untrusted code |
| Path | What loads | Notes |
|---|---|---|
pi install npm:<name> |
that package only | Preferred |
omp install npm:<name> |
that package only | Same, on OMP (theme is Pi-only) |
pi install ./packages/<name> |
one package from a clone | Same as npm for that package |
pi install git:github.com/AdityaVG13/pi-stack |
root pi.extensions only: supernova, papercuts, DCE |
Does not load rotator, lakers, or cliffcompaction |
Pi cannot install monorepo subpaths over git alone (pi#4530). Use npm or a path.
Install DCE last among tool-owning packages so it sees tools other extensions registered.
- Package code runs as the user (same as any Pi extension).
- Supernova is trusted JavaScript in a terminable worker, not a sandbox.
write/editstay in the workspace;bashand JSimportstill have process privileges. Do not run untrusted programs through it. - Third-party permission extensions that only watch top-level
edit/bashtool_calls will not see inner CodeMode primitives. Guards must be CodeMode-aware. - Skill bodies loaded by DCE come only from paths Pi already discovered; treat skills as trusted content.
- Papercuts stores whatever the agent puts in
text/cmd/stderr(size-capped only). Append-only: resolve does not scrub cut bodies. - Absolute
cwd/repopaths in the papercuts log can leak machine layout if committed. - Rotator journals hashes and counts, not bodies or credentials, at
~/.pi/agent/pi-rotator-journal.jsonl. The debug log can still carry error excerpts.
| Setting | Behavior |
|---|---|
enabled: true (default) |
Defer tools, strip skill index, dedupe identical context, short deferred blurb |
enabled: false |
No deferral -- restores the full registered tool set. Loader tools still register (package not unloaded) |
promotionLifetime: "run" (default) |
Promotions cleared on agent_settled |
promotionLifetime: "session" |
Promotions stick until reload / reset |
replaceAlwaysActive: true + empty list |
Soft-lock: only hard spine search_tools. Pin stock tools yourself |
blockedTools / blockedPrefixes non-empty |
Hard deny -- not searchable, promote refused. Escape: /deferred unblock or config edit. search_tools cannot be blocked |
Hard spine is always search_tools only. Admin tools (list_capabilities, promote_tools, demote_tools) are deferred by default -- use search_tools.
Discovery order: tool file → PAPERCUTS_FILE → nearest .git → ~/.papercuts/log.jsonl.
| Mode | How | Effect |
|---|---|---|
| Team backlog | Commit .papercuts.jsonl |
Shared in git / PRs |
| Private | gitignore or PAPERCUTS_FILE outside repo |
Machine-local only |
| CI | Set PAPERCUTS_FILE=$PWD/.papercuts.jsonl |
Avoid writing to $HOME |
Log path must be a regular file (or not exist yet). Directories, FIFOs, and device nodes are rejected. Habit, not a sensor: empty log means the agent never filed.
Full contract: packages/pi-supernova/README.md.
- One CodeMode invocation per call. Independent work belongs inside that program (
Promise.all), not as three parallelsupernovatool calls. write/editrefuse paths outside the workspace (including/tmp). Use a workspace path or a separately authorizedbashcommand.- Foreground
bashnonzero exits throw. Later statements in the same program do not run unless youcatch. Promise.allof reads fails the whole batch if one path is missing. Optional reads:Promise.allSettled.- JSON reads: put the selector in
json(json: trueorjson: ".field"). A leftoverselectorkey folds whenjsonis absent,true, or".". - Guest bindings are
read,write,edit,bash. There is nosupernovaobject in guest scope. - Token and display claims are measured in TOKEN_COSTS.md, not inferred.
- Two routers fight over
setModel. Rotator enters standby rather than splitting state. See LAYERING.md. - Cursor (and other transport-owned families) rotate only through pi-multi-account transport. Standalone clone path is pi-ai builtins.
- Pi 0.87.x rejects cloned aliases that still carry
streamSimplewithoutapi. 0.2.1 drops that method. Stay on 0.2.1+ if you clone builtin families (opencode-go, zai, deepseek, ...). - Exhaustion continuation needs Pi 0.87+.
Full contract: packages/pi-cliffcompaction/README.md.
- Takes over
session_before_compact. Do not load a second compaction extension. - Pi still decides when. This package decides what.
/treebranch summaries stay on Pi's default LLM./compactextra instructions are ignored.- Long tool results older than
keepRecentturns (default 3) and longer than 500 chars are dropped, not summarized. That is the expected miss. - Does not claim the paper's SWE-bench / Terminal-Bench / KernelBench scores.
- Pi cannot keep a hole in the provider transcript; the task head is folded into the summary string.
Theme only. Pi, not OMP. No tools, no session behavior.
- Empty DCE
replaceAlwaysActive-- onlysearch_toolsleft active. Recovery: fix config,/deferred reload, or restart. - Over-broad DCE blocks -- agent cannot self-recover via promote. Recovery:
/deferred unblock. Blockinggrepdoes not stopbash+rg. - Dueling routers -- rotator stands by; turns do not rotate. Uninstall the other router or disable rotator.
- Second compaction extension -- race on
session_before_compact. Load one. - Supernova as a sandbox -- it is not.
bashis a real shell. - Papercuts is habit -- empty log is not a clean bill of health.
- Secrets in papercuts -- no redaction; mistakes persist in append-only history.
- Non-git cwd -- papercuts go to
~/.papercuts/log.jsonlunlessPAPERCUTS_FILEis set (CI hazard). - Root git install -- you did not install rotator / cliffcompaction / lakers. Add those from npm.
/reloadafter JS package edits -- can keep old modules. Fully restart Pi/OMP.
- Auto-filing papercuts on every tool failure
- Secret detection / vault integration
- Windows CI matrix (Node
path/os.homedir; rotator tests include a known Win32fileURLToPathissue oncodex.test.mjsthat is not this stack's ship gate) - Perfect skill-index strip against arbitrary third-party rewriters
- Multi-process flock on the papercuts log (fold first-wins; rare duplicate lines OK)
- Paper benchmark scores for CliffCompaction
- That supernova inner
bash/editare visible to every third-party permission extension
Package suites only (this repo does not use root npm test as a routine gate):
cd packages/pi-papercuts && npm test
cd packages/pi-deferred-context-engine && npm install && npm test
cd packages/pi-supernova && npm test
cd packages/pi-rotator && npm test
cd packages/pi-lakers-theme && npm test
cd packages/pi-cliffcompaction && npm testRelease: node scripts/release-check.mjs (when cutting a release).
Live smoke after install (full restart, not only /reload):
/deferred status
/rotator status
/cliff status
papercuts({ action: "doctor" })