verify-quality

Installation
SKILL.md

Code Quality Verification

Purpose

Verify code for quality anti-patterns including poor naming, missing documentation, magic values, and organizational issues. All analysis happens locally.

When to Use

Trigger this skill when the user asks to:

  • "verify agent quality"
  • "verify quality"
  • "check code quality"
  • "review code organization"
  • "check naming conventions"

Note: For full verification including security, patterns, and language-specific checks, tell the user to say "verify agent".

Process

Step 1: Discover Files

Locate files to analyze:

Source files:

  • *.py, *.ts, *.js, *.go, *.rs - Source code
  • Focus on main implementation files, not tests

Directories to check:

  • src/, lib/, app/, project root
  • agent/, tools/, utils/

Exclude:

  • node_modules/, .venv/, venv/, __pycache__/
  • Test files (*.test.*, *.spec.*, *_test.go)
  • Generated files, migrations

Step 2: Run Quality Checks

All checks in this skill are [HEURISTIC] — they require judgment. Tag findings with [H].


2.1 [HEURISTIC] Naming Conventions

Check for:

Issue Examples
Single-letter variables (except loops) x = get_data(), d = {}
Unclear abbreviations proc_usr_req(), calc_val()
Inconsistent casing Mixing camelCase and snake_case in same file
Names that don't describe purpose data, temp, result, info
Boolean names without is/has/can enabled = check() vs is_enabled = check()

Good naming:

# ✅ Clear, descriptive
user_profile = get_user_profile(user_id)
is_authenticated = check_authentication(token)
max_retry_attempts = 3

# ⚠️ Unclear
x = get_up(uid)
auth = check(t)
n = 3

Severity: ⚠️ Warning


2.2 [HEURISTIC] Code Organization

Check for:

Issue Description
Large files > 500 lines for a single module
Large functions > 50 lines for a single function
Deep nesting > 4 levels of indentation
Mixed concerns Business logic mixed with I/O in same function
God objects Classes with > 10 public methods or > 20 attributes

Example issues:

# ⚠️ Warning - Deep nesting
def process(data):
    if condition1:
        if condition2:
            for item in items:
                if condition3:
                    if condition4:  # Too deep
                        ...

# ⚠️ Warning - Mixed concerns
def save_user(user):
    # Validation
    if not user.email:
        raise ValueError("...")
    # Business logic
    user.created_at = datetime.now()
    # Database I/O
    db.session.add(user)
    db.session.commit()
    # Email sending
    send_welcome_email(user)  # Multiple concerns

Severity: ⚠️ Warning


2.3 [HEURISTIC] Magic Numbers and Strings

Check for:

  • Numeric literals in code without constants
  • String literals repeated multiple times
  • Configuration values hardcoded in logic

Examples:

# ⚠️ Warning - Magic numbers
if retry_count > 3:  # What does 3 mean?
    ...
time.sleep(60)  # Why 60?

# ⚠️ Warning - Repeated strings
if status == "pending":
    ...
elif status == "pending":  # Typo risk
    ...

# ✅ Good - Named constants
MAX_RETRIES = 3
RETRY_DELAY_SECONDS = 60
STATUS_PENDING = "pending"

if retry_count > MAX_RETRIES:
    ...
time.sleep(RETRY_DELAY_SECONDS)

Severity: ⚠️ Warning


2.4 [HEURISTIC] Documentation

Check for:

Missing Where expected
Module docstring Top of .py files
Class docstring After class definition
Function docstring After def for public functions
README Project root
Type hints Public function parameters/returns

Examples:

# ⚠️ Warning - Missing docstrings
def calculate_score(user, items, weights):
    total = 0
    for item, weight in zip(items, weights):
        total += item.value * weight
    return total

# ✅ Good - Documented
def calculate_score(user: User, items: list[Item], weights: list[float]) -> float:
    """
    Calculate weighted score for a user's items.
    
    Args:
        user: The user to calculate score for
        items: List of items to score
        weights: Weight multipliers for each item
        
    Returns:
        Total weighted score
    """
    ...

Severity: ⚠️ Warning


2.5 [HEURISTIC] Error Handling

Check for:

Issue Description
Bare except except: without specific exception
Silent failures except: pass
Generic exceptions raised raise Exception("...")
No error handling Functions that can fail but don't handle errors

Examples:

# ⚠️ Warning - Bare except
try:
    process_data()
except:
    pass

# ⚠️ Warning - Generic exception
raise Exception("Something went wrong")

# ✅ Good - Specific handling
try:
    process_data()
except ValueError as e:
    logger.warning(f"Invalid data: {e}")
    return default_value
except ConnectionError as e:
    logger.error(f"Connection failed: {e}")
    raise ServiceUnavailableError from e

Severity: ⚠️ Warning


2.6 [HEURISTIC] Code Duplication

Check for:

  • Identical or near-identical code blocks (> 5 lines)
  • Copy-pasted functions with minor variations
  • Repeated patterns that could be abstracted

Example:

# ⚠️ Warning - Duplication
def get_user_by_id(user_id):
    response = requests.get(f"{BASE_URL}/users/{user_id}")
    if response.status_code == 200:
        return response.json()
    return None

def get_order_by_id(order_id):
    response = requests.get(f"{BASE_URL}/orders/{order_id}")
    if response.status_code == 200:
        return response.json()
    return None

# ✅ Good - Abstracted
def get_resource(resource_type: str, resource_id: str):
    response = requests.get(f"{BASE_URL}/{resource_type}/{resource_id}")
    if response.status_code == 200:
        return response.json()
    return None

Severity: ⚠️ Warning


2.7 [HEURISTIC] Commented-Out Code

Check for:

  • Large blocks of commented-out code (> 5 lines)
  • TODO comments that are stale (months old if dates present)
  • FIXME comments indicating known issues

Examples:

# ⚠️ Warning - Commented code should be removed
# def old_implementation():
#     for item in items:
#         process_item(item)
#     return results

# ⚠️ Warning - Stale TODO
# TODO: Fix this before launch (added 2024-01-15)

# ✅ Acceptable - Brief explanatory comment
# Note: Using legacy API format for backwards compatibility

Severity: ⚠️ Warning


Step 3: Generate Report

# Code Quality Verification Report

**Project:** [name or path]
**Date:** [current date]
**Files analyzed:** [count]

## Summary

✅ X checks passed | ⚠️ Y warnings | ❌ Z issues

## Naming

- [x] Naming conventions consistent
- [ ] ⚠️ Unclear names at `[file:line]`

## Organization

- [x] Code well-organized
- [ ] ⚠️ Large function at `[file:line]` ([X] lines)

## Documentation

- [x] Key functions documented
- [ ] ⚠️ Missing docstring at `[file:line]`

## Error Handling

- [x] Errors properly handled
- [ ] ⚠️ Bare except at `[file:line]`

## Findings

> `[H]` = heuristic (all quality checks require judgment)

### ✅ Passing
- `[H]` Consistent naming conventions throughout
- `[H]` Functions are well-scoped and focused

### ⚠️ Warnings
- `[H]` [Check]: [description]
  - **Location:** [file:line]
  - **Impact:** [why this matters]
  - **Suggestion:** [how to improve]

## Recommendations

1. [Priority recommendation]
2. [Additional improvements]

For full verification including security, patterns, and language-specific checks, say "verify agent".

Related skills
Installs
6
GitHub Stars
33
First Seen
11 days ago