- TypeScript 94%
- Nix 6%
pi-suite #
The extension bundle behind my personal Pi harness.
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-linuxbinaries.
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 |