Pi Agent Harness Mono Repo#
This is the home of the pi agent harness project including our self extensible coding agent.
- @earendil-works/pi-coding-agent: Interactive coding agent CLI
- @earendil-works/pi-agent-core: Agent runtime with tool calling and state management
- @earendil-works/pi-ai: Unified multi-provider LLM API (OpenAI, Anthropic, Google, …)
To learn more about pi:
- Visit pi.dev, the project website with demos
- Read the documentation, but you can also ask the agent to explain itself
Packages#
| Package | Description |
|---|---|
| pi-ai | Unified multi-provider LLM API (OpenAI, Claude Pro, Google, etc.) |
| pi-agent-core | Agent runtime with tool calling and state management |
| pi-coding-agent | Interactive coding agent CLI |
| pi-mom | Slack bot that delegates messages to the pi coding agent |
| pi-tui | Terminal UI library with differential rendering |
| pi-web-ui | Web components for AI chat interfaces |
| pi-pods | CLI for managing vLLM deployments on GPU pods |
Contributing#
Development#
npm install --ignore-scripts # Install all dependencies without running lifecycle scripts
npm run build # Build all packages
npm run check # Lint, format, and type check
./test.sh # Run tests (skips LLM-dependent tests without API keys)
./pi-test.sh # Run pi from sources (can be run from any directory)
Supply-chain hardening#
We treat npm dependency changes as reviewed code changes.
- Direct external dependencies are pinned to exact versions. Internal workspace packages remain version-ranged.
.npmrcsetssave-exact=trueandmin-release-age=2to avoid same-day dependency releases during npm resolution.package-lock.jsonis the dependency ground truth. Pre-commit blocks accidental lockfile commits unlessPI_ALLOW_LOCKFILE_CHANGE=1is set.npm run checkverifies pinned direct deps, native TypeScript import compatibility, and the generated coding-agent shrinkwrap.- The published CLI package includes
packages/coding-agent/npm-shrinkwrap.json, generated from the root lockfile, to pin transitive deps for npm users. - Release smoke tests use
npm run release:localto build, pack, and create isolated npm and Bun installs outside the repo before publishing. - Local release installs, documented npm installs, and
pi update --selfuse--ignore-scriptswhere supported. - CI installs with
npm ci --ignore-scripts, and a scheduled GitHub workflow runsnpm audit --omit=devplusnpm audit signatures --omit=dev. - Shrinkwrap generation has an explicit allowlist for dependency lifecycle scripts; new lifecycle-script deps fail checks until reviewed.
License#
MIT
