- This is a Node/TypeScript monorepo for independently installable Pi extension packages.
- Edit extension code under
extensions/<package>/src/*.ts; each package has its ownpackage.json,README.md,LICENSE, andtsconfig.json. - Root config owns shared tooling:
package.json,package-lock.json,biome.json,tsconfig.json,justfile, and.github/workflows/*. - Do not hand-edit generated dependency output such as
node_modules/. Keep package contents aligned with each packagefileslist andpi.extensionsentry.
Run commands from the repository root unless noted otherwise.
- Install dependencies:
npm install - Full verification:
npm run checkorjust check - Format with Biome:
npm run formatorjust format - Typecheck all workspaces:
npm run typecheck - Preview npm package contents:
just pack-caffeinate,just pack-chrome-devtools,just pack-firecrawl,just pack-goal,just pack-lsp,just pack-retry,just pack-statusline, orjust pack-sync - Try a local extension without installing:
just try-caffeinate,just try-chrome-devtools,just try-firecrawl,just try-goal,just try-lsp,just try-retry,just try-statusline, orjust try-sync - Inspect available recipes before adding new workflow commands:
just --list
- TypeScript uses
module/moduleResolution: NodeNext,target: ES2022,strict: true, andnoEmit: true. - Biome is authoritative: tabs, 100-column line width, double quotes, semicolons, and recommended lint rules.
- Keep extension packages small and self-contained. Add dependencies only when they solve a current extension need.
- When adding an extension, include the source in
pi.extensions, package publishfiles, and root workspace-aware scripts/recipes if users need them.
- There is no separate test suite configured; use
npm run checkas the CI-equivalent local gate. - For package metadata or publishing changes, also run the relevant
just pack-*dry run and inspect the tarball contents. - For Pi runtime behavior, prefer
pi -e ./extensions/<package>or the matchingjust try-*recipe before publishing.
- Publish recipes accept an optional OTP, e.g.
just publish-goal 123456; never commit OTPs, tokens, or npm credentials. - If npm shows a scoped package dist-tag but
npm view <package>returns 404, usejust npm-public <package> <otp>to set public visibility before bumping or republishing. - Use
just bump <package> patch|minor|majorfor a no-tag workspace bump. The GitHubbump-versionworkflow bumps all package versions together and tagsv*.*.*.
- Recent history uses Conventional Commits such as
feat: ...,fix: ..., andchore(release): ...; keep commit messages grounded in the actual diff. - Stage only intended paths. Do not use blanket staging for unrelated local changes.
- For PRs or handoff notes, include the commands run and any publish/visibility checks performed.
MEMORY.mdis not auto-loaded. Check it before non-trivial debugging or design work when prior project context may matter.- Keep entries short and reusable.
MEMORY.mdmust use## GOTCHAand## TASTEsections.- After a non-trivial error or discovery, add one concise entry if it will help future work.