@piotr-oles/pi-fence
v0.1.0
Published
Pi Agent extension: block or warn on fence/divider comments in written code
Readme
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:
// ---- helpers ---- ← caught
// ===== Auth Module ===== ← caught
# ################ ← caught
/* ~~~ utilities ~~~ */ ← caught
// ──────────────── ← caught (Unicode box-drawing)
// TODO: fix this ← NOT caught
// Copyright (c) 2024 ← NOT caughtSupported languages
| Extension(s) | Language |
|---|---|
| .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-fenceModes
Control via the --pi-fence-mode CLI flag (takes precedence) or the PI_FENCE_MODE environment variable:
pi --pi-fence-mode warn # default: write proceeds, warning shown to model
pi --pi-fence-mode block # write is blocked; model must remove fences and retry
pi --pi-fence-mode remove # fence comments are stripped silently before writing
PI_FENCE_MODE=block pi # same, via env variableHow it works
- Injects a short system-prompt instruction telling the model not to add fence comments.
- On every
writeandedittool 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 checkTo 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