[Archived] Personal Pi extension suite with compatibility integrations and Nix packaging.
README.md

pi-suite #

The extension bundle behind my personal Pi harness.

Pi TypeScript Bun Nix

Overview - Usage - Modules - Development - Layout

I made this to keep the Pi extensions used by my config behind one package and one entrypoint. Most modules are loaded from upstream unchanged; the rest have small adapters where their behavior, tools, or rendering need to fit together.

Warning

This repository was created entirely by AI. I do not treat it as a standalone project, provide support for it, or accept responsibility for its use. It exists as glue for my own Pi harness.

Overview #

  • Loads extensions sequentially so UI and tool integrations initialize in a predictable order.
  • Keeps optional extension failures isolated instead of preventing Pi from starting.
  • Bottom-aligns the regular-mode input area without replacing terminal scrollback.
  • Lets individual modules be disabled through one environment variable.
  • Blocks destructive commands and access to secrets with CC Safety Net.
  • Adapts Atuin, autoformatting, cache status, rewind, tool rendering, and web access.
  • Vendors an adapted RTK integration with its provenance recorded in source.
  • Packages the suite reproducibly with Nix, including the computer-use-linux binaries.

This is not the source of truth for my complete Pi setup. My Nix configuration handles deployment, settings, MCP and LSP servers, agents, skills, secrets, environment variables, and operating-system services.

Usage #

The package requires Pi 0.99 or newer and exposes src/index.ts as its Pi extension entrypoint. I build it with Nix and load the resulting package through Pi's settings.packages option. MCP and codemode use Pi's built-in support; enable codemode for pipelines with "defaultTools": ["+codemode"]. Independent probes belong in one tool_batch call instead, which the vendored tool-renderer registers (registerBatchTool).

patches/pi-native-mcp-lazy.patch targets Pi 0.99.2 and is applied by the Pi Nix derivation, not loaded as a suite extension. Set a native server's "lifecycle": "lazy" to prevent startup connections; first use is mcp_connect({server: "name"}), followed by normal native discovery and tools. "idleTimeout": 60 disconnects after 60 idle seconds, retaining session schemas so later calls reconnect. Defaults remain eager and no idle disconnect. No persistent schema cache, adapter, or alternate tool pipeline is added.

The patch includes a real stdio fixture and native Vitest regression tests. After applying it to a writable Pi source tree with its dependencies available, run them with Bun using the suite's isolated Vitest compatibility preload:

bun test --preload ./test/support/native-mcp-vitest.ts "$PI_NATIVE_SOURCE/packages/coding-agent/test/mcp-lazy.test.ts"

Build the package with:

nix build .#pi-suite

The Nix package exposes result/bin/computer-use-linux; pass mcp for a stdio MCP server or doctor for diagnostics. Both this launcher and the bundled npm binary include GLib's gdbus/gsettings, GNOME settings schemas, and common system/process tools in their runtime environment. Host PATH remains available for compositor and input tools such as hyprctl and ydotool. Packaging does not install or enable the AT-SPI service, portals, or input daemons; these remain host configuration. nix flake check verifies accessibility probes can launch without host PATH, not that a desktop service is running.

Disable individual modules with a comma-separated environment variable:

PI_SUITE_DISABLED=lsp,rewind,web-access

All modules are enabled by default. Run /suite inside Pi to list the modules that loaded, failed, or were disabled.

Modules #

The suite currently combines:

Group Modules
Interface Regular bottom anchor, QOL, header, footer, cache status, cache optimizer, Atuin, fast resume
Workflow Goal, BTW, cwd, FFF, autoformat, rewind, subagents
Tools ask-user, CC Safety Net, computer use, LSP, RTK, web access
Rendering autoformat and shared tool-renderer adapters

The actual extension behavior primarily belongs to the dependencies in package.json. Bugs in an unchanged upstream extension should generally go to its maintainer rather than here.

Development #

Install dependencies and run the TypeScript checks and tests with Bun:

bun install
bun run typecheck
bun test

Format and check the complete flake with Nix:

nix fmt
nix flake check

Layout #

Path Contents
src/index.ts Ordered module registry and /suite command
src/glue/ Compatibility adapters around upstream extensions
src/vendor/ Adapted vendored integrations and provenance notes
test/ Bun tests for the registry, tracking, and rendering
flake/ Nix package and treefmt configuration