Skip to content
Henry Pi Harness
Esc
navigateopen⌘Jpreview
On this page

Repository overview

These are the Pi extensions I use daily. They are highly opinionated. I publish them as-is.

I offer no support or backward compatibility. Breaking changes may be introduced at any time. Published extensions use the @henryqw npm scope.

Pi extensions in use

Extensions

Extension Purpose
@henryqw/pi-add-dir Add external directories with context, skills, and file search.
@henryqw/pi-ask-question Ask user one interactive multiple-choice or free-text question.
@henryqw/pi-auto-compact Compact context at the set threshold and resume current task.
@henryqw/pi-config-store Create validated extension JSON stores with shared config homes.
@henryqw/pi-deps Prepare locked Node and uv dependencies for opted-in Git worktrees.
@henryqw/pi-footer Henry’s opinionated Pi footer style for concise checkout and usage details.
@henryqw/pi-herdr Run Herdr CLI commands through a shared thin client.
@henryqw/pi-herdr-btw Open and merge Pi side threads in Herdr panes.
@henryqw/pi-herdr-clone Clone the current Pi conversation path into a new Herdr tab.
@henryqw/pi-herdr-done Close and remove current Herdr worktree.
@henryqw/pi-herdr-rename Generate short chat titles and rename current Herdr location.
@henryqw/pi-memory Maintain size-capped agent memory and user-profile stores across sessions.
@henryqw/pi-multi-codex Use multiple ChatGPT Codex OAuth accounts in Pi.
@henryqw/pi-notes Keep persistent per-worktree notes visible in a Pi widget.
@henryqw/pi-open-in Open current working directory with configurable command.
@henryqw/pi-pr Show current-branch PR lifecycle, CI, mergeability, and review state in Pi footer.
@henryqw/pi-session-recall Search past Pi sessions with local FTS5 and zero LLM calls.
@henryqw/pi-subagent Delegate bounded single, parallel, chained, and extension-owned Git Flow work to isolated roles.
@henryqw/pi-task-models Shared fast/balanced/frontier model profiles for HenryQW extensions.

Internal extension relationships

Each of the 19 extensions under extensions/* appears once below. Solid arrows (-->) show internal @henryqw npm runtime dependencies declared in extensions/*/package.json.

Dashed arrows (-.->) show direct runtime protocols or couplings without an internal npm dependency. They are evidenced by package behavior or documentation. Arrows point from the consumer or recognizer to the provider or producer.

flowchart LR
  autoCompact["pi-auto-compact"] --> configStore["pi-config-store"]
  autoCompact --> taskModels["pi-task-models"]
  footer["pi-footer"] --> openIn["pi-open-in"]
  herdrBtw["pi-herdr-btw"] --> configStore
  herdrBtw --> herdr["pi-herdr"]
  herdrBtw --> taskModels
  herdrClone["pi-herdr-clone"] --> herdr
  herdrDone["pi-herdr-done"] --> herdr
  herdrRename["pi-herdr-rename"] --> herdr
  herdrRename --> taskModels
  memory["pi-memory"] --> askQuestion["pi-ask-question"]
  memory --> configStore
  memory --> taskModels
  multiCodex["pi-multi-codex"] --> configStore
  notes["pi-notes"] --> configStore
  openIn --> configStore
  sessionRecall["pi-session-recall"] --> configStore
  subagent["pi-subagent"] --> configStore
  subagent --> multiCodex
  subagent --> taskModels
  taskModels --> configStore

  footer -.->|PR status| pr["pi-pr"]
  footer -.->|Codex status| multiCodex
  taskModels -.->|numbered provider aliases| multiCodex
  memory -.->|BTW child payload/process mode| herdrBtw
  subagent -.->|ask_question child-tool exclusion| askQuestion

  subgraph standalone["Standalone extensions (no internal coupling)"]
    addDir["pi-add-dir"]
    deps["pi-deps"]
  end

Deprecated

Retired extensions and their replacements are recorded under deprecated/.

Remove

pi remove npm:@henryqw/<extension>

Replace <extension> with the extension’s unscoped name, for example pi-subagent.

Before removing @henryqw/pi-deps, disable each opted-in repository with /deps. Its copied hook is self-contained.

After removing @henryqw/pi-session-recall, delete its derived index to reclaim storage:

rm -rf ~/.pi/agent/config/pi-session-recall/

Development

Requires Node.js >=22.19.0 and pnpm 11.24.0.

pnpm install --frozen-lockfile
pnpm test
pnpm run typecheck
pnpm run pack:check

Run live Pi integration tests only when authenticated model access is available:

pnpm run test:live

Live tests use real model requests. They can incur provider cost. They set a temporary small context window so compaction completes quickly.

Manual Pi TUI check for @henryqw/pi-ask-question:

pnpm --filter @henryqw/pi-ask-question run test:manual

@henryqw/pi-auto-compact live test needs real Pi and authenticated model access:

pnpm --filter @henryqw/pi-auto-compact run test:live
PI_AUTO_COMPACT_AUTH_FILE=/path/to/auth.json pnpm --filter @henryqw/pi-auto-compact run test:live

Set PI_AUTO_COMPACT_AUTH_FILE only when auth is not at ~/.pi/agent/auth.json.

Documentation site

The landing page uses workspace manifests. The overview and extension pages use their READMEs directly. The site publishes at https://pi.henry.wang.

pnpm run docs:dev
pnpm run docs:build
pnpm run docs:validate

docs:dev starts local development. docs:build writes static files to website/dist/.

Release

See docs/releasing.md. Each extension publishes independently as an npm package under the @henryqw scope.

Was this page helpful?