Install
openclaw skills install @tenequm/code-polishPre-release code review - runs lint/type checks, launches parallel review agents (cleanliness, design, efficiency, side-effect gating) on the diff, validates findings, and fixes with approval. Use before committing, pushing, or releasing changes.
openclaw skills install @tenequm/code-polishRepository state:
git rev-parse --abbrev-ref HEAD
git status --short
git diff --stat 2>/dev/null | tail -1
Base ref argument (optional): $ARGUMENTS
logger.info, logger.error) from debug leftovers (console.log, console.debug)Run the project's lint + type-check command. Check CLAUDE.md for the correct validation command (commonly pnpm check, just check, cargo clippy, uv run ruff check, etc.).
If checks fail:
If no validation command is found in CLAUDE.md, ask the user what to run.
Determine what changed:
git diff + git diff --cached??) files in git status --short. Include new untracked source files in the review. A staged change that references an untracked file (a new module, benchmark target, or test) is itself a finding: if the change lands without the file, fresh checkouts and CI break on the missing referencegit diff <base-ref>...HEADgit diff main...HEAD. If the work under review was already committed this session, scope the review to those session commits rather than the whole branchExclude lockfiles and generated files from the review (Cargo.lock, pnpm-lock.yaml, package-lock.json, *.snap, generated bindings) - they are outputs, not authored code.
Read every changed file fully. Understand what each change does and why.
When a change relocates or rewrites an existing code path (a moved file, a handler split into middleware, a renamed/replaced function), open the prior version - the file it moved from, or git show <ref>:<path> for a deleted/renamed file - and compare behavior, not just lines. Note any dropped validation, reordered side-effects, or removed guards; pass those to the agents.
Write the diff to a scratchpad file. Use the Agent tool to launch all four agents concurrently in a single message. Pass each agent the diff file path and the list of changed files so it has the complete context - do not inline a large diff into four prompts.
Enrich each agent's prompt with:
console.log in a test-skip path matching project convention) so agents don't return known false positivesSmall-diff fast path: if the diff is tiny (roughly under 50 changed lines), skip the agent fan-out and review all four lenses below directly yourself, reading every changed line in full. All later phases still apply.
Fast, mechanical, high-confidence. Looks for junk that should be removed.
console.log, console.debug, console.warn added during development; temporary debug variables, hardcoded test values. NOT structured logger calls (logger.info, logger.error, c.var.logger)TODO/FIXME/HACK markers left by Claude (not by the user); unnecessary type annotations where the language infers correctly; emoji in code or comments (unless the project uses them)rg -n '[\x{2010}-\x{2015}\x{2018}-\x{201F}]'0, 1, true, HTTP status codesRequires codebase exploration beyond the diff. Looks for structural and design issues.
Looks for runtime performance and resource issues.
r.ok), unhandled promise rejections on external calls, missing error handling at I/O boundariesClosed-scope correctness check. Finds costly or irreversible side-effects that run before the checks meant to gate them. Does NOT judge whether business logic is correct - that is /review's job.
next() is the prime suspect; the validation that should gate it often lives in the downstream handler/review: whether the business logic is correct, pricing math, algorithmic correctness, anything without a crisp invariantEvery finding must cite the side-effect line, the gate it precedes (or "ungated"), and the control-flow path. No finding without two line references.
Before presenting anything, verify every finding from the agents against actual code. Drop any finding that fails validation.
For each finding:
logger.*, c.var.logger.*)Only findings that survive validation proceed to the report.
Synthesize validated findings into a single deduplicated report. If multiple agents flagged the same code, merge into one finding. Group by category:
## Review Findings
### Correctness (N issues)
1. `path/to/file.ts:55` - chargeUser() runs before body validation (handler validates at :78, after next()); a malformed request is charged then 400s
2. ...
### Cleanliness (N issues)
1. `path/to/file.ts:42` - console.log("debug response")
2. ...
### Design (N issues)
1. `path/to/file.ts:15-18` - hand-rolled path join, use existing `resolveAssetPath` from shared/utils
2. ...
### Efficiency (N issues)
1. `path/to/file.ts:30-45` - sequential awaits on independent API calls, use Promise.all
2. ...
### Observations (non-blocking)
1. `path/to/file.ts:88` - flock fallback catches all lock errors, not just unsupported-filesystem ones - a behavior note, not a defect; your call
### Dropped after validation
1. `path/to/view.py:12` - per-mousemove getBoundingClientRect - the element is CSS-fixed, so the rect is cached and there is no layout flush
**Total: X issues across Y categories**
**Recommendation:** fix correctness #1, cleanliness #1-2, efficiency #1; skip design #2 (marginal).
**Awaiting approval before proceeding with fixes.**
List Correctness first, and always - including at (0 issues), since a zero there is a real signal that side-effect ordering was checked. A correctness zero must state what was traced - which side-effects were inventoried and which gates cover them - not just the count. It must never be batch-approved alongside cosmetic items.
Observations are validated behavior notes that aren't defects - the user's call, never blocking. Dropped after validation lists agent findings Phase 4 dismissed, with the reason - it substantiates the counts. Omit either section when empty.
End the report with a per-finding Recommendation line: which findings you'd fix and which you'd skip, so the user can approve by reference.
If zero issues found, report "Clean - no issues found", substantiate the correctness zero (what was traced and why it's clean), and offer next actions - e.g. commit as-is, or leave for the user's own review - then stop.
The report MUST end with the line "Awaiting approval before proceeding with fixes." (or the clean-case report above). Do not proceed to Phase 6 until the user explicitly approves.
After user approves: