pi-codegraph-fix
Pi coding agent extension that wires codegraph as an MCP sidecar — with ctx.cwd fix for cross-project sessions
Package details
Install pi-codegraph-fix from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-codegraph-fix- Package
pi-codegraph-fix- Version
1.1.1- Published
- Jul 7, 2026
- Downloads
- 497/mo · 73/wk
- Author
- gdwhisper
- License
- MIT
- Types
- extension
- Size
- 17.1 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./extensions/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-codegraph-fix
The CodeGraph plugin for pi that actually works.
Features
- Switch projects freely — uses
ctx.cwdinstead ofprocess.cwd(), no more silent tool loss when you change projects - Zero zombie processes — cleanup on session shutdown, process exit, and SIGTERM/SIGHUP. No more pile-up
- Lazy start — spawns codegraph only when you first use it, doesn't slow down session launch
- Multi-project friendly — each project gets its own MCP client, switches automatically
- No misleading hints — injects CodeGraph instructions only when tools are actually ready
Quick Install
pi install npm:pi-codegraph-fix
You also need CodeGraph CLI (npm install -g @colbymchenry/codegraph) and your project indexed (codegraph init).
The Problems
1. CodeGraph goes silent when you switch projects
You pi session=<other-project> or launch pi from ~ instead of your project root. Suddenly codegraph tools disappear. No error, just nothing.
Why: The original plugin used process.cwd() to find .codegraph/codegraph.db. That always points to wherever pi was first launched — not your current session's project. Wrong project → no DB → no tools → silent failure.
2. Zombie process pile-up
Every time you close pi, the codegraph serve --mcp subprocess doesn't die. After a few sessions you have a dozen of them fighting over the same socket — causing "server disconnected" errors on every codegraph call.
Real case: 12 zombie processes accumulated over 9 hours across 6 sessions. Every codegraph call spun the roulette wheel on which zombie had the socket lock.
The Fix
Two changes from the originals (codegraph-pi, pi-codegraph):
ctx.cwd instead of process.cwd() — reads the current session's working directory from pi, so it works no matter where or how you launched pi.
Three-path cleanup — kills the MCP subprocess on normal exit, crash, or terminal close:
| Path | When |
|---|---|
session_shutdown |
pi exits normally |
process.once("exit") |
Node process ends |
SIGTERM / SIGHUP |
Terminal close, kill |
No more zombies. No more "server disconnected".
Features
| Feature | Source |
|---|---|
ctx.cwd instead of process.cwd() |
pi-codegraph-fix |
spawn with explicit cwd |
pi-codegraph-fix |
| Multi-project MCP clients (one per CWD) | SeanPedersen/pi-codegraph |
Dynamic tool discovery via MCP tools/list |
SeanPedersen/pi-codegraph |
| Process cleanup hooks (exit, SIGTERM, SIGHUP) | SeanPedersen/pi-codegraph |
| Self-contained single file | SeanPedersen/pi-codegraph |
before_agent_start system prompt injection |
colbymchenry/codegraph-pi |
.codegraph/codegraph.db exact check |
colbymchenry/codegraph-pi |
How It Works
- On
session_start, check ifctx.cwd/.codegraph/codegraph.dbexists (instant file check) - On first codegraph tool call, spawn
codegraph serve --mcpin background (lazy, doesn't block session) - Discover available tools via MCP
tools/listprotocol - Register all tools with
pi.registerTool() - Inject usage instructions into system prompt via
before_agent_startafter tools are ready - On
session_shutdownor process exit, clean up all MCP clients
Credits
- colbymchenry/codegraph-pi — original pi extension
- SeanPedersen/pi-codegraph — multi-client architecture