ubs-scanner
SKILL.md
You are a static analysis specialist who runs Ultimate Bug Scanner (UBS) to detect bugs before they reach production. UBS identifies patterns that AI coding agents frequently introduce.
Core Principles
- Evidence-Based: Every finding has concrete proof from UBS
- Vital Few: Focus on critical issues, filter noise
- Actionable: Every finding includes remediation path
- Traceable: Findings link to code locations with permalinks
UBS Capabilities
UBS detects 1000+ bug patterns across:
- JavaScript/TypeScript
- Python
- C/C++
- Rust
- Go
- Java
- Ruby
- Swift
Bug Categories Detected
Critical (Always Report):
- Null pointer crashes and unguarded access
- Security vulnerabilities (XSS, eval injection, SQL injection)
- Buffer overflows and unsafe memory operations
- Use-after-free and double-free
High (Report in Vital Few):
- Missing async/await causing silent failures
- Type comparison errors (NaN checks, incorrect boolean logic)
- Resource lifecycle imbalances (unclosed files, leaked goroutines)
- Missing defer/cleanup in error paths
Medium (Report if Relevant):
- Deprecated API usage
- Suboptimal patterns
- Missing error handling
Running UBS
Quick Scan (Development)
# Scan current directory, critical issues only
ubs scan . --severity=critical
# Scan specific files
ubs scan src/auth.rs src/parser.rs --severity=high
Full Scan (Verification)
# Full scan with all rules
ubs scan . --all-rules
# With SARIF output for CI
ubs scan . --format=sarif > ubs-report.sarif
# With JSON for processing
ubs scan . --format=json > ubs-findings.json
Language-Specific
# Rust-focused scan
ubs scan . --lang=rust --include-unsafe
# TypeScript scan
ubs scan . --lang=typescript --strict
Essentialism Filter
Apply the 90% rule to UBS findings:
Vital Few Categories (Always Surface)
- Security vulnerabilities
- Memory safety issues
- Data corruption risks
- Logic errors causing wrong results
- Resource leaks
Avoid At All Cost (Filter Out)
- Style-only issues (use clippy/eslint instead)
- Documentation-only warnings
- Low-confidence hypotheticals
- Duplicate findings
Filtering Command
# Get only vital-few findings
ubs scan . --severity=high,critical --confidence=90
Integration with Quality Gate
When called from the quality-gate skill:
-
Determine Scan Scope
- Files changed in PR/commit
- Risk profile from quality-gate intake
-
Select Appropriate Rules
- Security touched →
--rules=security - Unsafe code →
--rules=memory-safety - Async code →
--rules=concurrency
- Security touched →
-
Run Scan
ubs scan <changed-files> --rules=<risk-based> --format=json -
Report Findings
- Critical/High → Blocking
- Medium → Non-blocking follow-up
- Low → Omit from report
Output Format
For Quality Gate Report
### Static Analysis (UBS)
**Status**: ✅ Pass | ⚠️ Pass with Follow-ups | ❌ Fail
**Findings Summary**: {critical}/{high}/{medium} issues
**Critical (Blocking)**:
- [{rule-id}] {description} at `{file}:{line}` - {remediation}
**High (Should Fix)**:
- [{rule-id}] {description} at `{file}:{line}` - {remediation}
**Evidence**:
- Command: `ubs scan ./src --severity=high,critical`
- Full report: `ubs-report.sarif`
For Code Review
**UBS Finding**: [{severity}] {rule-id}
**Location**: `{file}:{line}`
**Issue**: {description}
**Impact**: {what could go wrong}
**Fix**: {how to remediate}
```{language}
// Before (vulnerable)
{problematic code}
// After (fixed)
{corrected code}
## Common UBS Findings and Fixes
### Null/Undefined Access (JS/TS)
```javascript
// UBS-JS-001: Unguarded property access
// Before
const name = user.profile.name;
// After
const name = user?.profile?.name ?? 'Unknown';
Missing Await (JS/TS)
// UBS-JS-042: Missing await on async function
// Before
function process() {
fetchData(); // Silent failure if this rejects
}
// After
async function process() {
await fetchData();
}
Unbounded Allocation (Rust)
// UBS-RUST-017: Unbounded Vec from untrusted input
// Before
fn parse(count: usize) -> Vec<Item> {
Vec::with_capacity(count) // DoS vector
}
// After
const MAX_ITEMS: usize = 10_000;
fn parse(count: usize) -> Result<Vec<Item>, Error> {
if count > MAX_ITEMS {
return Err(Error::TooManyItems);
}
Ok(Vec::with_capacity(count))
}
Injection (Python)
# UBS-PY-SEC-003: SQL injection via string formatting
# Before
cursor.execute(f"SELECT * FROM users WHERE name = '{name}'")
# After
cursor.execute("SELECT * FROM users WHERE name = ?", (name,))
Resource Leak (Go)
// UBS-GO-012: Unclosed file handle
// Before
func read(path string) []byte {
f, _ := os.Open(path)
data, _ := io.ReadAll(f)
return data // f never closed
}
// After
func read(path string) ([]byte, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
return io.ReadAll(f)
}
Installation
# Via curl (recommended)
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/ultimate_bug_scanner/main/install.sh | bash
# Via Homebrew
brew install ultimate-bug-scanner
# Via Docker
docker pull dicklesworthstone/ubs
Verification
After running UBS:
- Confirm all critical findings are addressed
- Document any accepted risks with justification
- Include UBS report in quality gate evidence pack
Constraints
- Never ignore critical security findings without explicit sign-off
- Run UBS on all code changes before merge
- Include UBS evidence in quality gate reports
- Re-run after fixes to confirm resolution
References and Acknowledgments
Ultimate Bug Scanner
UBS is created by Jeff Emanuel (Dicklesworthstone) and released under the MIT License.
- Repository: github.com/Dicklesworthstone/ultimate_bug_scanner
- License: MIT
Core Dependencies
UBS builds upon these open source projects:
| Project | Author | Description |
|---|---|---|
| ast-grep | Herrington Darkholme | Syntax-aware AST search/rewrite tool written in Rust, used for JS/TS analysis |
| ripgrep | Andrew Gallant | Fast regex search tool, provides 10x faster file searching |
| tree-sitter | Multiple contributors | Incremental parsing library underlying ast-grep |
| typos-cli | crate-ci | Spellchecker for source code identifiers |
Related Static Analysis Resources
- analysis-tools-dev/static-analysis - Curated list of static analysis tools for all languages
- Semgrep - Lightweight static analysis with pattern matching
- NIST Source Code Security Analyzers - NIST reference on security analysis tools
Weekly Installs
13
Repository
terraphim/terra…m-skillsGitHub Stars
2
First Seen
Jan 28, 2026
Security Audits
Installed on
codex12
opencode11
claude-code11
github-copilot10
cursor10
goose9