sonic-boom
Sonic Code Sentinel (sonic-boom)
Sonic Code Sentinel encodes an entire TypeScript / JavaScript codebase into a single PNG heatmap that vision-capable AI models can read in one glance β bypassing token limits for codebase-scale audits.
The image is a deterministic function of the AST: same code β byte-identical pixels. Each pixel encodes a category (via color) and severity (via brightness), so the picture itself is the audit summary β no separate lookup required.
π΅ The Spectrogram
The codebase is laid out as a 2D heatmap.
graph LR
Code[Source Code] --> Scanner[AST Scanner]
Scanner --> Map[Deterministic Color Map]
Map --> PNG[Spectrogram PNG]
PNG --> AI[Vision AI Model]
AI --> Fix[Surgical Code Fix]πΊοΈ Coordinate Mapping
X-Axis: Each file occupies a contiguous horizontal slot. Within a slot, X is proportional to the line number of the node.
Y-Axis: Partitioned into four bands (see below). Within the top
ANOMALYband, each Y-row is reserved for one concern β turning the band into a row-per-category heatmap.Color: Encodes the anomaly category (see catalog below).
Brightness (Amplitude): Encodes severity β
highis brightest (1.0),medis mid (0.75),lowis dim (0.5). Structural (non-anomaly) pixels fade with nesting depth.
π Frequency Bands
Hz Range | Layer | Content |
20 β 8 k |
| Source files ( |
8 k β 12 k |
| Stylesheets ( |
12 k β 16 k |
| Markup assets ( |
16 k β 20 k |
| Per-category rows for detected concerns |
π¬ Detected Anomalies
13 categories. Each has a stable Hz row, a stable color, and a fixed severity β so the heatmap is readable without consulting the mapping table.
Category | Severity | Detection |
Empty catch block | high |
|
Layer Violation | high | File under |
Massive Component | high |
|
Prop Overload | high | Interface ending in |
Explicit | med | Parameter, variable, or property typed |
Heavy Library Import | med | Imports |
High Complexity | med (high if cc β₯ 20) | Function / method / arrow / class with cyclomatic > 5 or depth > 5 β label includes |
Heavy Barrel Export | med |
|
Commented-out Code Block | med | Long comment block containing code-like characters |
Z-Index Escalation | med |
|
Unresolved TODO/FIXME | med | Leading comment matching `/TODO |
Tailwind Magic Value | low | Arbitrary |
Missing Test File | low | Source file with no sibling |
π¨ Color Legend
Color | Category |
White | Layer Violation |
Bright Red | Empty catch block |
Light Red | Explicit |
Purple | Heavy Library Import |
Orange | Prop Overload |
Amber | High Complexity (with 5-px horizontal spread for emphasis) |
Gold | Massive Component |
Dim Yellow | Heavy Barrel Export |
Sky Blue | Z-Index Escalation |
Cyan | Tailwind Magic Value |
Bright Yellow | Unresolved TODO/FIXME |
Grey | Commented-out Code Block |
Dim Blue-Grey | Missing Test File |
Below the ANOMALY band, structural pixels render green / blue / orange for the LOGIC / STYLES / MARKUP layers respectively.
π οΈ MCP Tools
Three tools, used as a pipeline.
Tool | Purpose |
| Generates the PNG + mapping table. Returns the PNG (base64), a severity-sorted top-10 anomaly summary, and the color legend. |
| Translates |
| Fetches a 20-line context window for a given file + line. |
Resolution behavior
Strict snap: clicks within 12 px of an anomaly pixel resolve to that anomaly, including its canonical category and severity.
Proximity fallback: a click that lands far from every anomaly in a non-empty file slot still resolves β to the closest in-slot anomaly, flagged with
proximityMatch: trueand apixelDistancein pixels. Replaces the old "Could not resolve coordinates" dead end.
Workflow
Visualize: agent calls
get_project_spectrogramover the repo root.Read the heatmap: the vision model identifies a bright pixel cluster by color (e.g. amber row = High Complexity, white row = Layer Violation).
Resolve:
resolve_sonic_coordinates(x, y)returns file, line, category, severity.Snippet:
get_code_snippetfor the 20-line window.Fix: apply patch.
π Getting Started
Prerequisites
Bun v1.1+
Install
bun installCLI
Generate a spectrogram for any local directory:
# Scan a project
bun run src/index.ts ../path/to/project
# Exclude additional patterns
bun run src/index.ts ../path/to/project --exclude "**/tests/**"
# Resolve coordinates from a previously generated mapping
bun run src/index.ts fix --coords 150,400 --issue "describe the issue"Outputs land in ./output/:
spectrogram.pngβ the heatmap.mapping_table.jsonβ per-pixel metadata used by the resolver (file, line, anomaly category, severity).
MCP server
Add to your MCP client config (e.g. Claude Desktop):
{
"mcpServers": {
"sonic-boom": {
"command": "npx",
"args": ["-y", "sonic-boom-mcp@latest"]
}
}
}The MCP server stores its artifacts under <tmp>/sonic-boom-mcp/; tool calls pass directoryPath to identify the project root.
Inspect MCP locally
bun x npx @modelcontextprotocol/inspector bun run src/mcp-server.tsRun tests
bun testThe suite covers ignore-file handling, every anomaly detection rule, scan determinism, and resolver round-trip behavior.
π§± Design Properties
Deterministic: same source β byte-identical PNG and mapping JSON across runs. No RNG anywhere in the scan or render pipeline.
Heatmap by construction: color = category, brightness = severity, Y-row = concern. The image is the audit, not a decoration.
Ignore-file aware: respects
.gitignore,.npmignore,.dockerignore,.sonicignore,.eslintignore,.prettierignore, and.gcloudignoreβ both at the repo root and in any subdirectory. Built-in skip list:node_modules,.git,dist,.next,out,build,.vscode,.idea,output.
Sonic Code Sentinel β Hear the code. See the bugs.
π License
This project is licensed under the PolyForm Noncommercial License 1.0.0.
Free for personal / non-commercial use: research, learning, hobby projects.
Commercial use requires a separate commercial license β please contact the author for details.