Extends the pi coding agent with Claude Code features including checkpoints, memory, web search, subagents, and rule loading.
Also known as ilovepixelart/pi-code
- Stars
- 36
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- —
- Last commit
- Nov 15, 2026
- License
- MIT
What is pi-code MCP?
pi-code extends the pi coding agent with Claude Code features including checkpoints, memory, web search, subagents, and rule loading.
Summary generated from the project's README
About pi-code MCP server
pi-code brings the functionality of Claude Code to the pi coding agent. It allows developers to use a project that already contains a .claude directory, automatically reading existing rules, commands, skills, and MCP servers. The server is installed via npm or a local git repository and requires Node version 22.19 or higher along with pi version 0.80.5 or later.
This extension adds several advanced features to the pi agent, including persistent memory, web search, subagents, and checkpoints. It introduces new slash commands like /goal, /rewind, and /todos to manage complex coding tasks. Unlike other environments, this setup implements a strict security model where project-specific resources like hooks and agents are only loaded after explicit user approval. In headless runs, the system refuses to load untrusted resources to prevent unauthorized execution in automated environments.
What you can do with it
- 1Manage complex coding objectivesAn AI client can use the goal command to continue working on a task until a specific condition is met.
- 2Recover from coding errorsA developer can use checkpoints to revert the state of their project if a change goes wrong.
Written from the project's README. Every use case is checked against a quote from it.
How to install pi-code MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall pi-code MCP in Claude Code
$ claude mcp add pi-code -- npx -y pi-codeInstall pi-code MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"pi-code": {
"command": "npx",
"args": [
"-y",
"pi-code"
]
}
}
}Install pi-code MCP in VS Code
.vscode/mcp.json
{
"servers": {
"pi-code": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"pi-code"
]
}
}
}Install pi-code MCP in VS Code CLI
$ code --add-mcp '{"name":"pi-code","type":"stdio","command":"npx","args":["-y","pi-code"]}'Install pi-code MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"pi-code": {
"command": "npx",
"args": [
"-y",
"pi-code"
]
}
}
}Install pi-code MCP in Codex
$ codex mcp add pi-code -- npx -y pi-codeInstall pi-code MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.pi-code] command = "npx" args = ["-y", "pi-code"]
Install pi-code MCP in Gemini CLI
$ gemini mcp add -s user pi-code npx -- -y pi-codeInstall pi-code MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"pi-code": {
"command": "npx",
"args": [
"-y",
"pi-code"
]
}
}
}Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachableilovepixelart/pi-code is public and reachablegithub.com/ilovepixelart/pi-code ↗Pass
- Package names this repository as its sourcepi-code names ilovepixelart/pi-code as sourcenpmjs.com/package/pi-code ↗Pass
- Build provenance (Sigstore attestation)Sigstore attestation for pi-codenpmjs.com/package/pi-code/v/1.7.0#provenance ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-11-09github.com/ilovepixelart/pi-code ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from pi-codePass
- No critical advisory in the package or its dependenciesNot checked
- No hidden instructions to the model0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubpi-code
Claude Code experience for the pi coding agent, in one package. Point pi at a project that already has a .claude/ directory and it reads your existing config: rules, commands, skills, hooks, output styles, MCP servers, and agents. It also adds the Claude Code features pi lacks: a todo overlay, checkpoints, memory, web search, subagents, and goals.
What a repository ships is treated as untrusted until you approve it: project MCP servers, hooks, agents, rules, output styles, commands and skills load only once you say yes. A headless run (pi -p) cannot ask, so an undecided project loads none of them there, which is stricter than Claude, where a headless run uses them without showing the dialog.
![]()
Requirements
pi >=0.80.5 (0.99.x recommended) and Node >=22.19 for current pi. On an older pi, pi-code warns once at session start.
Install
pi install npm:pi-code # from npm
pi install -l npm:pi-code # project-local instead, writes .pi/settings.json
Other sources:
pi install git:github.com/ilovepixelart/pi-code
pi install ./pi-code # local checkout, then /reload after edits
One pi install and everything below loads on the next start. pi list shows what is installed, pi config toggles individual resources, and pi update pi-code upgrades it. Each feature is an extension under extensions/.
What it does
Each topic links to its own doc with the full contract and any divergences from Claude Code.
- Hooks — your
.claude/settings.jsonhooks on every lifecycle event, with Claude's tool vocabulary, decision fields, and background hooks. - MCP servers — every Claude config scope, all four transports, OAuth, managed policy, timeouts, prompts, and resources. On pi 0.99 and later the servers are handed to pi's own MCP support.
- Custom slash commands —
.claude/commandswith arguments, bash spans,@fileinlining, frontmatter, and model invocation. - Skills —
.claude/skillsdiscovery plus the same dynamic content commands get. - Subagents — built-in and custom agents, background runs, per-agent memory, worktree isolation.
- CLAUDE.md, @imports, and rules — the context files and path-scoped rules pi does not load natively.
- Settings
envand flags — env blocks from every settings scope, exported with Claude's precedence, plus Claude's--settingsand--setting-sourcesflags. - Output styles — replace semantics, bundled built-ins,
/output-style. - Persistent memory — a per-repository store with a session-injected index.
- Statusline — your Claude
statusLinecommand with the documented stdin JSON. - WebSearch / WebFetch — key-free search and SSRF-guarded fetch.
- Claude plugins — installed marketplace plugins: commands, agents, hooks, MCP servers, styles, skills.
- Goal:
/goal <condition>keeps the session working until a separate model check confirms the condition holds, with status, clear, block cap, background-work deferral, and resume. - Session extras — project trust, plan mode, todos, checkpoints/rewind, AskUserQuestion, notifications, think keywords, session titles,
/context,/init.
Slash commands: /init, /context, /goal, /memory, /todos, /rewind, /tasks, /agents, /plan, /plan-todos, /mcp, /hooks, and /output-style, alongside your own /dir:name commands, /skill:name skills, /plugin:name plugin commands, and each connected server's /mcp__server__prompt prompts. Where a name matches a Claude command, these differ: /init creates AGENTS.md where Claude creates CLAUDE.md; /memory edit opens a memory file in your editor (pi's externalEditor setting, VISUAL or EDITOR); /tasks lists background subagent runs only, not background shells. /todos and /plan-todos have no Claude counterpart.
pi has no general permission system, so most of what Claude routes through a permission prompt maps to hard behavior here: allowed-tools restricts the turn's tool set instead of pre-approving calls, and a hook that times out on PreToolUse or UserPromptSubmit fails closed. A hook's permissionDecision: "ask" is the exception: it shows a confirm dialog and lets the call through when you approve (a headless run has no dialog, so it blocks). An argument-scoped grant in an agent's tools: gives the agent the whole tool, as in Claude, where the scope does not limit the agent either. Claude still runs each call through its permission flow; pi has no such flow, so the call runs.
Trust is the other place pi-code is deliberately stricter. Claude states that "a claude -p run never shows the trust dialog" and loads the project's hooks, MCP servers, agents, commands, skills and rules anyway. pi-code refuses instead: with no stored decision and no UI to ask, a headless run in a project you have not already trusted loads none of them. A repository would otherwise get to run its own hooks and MCP servers in any CI job that checks it out, with nobody present to decline.
CLAUDE.md itself needs no extension: pi loads CLAUDE.md / AGENTS.md context files natively (global + walking cwd to root). context-imports.ts adds what pi's loader lacks, the @import resolution and Claude's other memory locations, without re-injecting the base (see docs/claude-md.md). Setting CLAUDE_CONFIG_DIR relocates the entire home config scope (settings, commands, agents, skills, plugins, output styles, memory, and the user CLAUDE.md); a project's own .claude/ is a separate scope and is unaffected.
extensions/internal/ holds the shared modules pi's loader must not treat as extensions (each file's header says what it owns); only internal/ keeps them out of pi's extension scan.
Vendored bases (question, notify, status-line) come from pi's MIT example extensions (see LICENSE).
Development
npm install
npm run check # biome + strict tsc + knip + vitest with coverage floors, the whole gate
scripts/e2e-smoke.sh # headless deterministic smoke: wire payload against a dead-port model, no real model (also runs in CI)
scripts/e2e.sh # quick smoke of the real pi TUI via tmux (needs a working model)
scripts/e2e-full.sh # every README feature end to end, model turns included (5-15 min)
scripts/record-demos.sh # re-records demos/*.tape with vhs at low thinking
Extensions live in extensions/, tests in tests/. Install a local checkout with pi install ./pi-code, then /reload after edits. Development needs Node >=22.19.
Contributing
Issues and pull requests are welcome. See CONTRIBUTING.md for setup, the test and review conventions, and the release process, and the Code of Conduct for community expectations. Report security issues privately as described in SECURITY.md. Release notes are on the Releases page.
License
MIT.
pi-code MCP questions
How do I add pi-code MCP to Claude Code?
Run claude mcp add pi-code -- npx -y pi-code in your terminal. Add --scope user to make it available in every project.
How do I add pi-code MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What features does pi-code add to the pi agent?
It adds a todo overlay, checkpoints, memory, web search, subagents, and goals to the pi coding agent.
How does pi-code handle security and untrusted repositories?
Project resources like MCP servers and hooks are treated as untrusted and only load after user approval. In headless runs, undecided projects load nothing.
Can I use my existing Claude configuration with pi-code?
Yes, pi-code reads your existing .claude config including rules, commands, skills, hooks, output styles, MCP servers, and agents.