Skip to main content
Pre-commit review: security scan, quality gates, auto-fix.

Skill metadata

Reference: full SKILL.md

The following is the complete skill definition that Mibyan loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.

Pre-Commit Code Verification

Automated verification pipeline before code lands. Static scans, baseline-aware quality gates, an independent reviewer subagent, and an auto-fix loop. Core principle: No agent should verify its own work. Fresh context finds what you miss.

When to Use

  • After implementing a feature or bug fix, before git commit or git push
  • When user says “commit”, “push”, “ship”, “done”, “verify”, or “review before merge”
  • After completing a task with 2+ file edits in a git repo
  • After each task in subagent-driven-development (the two-stage review)
Skip for: documentation-only changes, pure config tweaks, or when user says “skip verification”. This skill vs github: This skill verifies YOUR changes before committing. github reviews OTHER people’s PRs on GitHub with inline comments.

Step 1 — Get the diff

If empty, try git diff then git diff HEAD~1 HEAD. If git diff --cached is empty but git diff shows changes, tell the user to git add <files> first. If still empty, run git status — nothing to verify. If the diff exceeds 15,000 characters, split by file:

Step 2 — Static security scan

Scan added lines only. Any match is a security concern fed into Step 5.

Step 3 — Baseline tests and linting

Detect the project language and run the appropriate tools. Capture the failure count BEFORE your changes as baseline_failures (stash changes, run, pop). Only NEW failures introduced by your changes block the commit. Test frameworks (auto-detect by project files):
Linting and type checking (run only if installed):
Baseline comparison: If baseline was clean and your changes introduce failures, that’s a regression. If baseline already had failures, only count NEW ones.

Step 4 — Self-review checklist

Quick scan before dispatching the reviewer:
  • No hardcoded secrets, API keys, or credentials
  • Input validation on user-provided data
  • SQL queries use parameterized statements
  • File operations validate paths (no traversal)
  • External calls have error handling (try/catch)
  • No debug print/console.log left behind
  • No commented-out code
  • New code has tests (if test suite exists)

Step 5 — Independent reviewer subagent

Interactive sessions only. In a one-shot run (mibyan chat -q, --oneshot, a benchmark harness) there is no one to hand the verdict to and a fresh subagent re-pays the whole system prompt plus a repo re-read: skip Steps 5 and 7, apply the Step 4 checklist to the diff yourself, run the tests, and go to Step 8. Call delegate_task directly — it is NOT available inside execute_code or scripts. The reviewer gets ONLY the diff and static scan results. No shared context with the implementer. Fail-closed: unparseable response = fail.

Step 6 — Evaluate results

Combine results from Steps 2, 3, and 5. All passed: Proceed to Step 8 (commit). Any failures: Report what failed, then proceed to Step 7 (auto-fix).

Step 7 — Auto-fix loop

Maximum 2 fix-and-reverify cycles. Interactive sessions only (see Step 5). Spawn a THIRD agent context — not you (the implementer), not the reviewer. It fixes ONLY the reported issues:
After the fix agent completes, re-run Steps 1-6 (full verification cycle).
  • Passed: proceed to Step 8
  • Failed and attempts < 2: repeat Step 7
  • Failed after 2 attempts: escalate to user with the remaining issues and suggest git stash or git reset to undo

Step 8 — Commit

If verification passed:
The [verified] prefix indicates an independent reviewer approved this change.

Reference: Common Patterns to Flag

Python

JavaScript

Integration with Other Skills

subagent-driven-development: Run this after EACH task as the quality gate. The two-stage review (spec compliance + code quality) uses this pipeline. test-driven-development: This pipeline verifies TDD discipline was followed — tests exist, tests pass, no regressions. plan: Validates implementation matches the plan requirements.

Pitfalls

  • Empty diff — check git status, tell user nothing to verify
  • Not a git repo — skip and tell user
  • Large diff (>15k chars) — split by file, review each separately
  • delegate_task returns non-JSON — retry once with stricter prompt, then treat as FAIL
  • False positives — if reviewer flags something intentional, note it in fix prompt
  • No test framework found — skip regression check, reviewer verdict still runs
  • Lint tools not installed — skip that check silently, don’t fail
  • Auto-fix introduces new issues — counts as a new failure, cycle continues