5.3 KiB
pi-extensions
Custom and modified extensions for the pi coding-agent.
This repo is the single source of truth for extensions that aren't suitable for general publishing — personal workflow tweaks, modified versions of built-in examples, and extensions written for specific infrastructure. Symlinked into ~/.pi/agent/extensions/ so pi loads them automatically.
Part of the same family as pi-toolkit (bring-up) and skillset (agent skills).
Install
git clone ssh://git@gitea.jordbo.se:2222/joakimp/pi-extensions.git ~/src/src_local/pi-extensions
cd ~/src/src_local/pi-extensions
chmod +x install.sh
./install.sh
Each .ts file in extensions/ is symlinked into ~/.pi/agent/extensions/. Existing real files are backed up with a timestamp. Re-runs are idempotent.
Install a subset:
./install.sh --only ssh-controlmaster # just this one
./install.sh --only "ssh-controlmaster,other" # explicit list
./install.sh --skip "git-checkpoint" # all except these
--only and --skip accept comma-separated names without the .ts suffix. --only takes precedence if both are given.
Alternative: pi install (local path)
Because package.json declares a pi manifest, you can also register this repo as a pi package:
pi install ~/src/src_local/pi-extensions
This makes pi manage the extension loading directly. The install.sh approach (symlinks) and pi install are mutually exclusive for the same extension — pick one per machine.
Uninstall
./install.sh --uninstall
Removes symlinks that point into this repo. Your own files in ~/.pi/agent/extensions/ are never touched.
Extensions
ssh-controlmaster.ts
Transparent SSH remote execution via a persistent ControlMaster socket.
When launched with --ssh user@host, all of pi's native file and shell tools
(read, write, edit, bash) are transparently redirected to execute on
the remote machine. One SSH connection is established at session start; all
subsequent tool calls multiplex over it via a Unix socket. Much faster than
the plain ssh.ts example which opens a new connection per tool call.
Use cases:
- Diagnose and fix issues on a remote server without installing pi there
- Work on Proxmox hosts, LXC containers, or ephemeral VMs
- Any machine you have SSH key access to but don't own
Usage:
# Remote home dir resolved automatically via pwd
pi --ssh user@192.168.1.10
# Explicit remote path (skips the initial pwd call)
pi --ssh root@proxmox-node:/etc/pve
# Try without modifying your global install
pi -e ~/src/src_local/pi-extensions/extensions/ssh-controlmaster.ts --ssh user@host
Requirements:
- SSH key-based auth (no password prompts — ControlMaster won't work with interactive auth)
bashavailable on the remote
How it works:
- On
session_start, establishes a ControlMaster:ssh -fN -o ControlMaster=yes -o ControlPersist=yes -o ControlPath=<socket> <remote> - All tool calls use
-o ControlMaster=no -o ControlPath=<socket>to multiplex over that socket — near-zero per-call overhead - The system prompt is patched to tell the LLM it's operating on
<remoteCwd> (via SSH ControlMaster: <remote>) - User
!shell commands are also routed over SSH - On
session_shutdown, sendsssh -O exitto cleanly tear down the master
Status bar: Shows SSH ⚡ user@host:/path when the master is ready, ⟳ connecting… during setup, and an error state if the master fails to start.
Path mapping: Paths are rewritten by replacing the local cwd with the remote cwd. This means pi should be started from a directory that maps cleanly to a path on the remote. Use the user@host:/explicit/path form when the remote path differs significantly from your local working directory.
Adding a new extension
- Drop a
.tsfile intoextensions/ - Re-run
./install.sh— it picks up the new file and symlinks it - In a running pi session,
/reloadis enough; no restart needed
Each extension is a TypeScript module loaded by jiti — no compilation step. See the pi extensions docs and the built-in examples for the API surface.
Deploying on a new machine
# 1. Prerequisites: pi installed, SSH key auth working
pi --help # creates ~/.pi/agent/ on first run
# 2. Clone and install
git clone ssh://git@gitea.jordbo.se:2222/joakimp/pi-extensions.git ~/src/src_local/pi-extensions
cd ~/src/src_local/pi-extensions && ./install.sh
# 3. Verify
ls -la ~/.pi/agent/extensions/ # should show symlinks into this repo
Related repos
pi-toolkit— pi bring-up: settings template, keybindings, shell env loadermempalace-toolkit— persistent memory layer for pi via MemPalace MCPskillset— agent skills for pi, opencode, and Claude
License
MIT — see LICENSE.