Pi extensions monorepo. Each package in packages/ is an independent pi extension published to npm under @ogulcancelik/.
packages/
pi-spar/ # agent-to-agent sparring
pi-session-recall/ # search past sessions
pi-handoff/ # session context transfer
pi-web-browse/ # headless browser browsing
pi-sketch/ # visual sketching
pi-goal/ # autonomous goal pursuit
pi-ghostty-theme-sync/ # sync pi theme with ghostty colors
Each package has its own package.json with "pi": { "extensions": [...] } declaring entry points.
Extensions are TypeScript loaded by pi via jiti — no build step. The entry point exports a default function receiving ExtensionAPI.
Available imports:
@earendil-works/pi-coding-agent— extension types, components, utilities@earendil-works/pi-tui— TUI components (Text, Container, SelectList, etc.)@earendil-works/pi-ai— AI types (Message, Model, StringEnum)@sinclair/typebox— schema definitions for tool parameters
Pi extension docs: https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/extensions.md
- Create
packages/pi-<name>/withpackage.json,index.ts,README.md,LICENSE - Use
@ogulcancelik/pi-<name>as the npm package name - Set
"pi": { "extensions": ["./index.ts"] }in package.json
cd packages/pi-<name>
npm version patch # or minor/major
npm publish --access publicThen commit the version bump and push.
- TypeScript, no build step
- Lowercase, conventional commits, no emojis
- Each package is independent — no cross-package dependencies