pi-plate
A pi extension that gives models a surface to stand on: ground truth about the machine, the clock, the repo, and how pi's bash tool actually behaves -- seen by the model, not the TUI.
Package details
Install pi-plate from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-plate- Package
pi-plate- Version
0.1.1- Published
- Jul 29, 2026
- Downloads
- not available
- Author
- joematthews
- License
- MIT
- Types
- extension
- Size
- 18.6 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./index.ts"
],
"image": "https://raw.githubusercontent.com/joematthews/pi-plate/main/illustration.jpg"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-plate
A pi extension that tells the model what it cannot know: the date, the machine, and the state of your git repositories.
The plate does not make the pie. It keeps the juices off the table.
Facts arrive as <pi-note> blocks, written into the conversation where the model reads them and you do not. A block appears only when it is warranted, so a session where nothing changes costs nothing after the first turn.
Install
pi install npm:pi-plate
Sent after each of your messages
These ride a hidden message appended to your turn, at the end of the context, so a change costs only the tail rather than the whole conversation.
Git
Inside a repository, the branch, the commit, and how much is uncommitted:
<pi-note>
Git: branch main, at 49f84062, 3 uncommitted changes
</pi-note>
Start pi in a directory holding several checkouts and it reads all of them:
<pi-note>
Git: 3 repos in /Users/you/Code:
api: branch main, at 1c2b3a4d, 2 uncommitted changes
web: branch develop, at 9f8e7d6c, clean, 1 behind of origin/develop
docs: branch main, no commits yet, 1 uncommitted changes
</pi-note>
Sent again only when it changes. If git cannot answer -- not a repository, git missing, a command that times out -- pi-plate says nothing rather than guessing.
Time
<pi-note>
Current Time: Local: Wed Jul 29 2026 01:26:00 GMT-0500 (Central Daylight Time), UTC: 2026-07-29T06:26:00.833Z
</pi-note>
Local and UTC together, so neither has to be converted to compare against a log line.
Sent once, in the system prompt
These do not change while pi is running, so they sit at the top where a byte-stable string costs nothing to re-send.
Machine
<pi-note>
Environment: macOS (Darwin) arm64
</pi-note>
Which dialect of stat and sed this is.
Shell
pi runs every bash command in a new shell, so cd and export do not carry between calls. pi's own tool description does not say so.
<pi-note>
Run multi-step shell work as a single command chained with &&. Each bash call starts a new /bin/bash in /Users/you/Code; cd, export, and shell variables do not carry between calls.
</pi-note>
Requirements
- pi, any version exposing
before_agent_start - git, optionally -- the git note is skipped without it
Works with any model pi can talk to, local or hosted.
Limits
pi-plate states facts. It does not override habits: knowing the platform does not reliably stop a model reaching for a GNU flag on a Mac, though it does shorten the recovery.
Scanning a directory of checkouts costs one git status per repo per turn -- about 37 ms for three repos, 155 ms for six.
Development
Run from a local clone instead of the registry:
git clone https://github.com/joematthews/pi-plate
cd pi-plate
npm install
pi install .
npm run check runs typecheck, lint, format, spell, and tests. npx tsx debug.ts prints every note pi-plate would inject, and what triggers each one.
License
MIT (c) Joe Matthews
