pi-fence
A pi coding agent extension that detects decorative fence/divider comments in code written by the model and warns, blocks, or removes them automatically.
What it catches
Comments whose inner text (after stripping //, #, /* */ markers) contains a sequence of 3 or more separator characters:
# ################ ← caught
← caught
Supported languages
.ts, .tsx, .cts, .mts | TypeScript |
.js, .jsx, .mjs, .cjs | JavaScript |
.py | Python |
.go | Go |
.rs | Rust |
.rb | Ruby |
.java | Java |
.sh, .bash | Shell / Bash |
.c, .h | C |
.css | CSS |
Files with other extensions are passed through without inspection.
Install
pi install npm:@piotr-oles/pi-fence
Modes
Control via the --pi-fence-mode CLI flag (takes precedence) or the PI_FENCE_MODE environment variable:
pi --pi-fence-mode warn
pi --pi-fence-mode block
pi --pi-fence-mode remove
pi --pi-fence-mode delete
PI_FENCE_MODE=block pi
How it works
- Injects a short system-prompt instruction telling the model not to add fence comments.
- On every
write and edit tool call, parses the new content with tree-sitter to extract comment nodes.
- Compares against the existing file — only newly introduced fences trigger (a fence at the same line as in the old file is not re-reported).
- Acts according to the configured mode.
System-Prompt
Do not insert decorative fence comments like // ---- section ----.
Code-smell, if needed, extract to function or file instead.
Development
pnpm install
pnpm test
pnpm typecheck
pnpm check
To test changes manually, pass the source entry point directly to pi with the -e flag:
pi -ne -e src/index.ts
pi -ne -e src/index.ts --pi-fence-mode block
pi -ne -e src/index.ts --pi-fence-mode remove