@davehardy20/pi-quality-gates
Pi quality-gates bundle: post-turn linting, LSP diagnostics, and automated code review.
Package details
Install @davehardy20/pi-quality-gates from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@davehardy20/pi-quality-gates- Package
@davehardy20/pi-quality-gates- Version
0.1.1- Published
- May 17, 2026
- Downloads
- not available
- Author
- davehardy20
- License
- MIT
- Types
- extension
- Size
- 195.3 KB
- Dependencies
- 14 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@davehardy20/pi-quality-gates
Pi quality-gates bundle: post-turn linting, LSP diagnostics, and automated code review.
What it adds
Post-Turn Linter
- Automatically runs lint checks on files modified during each agent turn
- Supports: markdownlint, biome, ruff, cppcheck, tflint, cargo clippy
- Optional LSP diagnostics integration (typescript-language-server, pyright, etc.)
- Auto-fix follow-up turns for findings
/post-turn-linter-run— Run linter now (optionally pass file paths)/post-turn-linter-fix— Start a fix turn for the latest findings/post-turn-linter-status— Show current linter state
Post-Turn Reviewer
- After the linter reports clean, spawns a headless Pi child process to review changes
- 7-domain checklist: task completion, correctness, error handling, security, quality, testing, documentation
- Severity levels: CRITICAL (auto-fix loop), WARNING (advisory), NIT (info only)
- Re-review after fixes with configurable max passes
/reviewer-status— Show reviewer state machine/reviewer-run— Manually trigger a review/reviewer-model— Switch review model mid-session/reviewer-toggle— Enable or disable the reviewer
Workflow
Agent modifies files → turn_end fires
→ Post-turn-linter runs (mechanical checks)
→ findings → auto-fix turn → linter re-runs (loop)
→ clean → triggers post-turn-reviewer
→ PASS → done
→ CRITICAL → fix-up turn → linter → reviewer re-runs (max 1 loop)
→ WARNING → advisory message
→ max loops → escalate to user
Install
From a local checkout during development:
pi install /Users/dave/tools/pi-quality-gates
From git:
pi install git:github.com/davehardy20/pi-quality-gates
For one run only:
pi -e /Users/dave/tools/pi-quality-gates
Configuration
Linter
Create .pi/linter.config.json in your project root:
{
"cooldownMs": 15000,
"reportMode": "auto-follow-up",
"lsp": {
"enabled": false,
"settleMs": 500,
"minSeverity": "warning"
}
}
Reviewer
Create .pi/reviewer.config.json in your project root:
{
"model": null,
"enabled": true,
"minChangedLines": 5,
"maxChangedLines": 500,
"maxReReviewPasses": 1,
"autoFixThreshold": "critical",
"timeoutMs": 120000,
"respectGitignore": true,
"skipFile": ".pi/reviewer.skip",
"reviewDelayMs": 10000
}
Create .pi/reviewer.skip (gitignore format) to exclude files from review:
*.generated.ts
dist/
vendor/**
Notes
- The reviewer spawns a child Pi process with
--no-extensionsand read-only tools only. - LSP diagnostics are optional and disabled by default. Enable via linter config.
- If commands appear twice, Pi is probably loading both this package and the old local extension files. Disable or remove the old local extensions before testing.
- Both extensions share package-local copies of LSP helpers — they do not reach back into
~/.pi/agent/extensions/shared/*.
Update flow
- Update the package repo
- Push to GitHub
- Run
pi update --extensionsor reinstall the package - Run
/reload
/reload alone does not fetch newer package commits.
Troubleshooting
- Run
/post-turn-linter-statusto check linter state - Run
/reviewer-statusto check reviewer state - Check
~/.pi/lsp-config.yamlfor LSP server configuration
Build and test
npm run typecheck
npm run test
npm run build