Pi Coding Agent
Pi is a minimal terminal coding harness. Default tools: read, write, edit, bash, grep, find, ls (configurable via the defaultTools setting since Pi 0.84.2). Modes: interactive (pi), print (pi -p), JSON (--mode json), RPC (--mode rpc), or embedded (createAgentSession()). Sub-agents, plan mode, permission flows, and MCP are intentionally left to extensions and Pi packages. Skill synced with Pi 0.84.2.
Pi's philosophy: adapt Pi to your workflows, not the other way around.
Architecture
Core packages on npm (source: github.com/earendil-works/pi):
| Package |
Purpose |
@earendil-works/pi-ai |
Unified LLM API across 20+ providers |
@earendil-works/pi-agent-core |
Agent runtime with tool execution and state |
@earendil-works/pi-tui |
Terminal UI components |
@earendil-works/pi-coding-agent |
CLI, extensions, skills, sessions, settings (also exports ./client for remote sessions and ./rpc-entry) |
@earendil-works/pi-web-ui |
Web components for chat interfaces |
@earendil-works/pi-client / @earendil-works/pi-protocol |
Experimental remote-session client and wire protocol (Pi 0.84.0) |
@earendil-works/pi-telemetry |
Vendor-neutral telemetry contracts (Pi 0.84.0) |
File System Layout
~/.pi/agent/ # Global config dir (PI_CODING_AGENT_DIR overrides)
├── settings.json # Global settings
├── auth.json # Credentials (0600 perms)
├── models.json # Custom provider/model definitions
├── keybindings.json # Keyboard shortcuts
├── extensions/ # Auto-discovered
├── skills/ # Auto-discovered
├── prompts/ # Auto-discovered
├── themes/ # Custom themes
└── sessions/ # JSONL session files
<project>/
└── .pi/ # Project-local config (overrides global)
├── settings.json
├── extensions/
├── skills/
├── prompts/
├── themes/
└── agents/ # Agent definitions (subagent extension)
Key Concepts
- Extensions — TypeScript modules with full system access. Hook into Pi's lifecycle to register tools, intercept calls, add commands, build UI. →
references/extensions.md
- Skills — Markdown capability packages (
SKILL.md + frontmatter) following the Agent Skills standard. Pi loads names + descriptions into the system prompt; bodies load on demand. → references/skills.md
- Settings — Hierarchical JSON: project
.pi/settings.json merges over global ~/.pi/agent/settings.json. → references/settings.md
- Packages — Bundles of extensions/skills/prompts/themes via npm, git, or local paths. Installed with
pi install. → references/packages.md
- Project trust — Pi 0.79+ asks before loading project-local settings, resources, and packages; decisions persist in
~/.pi/agent/trust.json. --approve/--no-approve override per run; defaultProjectTrust sets the non-interactive fallback. → references/settings.md
- Context files & prompt templates — Pi loads
AGENTS.md / CLAUDE.md from the agent dir and from cwd up through ancestors. Per-directory AGENTS.override.md (Pi 0.84.0) replaces same-directory context files while others layer normally. .pi/SYSTEM.md replaces the system prompt; APPEND_SYSTEM.md appends. Prompt templates in prompts/ become slash commands. → references/settings.md
- SDK — Programmatic embedding via
createAgentSession(); createAgentSessionRuntime() for session replacement. → references/sdk.md
- Custom providers & models —
models.json or extension pi.registerProvider() (config form or complete pi-ai providers) for any OpenAI-/Anthropic-/Google-compatible or custom LLM endpoint. → references/providers.md
- Sessions & compaction — Append-only JSONL with a tree structure; branch with
/tree, /fork, /clone, compact with /compact. Auto-compaction triggers when contextTokens > contextWindow - reserveTokens. Extensions intercept via session_before_compact. → references/extensions.md and references/sdk.md
How to Use This Skill
| Task |
Reference |
| Writing an extension (tools, commands, events, UI) |
references/extensions.md |
| Creating a skill |
references/skills.md |
| Configuring Pi (settings, env vars, CLI flags) |
references/settings.md |
| Building a shareable package |
references/packages.md |
| Embedding Pi programmatically |
references/sdk.md |
| Adding LLM providers or models |
references/providers.md |
| Looking for a recipe or pattern |
references/patterns.md |
For exact CLI flags run pi --help or read the relevant reference. Resource flags (--no-extensions, --no-skills, --no-context-files, --no-builtin-tools, etc.) are documented in references/settings.md.
1---2name: pi3description: Provides Pi-specific guidance for extensions, skills, `.pi/` config, `settings.json`, `models.json`, packages, providers, themes, SDK/RPC, sessions, and compaction in Pi, the coding agent. Use when the user mentions Pi or Pi-specific terms such as `.pi/`, `SKILL.md`, `createAgentSession()`, `thinkingLevel`, `session_before_compact`, `pi-ai`, `pi-tui`, `pi-agent-core`, or `pi-coding-agent`. Not for Raspberry Pi hardware, the math constant, or unrelated generic tooling.4license: GPLv35---67# Pi Coding Agent89Pi is a minimal terminal coding harness. Default tools: `read`, `write`, `edit`, `bash`, `grep`, `find`, `ls` (configurable via the `defaultTools` setting since Pi 0.84.2). Modes: interactive (`pi`), print (`pi -p`), JSON (`--mode json`), RPC (`--mode rpc`), or embedded (`createAgentSession()`). Sub-agents, plan mode, permission flows, and MCP are intentionally left to extensions and Pi packages. Skill synced with Pi 0.84.2.1011Pi's philosophy: **adapt Pi to your workflows, not the other way around**.1213## Architecture1415Core packages on npm (source: [github.com/earendil-works/pi](https://github.com/earendil-works/pi)):1617| Package | Purpose |18|---------|---------|19| `@earendil-works/pi-ai` | Unified LLM API across 20+ providers |20| `@earendil-works/pi-agent-core` | Agent runtime with tool execution and state |21| `@earendil-works/pi-tui` | Terminal UI components |22| `@earendil-works/pi-coding-agent` | CLI, extensions, skills, sessions, settings (also exports `./client` for remote sessions and `./rpc-entry`) |23| `@earendil-works/pi-web-ui` | Web components for chat interfaces |24| `@earendil-works/pi-client` / `@earendil-works/pi-protocol` | Experimental remote-session client and wire protocol (Pi 0.84.0) |25| `@earendil-works/pi-telemetry` | Vendor-neutral telemetry contracts (Pi 0.84.0) |2627## File System Layout2829```text30~/.pi/agent/ # Global config dir (PI_CODING_AGENT_DIR overrides)31├── settings.json # Global settings32├── auth.json # Credentials (0600 perms)33├── models.json # Custom provider/model definitions34├── keybindings.json # Keyboard shortcuts35├── extensions/ # Auto-discovered36├── skills/ # Auto-discovered37├── prompts/ # Auto-discovered38├── themes/ # Custom themes39└── sessions/ # JSONL session files4041<project>/42└── .pi/ # Project-local config (overrides global)43 ├── settings.json44 ├── extensions/45 ├── skills/46 ├── prompts/47 ├── themes/48 └── agents/ # Agent definitions (subagent extension)49```5051## Key Concepts5253- **Extensions** — TypeScript modules with full system access. Hook into Pi's lifecycle to register tools, intercept calls, add commands, build UI. → `references/extensions.md`54- **Skills** — Markdown capability packages (`SKILL.md` + frontmatter) following the Agent Skills standard. Pi loads names + descriptions into the system prompt; bodies load on demand. → `references/skills.md`55- **Settings** — Hierarchical JSON: project `.pi/settings.json` merges over global `~/.pi/agent/settings.json`. → `references/settings.md`56- **Packages** — Bundles of extensions/skills/prompts/themes via npm, git, or local paths. Installed with `pi install`. → `references/packages.md`57- **Project trust** — Pi 0.79+ asks before loading project-local settings, resources, and packages; decisions persist in `~/.pi/agent/trust.json`. `--approve`/`--no-approve` override per run; `defaultProjectTrust` sets the non-interactive fallback. → `references/settings.md`58- **Context files & prompt templates** — Pi loads `AGENTS.md` / `CLAUDE.md` from the agent dir and from `cwd` up through ancestors. Per-directory `AGENTS.override.md` (Pi 0.84.0) replaces same-directory context files while others layer normally. `.pi/SYSTEM.md` replaces the system prompt; `APPEND_SYSTEM.md` appends. Prompt templates in `prompts/` become slash commands. → `references/settings.md`59- **SDK** — Programmatic embedding via `createAgentSession()`; `createAgentSessionRuntime()` for session replacement. → `references/sdk.md`60- **Custom providers & models** — `models.json` or extension `pi.registerProvider()` (config form or complete pi-ai providers) for any OpenAI-/Anthropic-/Google-compatible or custom LLM endpoint. → `references/providers.md`61- **Sessions & compaction** — Append-only JSONL with a tree structure; branch with `/tree`, `/fork`, `/clone`, compact with `/compact`. Auto-compaction triggers when `contextTokens > contextWindow - reserveTokens`. Extensions intercept via `session_before_compact`. → `references/extensions.md` and `references/sdk.md`6263## How to Use This Skill6465| Task | Reference |66|------|-----------|67| Writing an extension (tools, commands, events, UI) | `references/extensions.md` |68| Creating a skill | `references/skills.md` |69| Configuring Pi (settings, env vars, CLI flags) | `references/settings.md` |70| Building a shareable package | `references/packages.md` |71| Embedding Pi programmatically | `references/sdk.md` |72| Adding LLM providers or models | `references/providers.md` |73| Looking for a recipe or pattern | `references/patterns.md` |7475For exact CLI flags run `pi --help` or read the relevant reference. Resource flags (`--no-extensions`, `--no-skills`, `--no-context-files`, `--no-builtin-tools`, etc.) are documented in `references/settings.md`.