{"id":"8e9699c8-62cc-44bd-9ae7-ae927f548d2a","shortId":"LeKWGG","kind":"skill","title":"verify-quality","tagline":"Verify code quality including naming conventions, organization, documentation, and general best practices. Use when asked to \"verify quality\", \"check code quality\", or \"review code organization\".","description":"# Code Quality Verification\n\n## Purpose\n\nVerify code for quality anti-patterns including poor naming, missing documentation, magic values, and organizational issues. All analysis happens locally.\n\n## When to Use\n\nTrigger this skill when the user asks to:\n- \"verify agent quality\"\n- \"verify quality\"\n- \"check code quality\"\n- \"review code organization\"\n- \"check naming conventions\"\n\n> **Note:** For full verification including security, patterns, and language-specific checks, tell the user to say **\"verify agent\"**.\n\n## Process\n\n### Step 1: Discover Files\n\nLocate files to analyze:\n\n**Source files:**\n- `*.py`, `*.ts`, `*.js`, `*.go`, `*.rs` - Source code\n- Focus on main implementation files, not tests\n\n**Directories to check:**\n- `src/`, `lib/`, `app/`, project root\n- `agent/`, `tools/`, `utils/`\n\n**Exclude:**\n- `node_modules/`, `.venv/`, `venv/`, `__pycache__/`\n- Test files (`*.test.*`, `*.spec.*`, `*_test.go`)\n- Generated files, migrations\n\n### Step 2: Run Quality Checks\n\nAll checks in this skill are **`[HEURISTIC]`** — they require judgment. Tag findings with `[H]`.\n\n---\n\n#### 2.1 `[HEURISTIC]` Naming Conventions\n\n**Check for:**\n\n| Issue | Examples |\n|-------|----------|\n| Single-letter variables (except loops) | `x = get_data()`, `d = {}` |\n| Unclear abbreviations | `proc_usr_req()`, `calc_val()` |\n| Inconsistent casing | Mixing `camelCase` and `snake_case` in same file |\n| Names that don't describe purpose | `data`, `temp`, `result`, `info` |\n| Boolean names without is/has/can | `enabled = check()` vs `is_enabled = check()` |\n\n**Good naming:**\n\n```python\n# ✅ Clear, descriptive\nuser_profile = get_user_profile(user_id)\nis_authenticated = check_authentication(token)\nmax_retry_attempts = 3\n\n# ⚠️ Unclear\nx = get_up(uid)\nauth = check(t)\nn = 3\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n#### 2.2 `[HEURISTIC]` Code Organization\n\n**Check for:**\n\n| Issue | Description |\n|-------|-------------|\n| Large files | > 500 lines for a single module |\n| Large functions | > 50 lines for a single function |\n| Deep nesting | > 4 levels of indentation |\n| Mixed concerns | Business logic mixed with I/O in same function |\n| God objects | Classes with > 10 public methods or > 20 attributes |\n\n**Example issues:**\n\n```python\n# ⚠️ Warning - Deep nesting\ndef process(data):\n    if condition1:\n        if condition2:\n            for item in items:\n                if condition3:\n                    if condition4:  # Too deep\n                        ...\n\n# ⚠️ Warning - Mixed concerns\ndef save_user(user):\n    # Validation\n    if not user.email:\n        raise ValueError(\"...\")\n    # Business logic\n    user.created_at = datetime.now()\n    # Database I/O\n    db.session.add(user)\n    db.session.commit()\n    # Email sending\n    send_welcome_email(user)  # Multiple concerns\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n#### 2.3 `[HEURISTIC]` Magic Numbers and Strings\n\n**Check for:**\n- Numeric literals in code without constants\n- String literals repeated multiple times\n- Configuration values hardcoded in logic\n\n**Examples:**\n\n```python\n# ⚠️ Warning - Magic numbers\nif retry_count > 3:  # What does 3 mean?\n    ...\ntime.sleep(60)  # Why 60?\n\n# ⚠️ Warning - Repeated strings\nif status == \"pending\":\n    ...\nelif status == \"pending\":  # Typo risk\n    ...\n\n# ✅ Good - Named constants\nMAX_RETRIES = 3\nRETRY_DELAY_SECONDS = 60\nSTATUS_PENDING = \"pending\"\n\nif retry_count > MAX_RETRIES:\n    ...\ntime.sleep(RETRY_DELAY_SECONDS)\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n#### 2.4 `[HEURISTIC]` Documentation\n\n**Check for:**\n\n| Missing | Where expected |\n|---------|----------------|\n| Module docstring | Top of `.py` files |\n| Class docstring | After `class` definition |\n| Function docstring | After `def` for public functions |\n| README | Project root |\n| Type hints | Public function parameters/returns |\n\n**Examples:**\n\n```python\n# ⚠️ Warning - Missing docstrings\ndef calculate_score(user, items, weights):\n    total = 0\n    for item, weight in zip(items, weights):\n        total += item.value * weight\n    return total\n\n# ✅ Good - Documented\ndef calculate_score(user: User, items: list[Item], weights: list[float]) -> float:\n    \"\"\"\n    Calculate weighted score for a user's items.\n    \n    Args:\n        user: The user to calculate score for\n        items: List of items to score\n        weights: Weight multipliers for each item\n        \n    Returns:\n        Total weighted score\n    \"\"\"\n    ...\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n#### 2.5 `[HEURISTIC]` Error Handling\n\n**Check for:**\n\n| Issue | Description |\n|-------|-------------|\n| Bare except | `except:` without specific exception |\n| Silent failures | `except: pass` |\n| Generic exceptions raised | `raise Exception(\"...\")` |\n| No error handling | Functions that can fail but don't handle errors |\n\n**Examples:**\n\n```python\n# ⚠️ Warning - Bare except\ntry:\n    process_data()\nexcept:\n    pass\n\n# ⚠️ Warning - Generic exception\nraise Exception(\"Something went wrong\")\n\n# ✅ Good - Specific handling\ntry:\n    process_data()\nexcept ValueError as e:\n    logger.warning(f\"Invalid data: {e}\")\n    return default_value\nexcept ConnectionError as e:\n    logger.error(f\"Connection failed: {e}\")\n    raise ServiceUnavailableError from e\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n#### 2.6 `[HEURISTIC]` Code Duplication\n\n**Check for:**\n- Identical or near-identical code blocks (> 5 lines)\n- Copy-pasted functions with minor variations\n- Repeated patterns that could be abstracted\n\n**Example:**\n\n```python\n# ⚠️ Warning - Duplication\ndef get_user_by_id(user_id):\n    response = requests.get(f\"{BASE_URL}/users/{user_id}\")\n    if response.status_code == 200:\n        return response.json()\n    return None\n\ndef get_order_by_id(order_id):\n    response = requests.get(f\"{BASE_URL}/orders/{order_id}\")\n    if response.status_code == 200:\n        return response.json()\n    return None\n\n# ✅ Good - Abstracted\ndef get_resource(resource_type: str, resource_id: str):\n    response = requests.get(f\"{BASE_URL}/{resource_type}/{resource_id}\")\n    if response.status_code == 200:\n        return response.json()\n    return None\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n#### 2.7 `[HEURISTIC]` Commented-Out Code\n\n**Check for:**\n- Large blocks of commented-out code (> 5 lines)\n- TODO comments that are stale (months old if dates present)\n- FIXME comments indicating known issues\n\n**Examples:**\n\n```python\n# ⚠️ Warning - Commented code should be removed\n# def old_implementation():\n#     for item in items:\n#         process_item(item)\n#     return results\n\n# ⚠️ Warning - Stale TODO\n# TODO: Fix this before launch (added 2024-01-15)\n\n# ✅ Acceptable - Brief explanatory comment\n# Note: Using legacy API format for backwards compatibility\n```\n\nSeverity: ⚠️ Warning\n\n---\n\n### Step 3: Generate Report\n\n```markdown\n# Code Quality Verification Report\n\n**Project:** [name or path]\n**Date:** [current date]\n**Files analyzed:** [count]\n\n## Summary\n\n✅ X checks passed | ⚠️ Y warnings | ❌ Z issues\n\n## Naming\n\n- [x] Naming conventions consistent\n- [ ] ⚠️ Unclear names at `[file:line]`\n\n## Organization\n\n- [x] Code well-organized\n- [ ] ⚠️ Large function at `[file:line]` ([X] lines)\n\n## Documentation\n\n- [x] Key functions documented\n- [ ] ⚠️ Missing docstring at `[file:line]`\n\n## Error Handling\n\n- [x] Errors properly handled\n- [ ] ⚠️ Bare except at `[file:line]`\n\n## Findings\n\n> `[H]` = heuristic (all quality checks require judgment)\n\n### ✅ Passing\n- `[H]` Consistent naming conventions throughout\n- `[H]` Functions are well-scoped and focused\n\n### ⚠️ Warnings\n- `[H]` [Check]: [description]\n  - **Location:** [file:line]\n  - **Impact:** [why this matters]\n  - **Suggestion:** [how to improve]\n\n## Recommendations\n\n1. [Priority recommendation]\n2. [Additional improvements]\n```\n\n---\n\n*For full verification including security, patterns, and language-specific checks, say \"verify agent\".*","tags":["verify","quality","agent","verifier","aurite-ai","agent-skills","agent-testing","agent-verification","ai-agent","ai-coding-assistant","claude-code","cline"],"capabilities":["skill","source-aurite-ai","skill-verify-quality","topic-agent-skills","topic-agent-testing","topic-agent-verification","topic-ai-agent","topic-ai-coding-assistant","topic-claude-code","topic-cline","topic-code-quality","topic-code-review","topic-code-verification","topic-coding-agent","topic-cursor"],"categories":["agent-verifier"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Aurite-ai/agent-verifier/verify-quality","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Aurite-ai/agent-verifier","source_repo":"https://github.com/Aurite-ai/agent-verifier","install_from":"skills.sh"}},"qualityScore":"0.469","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 38 github stars · SKILL.md body (7,757 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:58:30.142Z","embedding":null,"createdAt":"2026-04-29T01:03:27.241Z","updatedAt":"2026-05-18T18:58:30.142Z","lastSeenAt":"2026-05-18T18:58:30.142Z","tsv":"'-01':800 '-15':801 '/orders':697 '/users':674 '0':483 '1':100,925 '10':299 '2':149,928 '2.1':167 '2.2':255 '2.3':361 '2.4':437 '2.5':544 '2.6':630 '2.7':738 '20':303 '200':680,703,731 '2024':799 '3':242,252,393,396,418,817 '4':281 '5':643,753 '50':273 '500':265 '60':399,401,422 'abbrevi':186 'abstract':657,709 'accept':802 'ad':798 'addit':929 'agent':66,97,131,944 'analysi':51 'analyz':106,833 'anti':38 'anti-pattern':37 'api':809 'app':128 'arg':518 'ask':18,63 'attempt':241 'attribut':304 'auth':248 'authent':235,237 'backward':812 'bare':552,582,882 'base':672,695,722 'best':14 'block':642,747 'boolean':212 'brief':803 'busi':287,341 'calc':190 'calcul':477,499,510,523 'camelcas':195 'case':193,198 'check':22,70,76,90,125,152,154,171,217,221,236,249,259,367,440,548,634,744,837,892,911,941 'class':297,451,454 'clear':225 'code':5,23,27,29,34,71,74,115,257,372,632,641,679,702,730,743,752,774,821,855 'comment':741,750,756,766,773,805 'commented-out':740,749 'compat':813 'concern':286,330,358 'condition1':315 'condition2':317 'condition3':323 'condition4':325 'configur':380 'connect':621 'connectionerror':616 'consist':847,897 'constant':374,415 'convent':9,78,170,846,899 'copi':646 'copy-past':645 'could':655 'count':392,428,834 'current':830 'd':184 'data':183,208,313,586,602,610 'databas':346 'date':763,829,831 'datetime.now':345 'db.session.add':348 'db.session.commit':350 'deep':279,309,327 'def':311,331,459,476,498,662,685,710,778 'default':613 'definit':455 'delay':420,433 'describ':206 'descript':226,262,551,912 'directori':123 'discov':101 'docstr':446,452,457,475,872 'document':11,44,439,497,866,870 'duplic':633,661 'e':606,611,618,623,627 'elif':408 'email':351,355 'enabl':216,220 'error':546,568,578,876,879 'exampl':174,305,385,471,579,658,770 'except':179,553,554,557,560,563,566,583,587,591,593,603,615,883 'exclud':134 'expect':444 'explanatori':804 'f':608,620,671,694,721 'fail':573,622 'failur':559 'file':102,104,108,120,141,146,201,264,450,832,851,862,874,885,914 'find':164,887 'fix':794 'fixm':765 'float':508,509 'focus':116,908 'format':810 'full':81,932 'function':272,278,294,456,462,469,570,648,860,869,902 'general':13 'generat':145,818 'generic':562,590 'get':182,229,245,663,686,711 'go':112 'god':295 'good':222,413,496,597,708 'h':166,888,896,901,910 'handl':547,569,577,599,877,881 'happen':52 'hardcod':382 'heurist':159,168,256,362,438,545,631,739,889 'hint':467 'i/o':291,347 'id':233,666,668,676,689,691,699,717,727 'ident':636,640 'impact':916 'implement':119,780 'improv':923,930 'includ':7,40,83,934 'inconsist':192 'indent':284 'indic':767 'info':211 'invalid':609 'is/has/can':215 'issu':49,173,261,306,550,769,842 'item':319,321,480,485,489,503,505,517,526,529,537,782,784,786,787 'item.value':492 'js':111 'judgment':162,894 'key':868 'known':768 'languag':88,939 'language-specif':87,938 'larg':263,271,746,859 'launch':797 'legaci':808 'letter':177 'level':282 'lib':127 'line':266,274,644,754,852,863,865,875,886,915 'list':504,507,527 'liter':370,376 'local':53 'locat':103,913 'logger.error':619 'logger.warning':607 'logic':288,342,384 'loop':180 'magic':45,363,388 'main':118 'markdown':820 'matter':919 'max':239,416,429 'mean':397 'method':301 'migrat':147 'minor':650 'miss':43,442,474,871 'mix':194,285,289,329 'modul':136,270,445 'month':760 'multipl':357,378 'multipli':534 'n':251 'name':8,42,77,169,202,213,223,414,826,843,845,849,898 'near':639 'near-ident':638 'nest':280,310 'node':135 'none':684,707,735 'note':79,806 'number':364,389 'numer':369 'object':296 'old':761,779 'order':687,690,698 'organ':10,28,75,258,853,858 'organiz':48 'parameters/returns':470 'pass':561,588,838,895 'past':647 'path':828 'pattern':39,85,653,936 'pend':407,410,424,425 'poor':41 'practic':15 'present':764 'prioriti':926 'proc':187 'process':98,312,585,601,785 'profil':228,231 'project':129,464,825 'proper':880 'public':300,461,468 'purpos':32,207 'py':109,449 'pycach':139 'python':224,307,386,472,580,659,771 'qualiti':3,6,21,24,30,36,67,69,72,151,822,891 'rais':339,564,565,592,624 'readm':463 'recommend':924,927 'remov':777 'repeat':377,403,652 'report':819,824 'req':189 'requests.get':670,693,720 'requir':161,893 'resourc':712,713,716,724,726 'respons':669,692,719 'response.json':682,705,733 'response.status':678,701,729 'result':210,789 'retri':240,391,417,419,427,430,432 'return':494,538,612,681,683,704,706,732,734,788 'review':26,73 'risk':412 'root':130,465 'rs':113 'run':150 'save':332 'say':95,942 'scope':906 'score':478,500,512,524,531,541 'second':421,434 'secur':84,935 'send':352,353 'serviceunavailableerror':625 'sever':253,359,435,542,628,736,814 'silent':558 'singl':176,269,277 'single-lett':175 'skill':59,157 'skill-verify-quality' 'snake':197 'someth':594 'sourc':107,114 'source-aurite-ai' 'spec':143 'specif':89,556,598,940 'src':126 'stale':759,791 'status':406,409,423 'step':99,148,816 'str':715,718 'string':366,375,404 'suggest':920 'summari':835 'tag':163 'tell':91 'temp':209 'test':122,140,142 'test.go':144 'throughout':900 'time':379 'time.sleep':398,431 'todo':755,792,793 'token':238 'tool':132 'top':447 'topic-agent-skills' 'topic-agent-testing' 'topic-agent-verification' 'topic-ai-agent' 'topic-ai-coding-assistant' 'topic-claude-code' 'topic-cline' 'topic-code-quality' 'topic-code-review' 'topic-code-verification' 'topic-coding-agent' 'topic-cursor' 'total':482,491,495,539 'tri':584,600 'trigger':57 'ts':110 'type':466,714,725 'typo':411 'uid':247 'unclear':185,243,848 'url':673,696,723 'use':16,56,807 'user':62,93,227,230,232,333,334,349,356,479,501,502,515,519,521,664,667,675 'user.created':343 'user.email':338 'usr':188 'util':133 'val':191 'valid':335 'valu':46,381,614 'valueerror':340,604 'variabl':178 'variat':651 'venv':137,138 'verif':31,82,823,933 'verifi':2,4,20,33,65,68,96,943 'verify-qu':1 'vs':218 'warn':254,308,328,360,387,402,436,473,543,581,589,629,660,737,772,790,815,840,909 'weight':481,486,490,493,506,511,532,533,540 'welcom':354 'well':857,905 'well-organ':856 'well-scop':904 'went':595 'without':214,373,555 'wrong':596 'x':181,244,836,844,854,864,867,878 'y':839 'z':841 'zip':488","prices":[{"id":"e2c196d7-0ddc-4fbd-a736-1ed1360779b3","listingId":"8e9699c8-62cc-44bd-9ae7-ae927f548d2a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Aurite-ai","category":"agent-verifier","install_from":"skills.sh"},"createdAt":"2026-04-29T01:03:27.241Z"}],"sources":[{"listingId":"8e9699c8-62cc-44bd-9ae7-ae927f548d2a","source":"github","sourceId":"Aurite-ai/agent-verifier/verify-quality","sourceUrl":"https://github.com/Aurite-ai/agent-verifier/tree/main/skills/verify-quality","isPrimary":false,"firstSeenAt":"2026-04-29T01:03:27.241Z","lastSeenAt":"2026-05-18T18:58:30.142Z"}],"details":{"listingId":"8e9699c8-62cc-44bd-9ae7-ae927f548d2a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Aurite-ai","slug":"verify-quality","github":{"repo":"Aurite-ai/agent-verifier","stars":38,"topics":["agent-skills","agent-testing","agent-verification","ai-agent","ai-coding-assistant","claude-code","cline","code-quality","code-review","code-verification","coding-agent","cursor","devtools","langgraph","security","skills","windsurf"],"license":"mit","html_url":"https://github.com/Aurite-ai/agent-verifier","pushed_at":"2026-05-01T10:31:12Z","description":"Agent Verifier is a coding agent skill that verifies code against organizational policies, code quality patterns, security requirements, and framework best practices — before code ships. Works with Claude Code, Cursor, Windsurf, and 30+ agents.","skill_md_sha":"ddce0bb89efc4f9adab01f3a370a046c09f59120","skill_md_path":"skills/verify-quality/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Aurite-ai/agent-verifier/tree/main/skills/verify-quality"},"layout":"multi","source":"github","category":"agent-verifier","frontmatter":{"name":"verify-quality","description":"Verify code quality including naming conventions, organization, documentation, and general best practices. Use when asked to \"verify quality\", \"check code quality\", or \"review code organization\"."},"skills_sh_url":"https://skills.sh/Aurite-ai/agent-verifier/verify-quality"},"updatedAt":"2026-05-18T18:58:30.142Z"}}