@piotr-oles/pi-fence
Pi Agent extension: block or warn on fence/divider comments in written code
Package details
Install @piotr-oles/pi-fence from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@piotr-oles/pi-fence- Package
@piotr-oles/pi-fence- Version
0.1.0- Published
- Jun 2, 2026
- Downloads
- not available
- Author
- piotr-oles
- License
- unknown
- Types
- extension
- Size
- 9.5 MB
- Dependencies
- 1 dependency · 2 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
],
"image": "https://raw.githubusercontent.com/piotr-oles/pi-extensions/main/packages/pi-fence/media/screenshot.jpeg"
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
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 caught
Supported 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-fence
Modes
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 variable
How 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 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
