Code quality
Build Your Own AI Employee. The complete starter kit for OpenClaw + Hermes Agent. 155 deduplicated skills, drag-and-drop workspace, case studies, install scripts.
npx -y skills add S3YED/appie-kit --skill code-qualityAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Code quality and verification: codebase metrics, post-implementation cleanup, and pre-commit verification pipeline.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.0 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it
Code Quality & Verification
Three complementary tools for ensuring code quality at different stages of development:
| Mode | When | Tool | What it does |
|---|---|---|---|
| Codebase Metrics | Explore/adopt a repo | pygount | Analyze LOC, language breakdown, code-vs-comment ratios |
| Simplify Code | After implementing changes | 3 parallel subagents | Clean up recent changes for reuse, quality, efficiency |
| Pre-Commit Verification | Before git commit | Automated pipeline | Security scan, quality gates, independent reviewer, auto-fix |
Section 1: Codebase Metrics (pygount)
Analyze repositories for lines of code, language breakdown, file counts, and code-vs-comment ratios.
When to Use
- User asks for LOC (lines of code) count
- User wants a language breakdown of a repo
- User asks about codebase size or composition
- General "how big is this repo" questions
Prerequisites
pip install --break-system-packages pygount 2>/dev/null || pip install pygount
Basic Summary
cd /path/to/repo
pygount --format=summary \
--folders-to-skip=".git,node_modules,venv,.venv,__pycache__,.cache,dist,build,.next,.tox,.eggs,*.egg-info" \
.
IMPORTANT: Always use --folders-to-skip to exclude dependency/build directories, otherwise pygount will crawl them and hang.
Common Folder Exclusions
# Python projects
--folders-to-skip=".git,venv,.venv,__pycache__,.cache,dist,build,.tox,.eggs,.mypy_cache"
# JavaScript/TypeScript projects
--folders-to-skip=".git,node_modules,dist,build,.next,.cache,.turbo,coverage"
Filter by Language
# Only count Python files
pygount --suffix=py --format=summary .
# Only count Python and YAML
pygount --suffix=py,yaml,yml --format=summary .
Output Formats
pygount --format=summary . # Summary table
pygount --format=json . # JSON for programmatic use
Interpreting Results
The summary table columns: Language, Files, Code (executable lines), Comment (documentation lines), % (percentage of total).
Special pseudo-languages: __empty__ (empty files), __binary__ (binary), __generated__ (auto-generated), __duplicate__ (identical content), __unknown__ (unrecognized types).
Pitfalls
- Always exclude .git, node_modules, venv — without
--folders-to-skip, pygount crawls everything and may hang - Markdown shows 0 code lines — pygount classifies all Markdown as comments, not code (expected)
- JSON files show low code counts — use
wc -lfor accurate JSON line counts - Large monorepos — use
--suffixto target specific languages rather than scanning everything
Section 2: Simplify Code — Parallel Review & Cleanup
Review recent code changes with three focused reviewers running in parallel, aggregate findings, and apply fixes.
Core principle: Three narrow reviewers beat one broad reviewer. Each deeply searches the codebase for a single class of problem.
When to Use
- "simplify" / "simplify my changes" / "review my code"
- "/simplify" (Claude Code habit)
Optional modifiers: Focus (reuse/quality/efficiency), Dry run (report only), Scope (last commit / staged / specific file)
Phase 1 — Identify Changes
# Default: uncommitted working-tree changes
git diff
# If empty, include staged
git diff HEAD
# Scoped variants:
git diff --staged # staged changes
git diff HEAD~1 # last commit
git diff main...HEAD # this branch/PR
git diff -- src/foo.py # specific file
Phase 2 — Launch Three Reviewers
Use delegate_task batch mode — pass all three tasks in one tasks array:
Reviewer 1 — Code Reuse: Search for code that duplicates existing functionality. Check utility modules, shared helpers, adjacent files for existing functions to reuse.
Reviewer 2 — Code Quality: Look for redundant state, parameter sprawl, copy-paste-with-variation, leaky abstractions, stringly-typed code.
Reviewer 3 — Efficiency: Look for unnecessary work, missed concurrency, hot-path bloat, TOCTOU anti-patterns, memory issues, overly broad reads.
Each gets the complete diff plus repo path and toolsets [terminal, file, search].
Phase 3 — Aggregate and Apply
- Merge findings, dedup overlaps
- Discard false positives
- Resolve conflicts: correctness > user's focus > readability > micro-perf
- Apply fixes with
patch/write_file(or dry run) - Verify: run targeted tests + linter
- Summarize what changed and what was skipped
Pitfalls
- Don't fan out wider than ~3 reviewers
- Give the WHOLE diff to each reviewer
- Require
file:lineevidence from reviewers - Keep edits scoped to what the diff touched
- Check AGENTS.md / CLAUDE.md for project conventions
Section 3: Pre-Commit 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 commitorgit 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
Skip for: documentation-only changes, pure config tweaks, or explicit "skip verification".
Step 1 — Get the Diff
git diff --cached
If empty, try git diff then git diff HEAD~1 HEAD. If diff exceeds 15K chars, split by file.
Step 2 — Static Security Scan
Scan added lines for hardcoded secrets, shell injection, dangerous eval/exec, unsafe deserialization, SQL injection:
git diff --cached | grep "^+" | grep -iE "(api_key|secret|password|token|passwd)\s*=\s*['\"][^'\"]{6,}['\"]"
git diff --cached | grep "^+" | grep -E "os\.system\(|subprocess.*shell=True"
git diff --cached | grep "^+" | grep -E "\beval\(|\bexec\("
git diff --cached | grep "^+" | grep -E "pickle\.loads?\("
git diff --cached | grep "^+" | grep -E "execute\(f\"|\.format\(.*SELECT|\.format\(.*INSERT"
Step 3 — Baseline Tests and Linting
Detect the project language and run appropriate tools. Capture baseline BEFORE changes (stash changes, run, pop). Only NEW failures block commit.
Test frameworks (auto-detect):
python -m pytest --tb=no -q 2>&1 | tail -5
npm test -- --passWithNoTests 2>&1 | tail -5
cargo test 2>&1 | tail -5
go test ./... 2>&1 | tail -5
Linting (run only if installed):
which ruff && ruff check . 2>&1 | tail -10
which npx && npx eslint . 2>&1 | tail -10
cargo clippy -- -D warnings 2>&1 | tail -10
Step 4 — Self-Review Checklist
- 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
- No debug print/console.log left behind
- No commented-out code
- New code has tests (if test suite exists)
Step 5 — Independent Reviewer Subagent
Call delegate_task with the diff and static scan results. The reviewer gets ONLY the diff. Fail-closed: returns JSON verdict with passed boolean, security_concerns, logic_errors, suggestions.
delegate_task(
goal="""Review this diff. Return ONLY JSON:
{"passed": true/false, "security_concerns": [], "logic_errors": [], "suggestions": [], "summary": "..."}
FAIL-CLOSED: security_concerns non-empty → passed=false; logic_errors non-empty → passed=false.
Cannot parse diff → passed=false.""",
context="Independent code review. Return only JSON verdict.",
toolsets=["terminal"]
)
Step 6 — Evaluate Results
All passed: Proceed to commit. Any failures: Report what failed, then proceed to auto-fix.
Step 7 — Auto-Fix Loop
Maximum 2 fix-and-reverify cycles. Spawn a fix agent that fixes ONLY the reported issues:
delegate_task(
goal="Fix ONLY the reported issues. Do not refactor, rename, or add features.",
context="Fix only reported issues.",
toolsets=["terminal", "file"]
)
After fix agent completes, re-run Steps 1-6. Passed → commit. Failed after 2 attempts → escalate to user.
Step 8 — Commit
git add -A && git commit -m "[verified] <description>"
Common Pattern Reference
# BAD: SQL injection
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# GOOD: parameterized
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
# BAD: shell injection
os.system(f"ls {user_input}")
# GOOD: safe subprocess
subprocess.run(["ls", user_input], check=True)
# BAD: XSS (JS)
element.innerHTML = userInput;
# GOOD: safe
element.textContent = userInput;
Pitfalls
- Empty diff — check
git status, tell user nothing to verify - Large diff (>15K chars) — split by file, review each separately
- delegate_task returns non-JSON — retry once, then treat as FAIL
- No test framework — skip regression check, reviewer verdict still runs
- Lint tools not installed — skip silently
- Auto-fix introduces new issues — counts as new failure, cycle continues
When to Use Each Section
| Situation | Use |
|---|---|
| "How big is this repo?" / language breakdown | Codebase Metrics (pygount) |
| "Simplify my changes" / "Review my recent code" | Simplify Code (3-agent cleanup) |
| Before committing / "Verify before push" | Pre-Commit Verification pipeline |
| Full quality workflow | Run Simplify Code first, then Pre-Commit Verification |
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.