Code Hardcode Audit
When to Use This Skill
Use this skill when the user mentions:
- "hardcoded values", "hardcodes", "magic numbers"
- "constant detection", "find constants"
- "duplicate constants", "DRY violations"
- "code audit", "hardcode audit"
- "PLR2004", "semgrep", "jscpd", "gitleaks"
- "secret scanning", "leaked secrets", "API keys"
- "passwords in code", "credential leaks"
Quick Start
# Full audit (all tools, both outputs)
uv run --script scripts/audit_hardcodes.py -- src/
# Python magic numbers only (fastest)
uv run --script scripts/run_ruff_plr.py -- src/
# Pattern-based detection (URLs, ports, paths)
uv run --script scripts/run_semgrep.py -- src/
# Copy-paste detection
uv run --script scripts/run_jscpd.py -- src/
# Secret scanning (API keys, tokens, passwords)
uv run --script scripts/run_gitleaks.py -- src/
Tool Overview
| Tool |
Detection Focus |
Language Support |
Speed |
| Ruff PLR2004 |
Magic value comparisons |
Python |
Fast |
| Semgrep |
URLs, ports, paths, credentials |
Multi-language |
Medium |
| jscpd |
Duplicate code blocks |
Multi-language |
Slow |
| gitleaks |
Secrets, API keys, passwords |
Any (file-based) |
Fast |
Output Formats
JSON (--output json)
{
"summary": {
"total_findings": 42,
"by_tool": { "ruff": 15, "semgrep": 20, "jscpd": 7 },
"by_severity": { "high": 5, "medium": 25, "low": 12 }
},
"findings": [
{
"id": "MAGIC-001",
"tool": "ruff",
"rule": "PLR2004",
"file": "src/config.py",
"line": 42,
"column": 8,
"message": "Magic value used in comparison: 8123",
"severity": "medium",
"suggested_fix": "Extract to named constant"
}
],
"refactoring_plan": [
{
"priority": 1,
"action": "Create constants/ports.py",
"finding_ids": ["MAGIC-001", "MAGIC-003"]
}
]
}
Compiler-like Text (--output text)
src/config.py:42:8: PLR2004 Magic value used in comparison: 8123 [ruff]
src/probe.py:15:1: hardcoded-url Hardcoded URL detected [semgrep]
src/client.py:20-35: Clone detected (16 lines, 95% similarity) [jscpd]
Summary: 42 findings (ruff: 15, semgrep: 20, jscpd: 7)
CLI Options
--output {json,text,both} Output format (default: both)
--tools {all,ruff,semgrep,jscpd,gitleaks} Tools to run (default: all)
--severity {all,high,medium,low} Filter by severity (default: all)
--exclude PATTERN Glob pattern to exclude (repeatable)
--parallel Run tools in parallel (default: true)
References
Related
- ADR-0046: Semantic Constants Abstraction
- ADR-0047: Code Hardcode Audit Skill
code-clone-assistant - PMD CPD-based clone detection (DRY focus)
1---2name: code-hardcode-audit3description: Detect hardcoded values, magic numbers, and leaked secrets. TRIGGERS - hardcode audit, magic numbers, PLR2004, secret scanning.4---5
6# Code Hardcode Audit
7
8## When to Use This Skill
9
10Use this skill when the user mentions:
11
12- "hardcoded values", "hardcodes", "magic numbers"
13- "constant detection", "find constants"
14- "duplicate constants", "DRY violations"
15- "code audit", "hardcode audit"
16- "PLR2004", "semgrep", "jscpd", "gitleaks"
17- "secret scanning", "leaked secrets", "API keys"
18- "passwords in code", "credential leaks"
19
20## Quick Start
21
22```bash
23# Full audit (all tools, both outputs)
24uv run --script scripts/audit_hardcodes.py -- src/
25
26# Python magic numbers only (fastest)
27uv run --script scripts/run_ruff_plr.py -- src/
28
29# Pattern-based detection (URLs, ports, paths)
30uv run --script scripts/run_semgrep.py -- src/
31
32# Copy-paste detection
33uv run --script scripts/run_jscpd.py -- src/
34
35# Secret scanning (API keys, tokens, passwords)
36uv run --script scripts/run_gitleaks.py -- src/
37```
38
39## Tool Overview
40
41| Tool | Detection Focus | Language Support | Speed |
42| ---------------- | ------------------------------- | ---------------- | ------ |
43| **Ruff PLR2004** | Magic value comparisons | Python | Fast |
44| **Semgrep** | URLs, ports, paths, credentials | Multi-language | Medium |
45| **jscpd** | Duplicate code blocks | Multi-language | Slow |
46| **gitleaks** | Secrets, API keys, passwords | Any (file-based) | Fast |
47
48## Output Formats
49
50### JSON (--output json)
51
52```json
53{
54 "summary": {
55 "total_findings": 42,
56 "by_tool": { "ruff": 15, "semgrep": 20, "jscpd": 7 },
57 "by_severity": { "high": 5, "medium": 25, "low": 12 }
58 },
59 "findings": [
60 {
61 "id": "MAGIC-001",
62 "tool": "ruff",
63 "rule": "PLR2004",
64 "file": "src/config.py",
65 "line": 42,
66 "column": 8,
67 "message": "Magic value used in comparison: 8123",
68 "severity": "medium",
69 "suggested_fix": "Extract to named constant"
70 }
71 ],
72 "refactoring_plan": [
73 {
74 "priority": 1,
75 "action": "Create constants/ports.py",
76 "finding_ids": ["MAGIC-001", "MAGIC-003"]
77 }
78 ]
79}
80```
81
82### Compiler-like Text (--output text)
83
84```
85src/config.py:42:8: PLR2004 Magic value used in comparison: 8123 [ruff]
86src/probe.py:15:1: hardcoded-url Hardcoded URL detected [semgrep]
87src/client.py:20-35: Clone detected (16 lines, 95% similarity) [jscpd]
88
89Summary: 42 findings (ruff: 15, semgrep: 20, jscpd: 7)
90```
91
92## CLI Options
93
94```
95--output {json,text,both} Output format (default: both)
96--tools {all,ruff,semgrep,jscpd,gitleaks} Tools to run (default: all)
97--severity {all,high,medium,low} Filter by severity (default: all)
98--exclude PATTERN Glob pattern to exclude (repeatable)
99--parallel Run tools in parallel (default: true)
100```
101
102## References
103
104- [Tool Comparison](./references/tool-comparison.md) - Detailed tool capabilities
105- [Output Schema](./references/output-schema.md) - JSON schema specification
106- [Troubleshooting](./references/troubleshooting.md) - Common issues and fixes
107
108## Related
109
110- ADR-0046: Semantic Constants Abstraction
111- ADR-0047: Code Hardcode Audit Skill
112- `code-clone-assistant` - PMD CPD-based clone detection (DRY focus)