with one click
codeql-scan
// Execute CodeQL security scans with language detection, database caching, and SARIF output. Use when performing static security analysis on Python or GitHub Actions code.
// Execute CodeQL security scans with language detection, database caching, and SARIF output. Use when performing static security analysis on Python or GitHub Actions code.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | codeql-scan |
| version | 1.0.1 |
| description | Execute CodeQL security scans with language detection, database caching, and SARIF output. Use when performing static security analysis on Python or GitHub Actions code. |
| license | MIT |
| model | claude-sonnet-4-6 |
Execute CodeQL security scans with automated language detection, database caching, and SARIF output generation.
# Via Claude Code skill system
/codeql-scan
# Full scan with auto-detected languages
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation full
# Quick scan with cached databases
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation quick
# Validate configuration only
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation validate
Run CodeQL scanCheck for vulnerabilitiesValidate CodeQL configurationQuick security scanScan for security issuesNeed CodeQL analysis?
+-- First time setup --> python3 .codeql/scripts/install_codeql.py
+-- Validate config --> invoke_codeql_scan.py --operation validate
+-- Full repository scan --> invoke_codeql_scan.py --operation full
+-- Quick scan (cached) --> invoke_codeql_scan.py --operation quick
+-- Specific language --> invoke_codeql_scan.py --operation full --languages python
+-- CI mode --> invoke_codeql_scan.py --operation full --ci
| Operation | Use When | Performance | Output |
|---|---|---|---|
full | First scan, major changes, pre-PR validation | 30-60s | SARIF + Console |
quick | Iterative development, minor changes | 10-20s | SARIF + Console |
validate | Config changes, troubleshooting | <5s | Console only |
flowchart TD
A[Start CodeQL Scan] --> B{Operation Type}
B -->|full| C[Check CLI Installed]
B -->|quick| C
B -->|validate| D[Run test_codeql_config.py]
C --> E{CLI Available?}
E -->|No| F[Error: Install CLI]
E -->|Yes| G[Detect Languages]
G --> H[Run invoke_codeql_scan.py]
H --> I{Scan Successful?}
I -->|Yes| J[Generate SARIF]
I -->|No| K[Error: Scan Failed]
J --> L[Display Summary]
D --> M{Config Valid?}
M -->|Yes| N2[Display Config Status]
M -->|No| O2[Exit 2: Config Invalid]
L --> N[Exit 0]
N2 --> N
F --> O[Exit 3]
K --> P[Exit 3]
Run a comprehensive security analysis of the entire codebase.
Check Prerequisites:
# Verify CodeQL CLI is installed
test -f .codeql/cli/codeql || echo "CodeQL CLI not found. Run: python3 .codeql/scripts/install_codeql.py"
Run Scan:
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation full
Review Results:
.codeql/results/*.sarifUse for rapid iteration during development. Only re-scans if source files changed.
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation quick
Performance comparison:
Verify CodeQL configuration YAML syntax and query packs.
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation validate
Wrapper script providing skill-specific functionality.
| Parameter | Type | Default | Description |
|---|---|---|---|
--operation | choice | full | Operation type: full, quick, validate |
--languages | list | (auto-detect) | Languages to scan: python, actions |
--ci | flag | false | Enable CI mode (exit 1 on findings) |
Exit Codes (ADR-035):
| Code | Meaning | CI Behavior |
|---|---|---|
| 0 | Success (no findings or findings ignored) | Pass |
| 1 | Findings detected (CI mode only) | Fail |
| 2 | Configuration invalid | Fail |
| 3 | Scan execution failed | Fail |
This skill wraps these core CodeQL scripts:
| Script | Purpose | Location |
|---|---|---|
install_codeql.py | Download and install CodeQL CLI | .codeql/scripts/ |
invoke_codeql_scan.py | Execute security scans | .codeql/scripts/ |
test_codeql_config.py | Validate configuration | .codeql/scripts/ |
get_codeql_diagnostics.py | Comprehensive health check | .codeql/scripts/ |
| Avoid | Why | Instead |
|---|---|---|
| Skip config validation before scan | Wastes time on invalid config | Run --operation validate first |
| Ignore exit codes | Silent failures hide security issues | Check $? (Bash/Zsh) or $LASTEXITCODE (PowerShell) after every invocation |
| Suppress stderr before checking exit code | Loses diagnostic information | Capture output, check exit code, then filter |
| Full scan on every minor change | 3-5x slower than needed | Use --operation quick for iteration |
| Mix skill wrapper with direct script calls | Inconsistent behavior | Always use invoke_codeql_scan.py |
Before completing a security scan task:
--operation validate)invoke_codeql_scan.py completed successfully (exit code 0; see exit codes in Scripts section).codeql/results/| Skill | Purpose | When to Use |
|---|---|---|
security-detection | Detect security-critical file changes | Before CodeQL scan to identify high-risk changes |
github | GitHub operations (PR comments, issues) | Report CodeQL findings to PR reviews |
session-init | Initialize session with protocol | Before starting security analysis workflow |
.agents/SESSION-PROTOCOL.md=== CodeQL Security Scan ===
[OK] CodeQL CLI found at .codeql/cli/codeql
[OK] Languages detected: python, actions
[OK] Running full scan (no cache)...
Scanning python...
Database created: .codeql/db/python
Queries executed: 89
Findings: 1 (0 high, 0 medium, 1 low)
Scanning actions...
Database created: .codeql/db/actions
Queries executed: 45
Findings: 0
[OK] SARIF results saved to .codeql/results/
[OK] Scan completed successfully
Total findings: 1 (0 high, 0 medium, 1 low)
Results are saved in SARIF format for IDE integration.
Location: .codeql/results/<language>.sarif
{
"version": "2.1.0",
"runs": [{
"tool": {
"driver": {
"name": "CodeQL",
"version": "2.15.0"
}
},
"results": [{
"ruleId": "py/sql-injection",
"level": "error",
"message": {
"text": "Potential SQL injection vulnerability"
},
"locations": [{
"physicalLocation": {
"artifactLocation": {
"uri": "scripts/example.py"
},
"region": {
"startLine": 42
}
}
}]
}]
}]
}
{
"status": "findings_detected",
"languages": ["python", "actions"],
"findings": {
"total": 1,
"high": 0,
"medium": 0,
"low": 1
},
"sarif_files": [
".codeql/results/python.sarif",
".codeql/results/actions.sarif"
]
}
The PostToolUse hook automatically triggers targeted CodeQL scans after you write Python files (.py) or GitHub Actions workflows (.yml in .github/workflows/). Uses a focused query set (5-10 critical CWEs) to complete within 30 seconds.
Automatic Triggers:
Configuration:
.claude/hooks/PostToolUse/invoke_codeql_quick_scan.py.github/codeql/codeql-config-quick.ymlPerformance:
| Scenario | Duration |
|---|---|
| Cached DB | 5-15 seconds |
| First run | 20-30 seconds |
| Timeout budget | 30 seconds (graceful) |
Graceful Degradation:
# Console output (default)
python3 .codeql/scripts/get_codeql_diagnostics.py
# JSON output (programmatic parsing)
python3 .codeql/scripts/get_codeql_diagnostics.py --output-format json
# Markdown report
python3 .codeql/scripts/get_codeql_diagnostics.py --output-format markdown > diagnostics.md
| Check | What It Validates |
|---|---|
| CLI | Installation, version, executable permissions |
| Config | YAML syntax, query pack availability, language support |
| Database | Existence, cache validity, size, creation timestamp |
| Results | SARIF files, findings count, last scan timestamp |
| Code | Meaning |
|---|---|
| 0 | All checks passed |
| 1 | Some checks failed (warnings) |
| 3 | Unable to run diagnostics |
Error: CodeQL CLI not found at .codeql/cli/codeql
Solution:
python3 .codeql/scripts/install_codeql.py --add-to-path
codeql version
Error: Invalid query pack: codeql/unknown-queries
Solution:
python3 .codeql/scripts/test_codeql_config.py
codeql resolve qlpacks
Error: Query execution timed out after 300s
Solution: Reduce scope by scanning a specific language.
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation full --languages python
Warning: Using cached database, but source files changed
Solution: Force database rebuild with a full scan.
python3 .claude/skills/codeql-scan/scripts/invoke_codeql_scan.py --operation full
PostToolUse hook not running after file writes. Common causes:
.py and .yml in workflows)Verify:
python3 .codeql/scripts/get_codeql_diagnostics.py
test -f .claude/hooks/PostToolUse/invoke_codeql_quick_scan.py && echo "Hook exists"