Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

pi-ext

Personal Pi extension pack: tools, telemetry, shell bridges, workflow hacks, small demons.

Install

Use pi install. Never pi ext install. That corpse stays buried.

The repository root is a development workspace, not a Pi package. Every extension builds into its own self-contained package under dist/<extension>, and Pi loads those packages.

Build the packages:

mise run //:build-all

Build one:

mise run //:build-ext ultra

Print the explicit package list for ~/.pi/agent/settings.json:

mise run //:settings-entries

Each entry is one local package path, e.g. ~/Workspace/pi-ext/dist/ultra. After a rebuild, run /reload in Pi.

Published npm and Git packages of the generated output are planned; until then, install from a local build.

Filtering

A generated package exposes exactly one extension entry plus its declared skills. Load a subset by listing only the wanted dist/<extension> packages. Resource filters still apply per package:

{
  "packages": [
    {
      "source": "~/Workspace/pi-ext/dist/web",
      "skills": []
    }
  ]
}

Filter rules:

  • extensions selects package extension entrypoints.
  • skills independently selects extension-owned skills; [] loads none.
  • prompts and themes work the same way; [] loads none.
  • Omit a key to load every resource of that type exported by the package.
  • Values are package-root paths or globs.
  • !pattern excludes.
  • +path and -path force exact inclusion or exclusion.
  • Filters only narrow package exports. They do not resurrect unexported junk.

Settings

Extension settings live under the extension slug in Pi's settings.json, for example { "nushell": { "enable": true } }. Each value resolves in this order: CLI flag, environment variable, trusted project .pi/settings.json, user ~/.pi/agent/settings.json, built-in default. Untrusted project settings are ignored, and an invalid value warns instead of falling back to a lower source. The Config column below shows which sources each extension accepts; its README lists the keys. See settings contract for naming, validation, and code generation.

Debug

Set "pi-ext": { "debug": true } in user ~/.pi/agent/settings.json to enable bounded, private JSONL diagnostics for all extensions. A slug or list of slugs selects only those extensions; PI_<EXTENSION>_DEBUG=1|0 overrides selection for one extension. See debug contract for OS log locations, timing spans, investigation, and code generation.

Extensions

Extension slug Short explanation Config README
angel Tool-using investigative advisor backed by a configured model. settings README
ask Structured single- and multiple-choice questions for humans. none README
chrome-cdp Raw CDP commands, captures, and traces against extension-owned Chrome. settings, --chrome README
context-size Context-window usage telemetry. settings, env README
continuity Continues unfinished work after context compaction. none README
cost Token and spend telemetry. none README
decay Recency-weighted structured context compaction. settings README
fast OpenAI Codex priority service tier. settings README
footer Shared stable footer renderer. none README
git-safe Hardened Git operations and clone tooling. settings, env README
good-job Learns from pass-through gj praise and wtf complaints. settings README
horst Shared config with per-host environment facts and tool deltas. settings README
intellij Connects to IntelliJ's MCP server on demand. settings README
klaus Runs Claude models through the Claude Agent SDK. none README
masks Switches model and thinking level together. settings README
model-info Executor, transport, and advisor telemetry. none README
mockup Browser-based review of generated HTML mockups. settings, env README
notes Session-backed pending prompt notes. settings, env README
nu-bang Routes bang commands through Nushell. settings, env README
open Opens mentioned files in an editor beside Pi. none README
os-notifier Native notifications when interactive work completes or blocks. none README
pfui Pain-Free User Interface fallback identity and Pi context discovery. none README
prompt-autopsy Writes and groups Pi's generated system prompt for inspection. none README
quota Subscription quota dashboard for supported providers. settings, env README
rtk Rewrites eligible Bash tool calls through RTK. settings, env README
runtime Runtime detection telemetry for footer and status. settings, env README
session-rename Generates short session names from branch activity. settings, env README
strata Browser review of Git changes organized into cohorts and layers. settings, env README
the-system Project governance through one /system command. none README
tps Tokens-per-second footer telemetry. none README
ultra Declarative multi-agent workflow orchestration. settings README
usage Local usage statistics dashboard. none README
uv Routes Python package tooling through uv. none README
vcs-status Git and Jujutsu workspace telemetry. settings, env README
web Web fetch, search, and site-map discovery. settings, env README

Resources

The root package exports extension entrypoints and extension-owned resources only. Enabled extensions may contribute their own skills or prompts at runtime. Unrelated personal skills, prompts, and themes live in global Pi config. PFUI means Pain-Free User Interface and must remain the first explicit root manifest extension entry. The footer follows it explicitly so footer producers discover the shared footer before publishing their initial state. The extension glob supplies all remaining entrypoints and Pi deduplicates its repeated PFUI and footer matches.

{
  "extensions": [
    "extensions/pfui/index.ts",
    "extensions/footer/index.ts",
    "extensions/*/index.ts"
  ]
}

Development

Clone locally, install dependencies, then point Pi at the checkout:

git clone https://github.com/bugabinga/pi-ext.git
cd pi-ext
npm install
pi install /home/me/Workspace/pi-ext

Or add the checkout to ~/.pi/agent/settings.json:

{
  "packages": [
    {
      "source": "/home/me/Workspace/pi-ext"
    }
  ]
}

Checks:

npm run lint
npm test
npm run typecheck

Formatting:

npm run fmt

Git installs run npm install --omit=dev. For local development, run npm install inside the repository first.

Release model

Single repo version.

Tag format:

vX.Y.Z

Per-extension package versions are intentionally absent. One repo, one version. Less accounting. Fewer tiny coffins.


Tiny demons purr.
Pi feeds them your bloated prompts.
They eat the light whole.

Default branch source