A Meridian plugin that strips pi-coding-agent's identifying fingerprints from the system prompt before it reaches Claude.
Pi's built-in default prompt opens with "You are an expert coding assistant operating inside pi, a coding agent harness..." and includes a multi-line "Pi documentation" block that references pi's SDK, extensions, themes, etc.
When Meridian routes pi → Claude Max with codeSystemPrompt: true, those pi-identity sections are:
- Redundant — Claude Code's preset already owns identity, tone, safety, and general tool-use guidance.
- A detection fingerprint — they give Anthropic's detection a clear "this isn't Claude Code" signal that can trigger Extra-Usage billing or rate-limit flags.
This plugin surgically removes those two blocks and replaces the identity paragraph with a neutral, generic coding-assistant framing. Everything else in pi's prompt (tools list, guidelines, date, cwd, any user- or harness-appended content, subagent-specific prompt body, project context, skills block) is preserved verbatim.
The scrub is idempotent — running it twice on the same string is a no-op.
git clone https://github.com/rynfar/meridian-plugin-pi-scrub.git ~/repos/meridian-plugin-pi-scrub
cd ~/repos/meridian-plugin-pi-scrub
npm install
npm run buildThen point Meridian's plugin config at the built file:
mkdir -p ~/.config/meridian
cat > ~/.config/meridian/plugins.json <<'JSON'
{
"plugins": [
{ "path": "/Users/YOU/repos/meridian-plugin-pi-scrub/dist/index.js", "enabled": true }
]
}
JSONRestart Meridian (or curl -X POST http://localhost:3456/plugins/reload).
Verify at http://localhost:3456/plugins — you should see pi-scrub listed as active.
If you prefer auto-discovery, symlink or copy dist/index.js into ~/.config/meridian/plugins/:
ln -s ~/repos/meridian-plugin-pi-scrub/dist/index.js ~/.config/meridian/plugins/pi-scrub.js| Input | Output |
|---|---|
| No system prompt | unchanged |
| System prompt without pi identity markers or a duplicate environment preamble | unchanged (idempotent) |
| Pi's default system prompt | identity line swapped for generic, Pi docs block removed, spacing normalized |
| Pi prompt + harness/user additions | pi identity stripped, all additions preserved |
The plugin runs on every adapter and checks prompt content. Prompts without a targeted block remain byte-for-byte unchanged, including their blank lines and trailing whitespace.
npm install
npm run buildThe built plugin is a single ES module at dist/index.js with dist/index.d.ts for types.
MIT
Pi's sectioned prompts are supported: a <docs> block beginning with the Pi
documentation header is removed as a whole, including internal blank lines and
both tags. Other documentation blocks and later project instructions remain.
For a manual real-client regression gate, see
the retained Pi 0.87.1 evidence and
scripts/e2e-pi-sectioned-docs.mjs.