The most customisable and low-latency cross platform/shell prompt renderer
This report summarizes scanner evidence for JanDeDobbeleer/oh-my-posh, a Go project with 23,684 GitHub stars. SynthScan examined 163,697 lines of code across 938 source files, recording 142 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 0.9 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 130 finding(s).
Are imports declared and package/API names verified? 12 finding(s).
Are wrappers, guards, and repeated structures necessary? 2 finding(s).
Which changes need focused human review? 142 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 142 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/src/components/Config.js | 341 | // frontMatter.id, not metadata.id: every segment doc sets an explicit `id:` frontmatter field | COMMENT |
| LOW | website/src/components/Studio/index.js | 101 | // Set when a format switch was refused because the config in the editor does not parse; cleared | COMMENT |
| LOW | website/src/components/Studio/index.js | 181 | // and otherwise, if a segment doc queued one, appends its segment on top - so "Add to Studio" | COMMENT |
| LOW | website/src/components/Studio/config.js | 1 | // The studio's starter config: small enough to read in one glance, but shaped like a prompt | COMMENT |
| LOW | website/src/components/Studio/exportPng.js | 1 | // Rasterizes the studio's live SVG preview into a downloadable PNG. | COMMENT |
| LOW | website/src/components/ThemeGallery/index.js | 101 | ); | COMMENT |
| LOW | website/src/components/ConfigEditor/errorPosition.js | 1 | // Re-parses a config that failed to parse, purely to recover a real message and, where possible, | COMMENT |
| LOW | website/src/components/ConfigEditor/useWasmRenderer.js | 1 | import { useCallback, useEffect, useRef, useState } from 'react'; | COMMENT |
| LOW | website/src/components/ConfigEditor/schemaCompletion.js | 541 | // whenever the next non-whitespace thing is another member/element, no when it's a closer, an | COMMENT |
| LOW | website/src/components/ConfigEditor/serialize.js | 41 | COMMENT | |
| LOW | website/src/components/ConfigEditor/externalError.js | 1 | // Draws the caller-supplied syntax-error squiggle (errorLocation/errorMessage - see index.js's | COMMENT |
| LOW | website/src/components/ConfigEditor/index.js | 141 | errorLocation = null, | COMMENT |
| LOW | website/src/components/ConfigEditor/studioHandoff.js | 1 | // The sessionStorage handshake between a segment doc's/theme gallery's editor and the studio | COMMENT |
| LOW | website/src/components/ConfigEditor/ErrorIndicator.js | 1 | import React, { useRef, useState } from 'react'; | COMMENT |
| LOW | website/src/components/ConfigEditor/wasmLoader.js | 1 | // Loads the studio's wasm module: the Go host shim (wasm_exec.js, a plain script that defines | COMMENT |
| LOW | website/src/components/ConfigEditor/renderDefaults.js | 1 | // Shared inputs to the wasm render() call (see wasmLoader.js / src/wasm/main.go), factored out | COMMENT |
| LOW | website/src/components/ConfigEditor/schemaResolution.js | 1 | // Schema-resolution engine ported unchanged (behaviourally) from the pre-CodeMirror-6 editor's | COMMENT |
| LOW | e2e/harness/shells.go | 21 | // Binary is the executable name looked up via LookupShellBinary. A missing binary | COMMENT |
| LOW | src/svg/window.go | 1 | package svg | COMMENT |
| LOW | src/svg/window.go | 21 | // | COMMENT |
| LOW | src/svg/window.go | 41 | controlGap float64 // spacing between the three window controls | COMMENT |
| LOW | src/svg/window.go | 121 | // a window this small never has real room for a title next to controls | COMMENT |
| LOW | src/svg/fit.go | 21 | // measure against here, only Run.Cells arithmetic. | COMMENT |
| LOW | src/svg/decorate.go | 21 | // than rediscovered here, because nothing in the Run stream itself | COMMENT |
| LOW | src/svg/svg_test.go | 21 | // padding these assertions are computed against isn't set here at all: it | COMMENT |
| LOW | src/svg/svg_test.go | 121 | opts := testOptions() | COMMENT |
| LOW | src/svg/svg_test.go | 141 | // segment's own background (the "cutout" a real terminal renders via SGR | COMMENT |
| LOW | src/svg/svg.go | 21 | // "accent" or the ansiColorCodes name "default", both of which resolve | COMMENT |
| LOW | src/svg/svg.go | 41 | // non-nil, so every reader downstream (windowFill in Encode, paintRun's | COMMENT |
| LOW | src/svg/svg.go | 61 | // defaultFontFamily), but the website renders these in Victor Mono, | COMMENT |
| LOW | src/svg/svg.go | 81 | // about 84% of that, and asymmetrically about the baseline. Filling the | COMMENT |
| LOW | src/svg/svg.go | 101 | // the reference PNGs always had. | COMMENT |
| LOW | src/svg/svg.go | 121 | // scale each icon down to exactly one cell of ink, which is also what a | COMMENT |
| LOW | src/svg/svg.go | 141 | // reports unitsPerEm 2048 and an 'M' advance of 1233 units, 1233/2048 = | COMMENT |
| LOW | src/svg/svg.go | 161 | // no rounding to do at all, and it would be flatly wrong for any other | COMMENT |
| LOW | src/svg/svg.go | 181 | // renderer's rounded pixels, is the correct default here too. | COMMENT |
| LOW | src/svg/svg.go | 261 | // textLength/lengthAdjust pinning it to exactly Cells*CellWidth, so it lands | COMMENT |
| LOW | src/svg/svg.go | 281 | // than anchoring to a rect edge via "hanging", because this package has no | COMMENT |
| LOW | src/svg/svg.go | 441 | COMMENT | |
| LOW | src/svg/svg.go | 561 | if bgResolved { | COMMENT |
| LOW | src/svg/colors.go | 81 | // Run — to RGB. "accent"/"default" resolve against opts exactly like a Run's | COMMENT |
| LOW | src/svg/colors.go | 101 | if !ok { | COMMENT |
| LOW | src/svg/colors.go | 121 | // drift away from again; it also trims surrounding whitespace, which the | COMMENT |
| LOW | src/svg/colors.go | 161 | // defaultForegroundRGB is the fixed fallback for the ansiColorCodes name | COMMENT |
| LOW | src/config/segment_data_test.go | 21 | // TestSegmentDataCoversRegistry asserts that every documented segment type (the live registry | COMMENT |
| LOW | src/config/segment_data_test.go | 61 | // (json.Unmarshal into a fresh writer, json.Marshal it back out, then diff key-for-key) rather | COMMENT |
| LOW | src/config/segment_registry_js.go | 1 | //go:build js && wasm | COMMENT |
| LOW | src/config/load_test.go | 141 | // two things for a bool field (Config.FinalSpace) and an int field | COMMENT |
| LOW | src/config/data.go | 21 | // alongside its writer data, so a recorded-but-disabled segment can be | COMMENT |
| LOW | src/config/load.go | 241 | if _, err := h.Write(data); err != nil { | COMMENT |
| LOW | src/config/fieldset.go | 61 | COMMENT | |
| LOW | src/config/segment.go | 81 | Needs []string `json:"-" toml:"-" yaml:"-"` | COMMENT |
| LOW | src/config/segment.go | 281 | }() | COMMENT |
| LOW | src/config/segment.go | 321 | // pre-check that proves a segment cannot possibly be enabled in the current | COMMENT |
| LOW | src/config/segment.go | 341 | COMMENT | |
| LOW | src/config/segment.go | 661 | // | COMMENT |
| LOW | src/shell/scripts/omp.zsh | 161 | # terminal like any background job ("[1] 12345"). Disabling MONITOR for the | COMMENT |
| LOW | src/color/gradient.go | 261 | // interpolation exactly, but returns each cell's true RGB triple instead of a | COMMENT |
| LOW | src/color/gradient.go | 341 | func rgbFromColorful(c colorful.Color) RGB { | COMMENT |
| LOW | src/color/shade.go | 81 | // the color argument can be resolved to a concrete color before Defaults.ToAnsi sees it. | COMMENT |
| 60 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | themes/schema.json | 655 | "placeholder": { | CODE |
| LOW | src/sqlite/sqlite_test.go | 24 | row, found, err := FindRow(data, "access_tokens", "account_id", "user@example.com") | CODE |
| LOW⚡ | src/sqlite/sqlite_test.go | 56 | _, _, err := FindRow(data, "does_not_exist", "account_id", "user@example.com") | CODE |
| LOW⚡ | src/sqlite/sqlite_test.go | 63 | _, _, err := FindRow(data, "access_tokens", "nope", "user@example.com") | CODE |
| LOW⚡ | src/sqlite/sqlite_test.go | 68 | _, _, err := FindRow([]byte("not a database"), "access_tokens", "account_id", "user@example.com") | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 88 | "placeholder": { | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 241 | "placeholder": { | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 373 | "placeholder": { | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 505 | "placeholder": { | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 637 | "placeholder": { | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 872 | "placeholder": { | CODE |
| LOW | src/cli/dsc/configuration.schema.json | 1031 | "placeholder": { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/agents/issue-analyzer.agent.md | 34 | ### Step 1: Precondition checks | COMMENT |
| LOW | .agents/agents/issue-analyzer.agent.md | 41 | ### Step 2: Fetch the issue | COMMENT |
| LOW | .agents/agents/issue-analyzer.agent.md | 56 | ### Step 3: Identify the affected codebase area | COMMENT |
| LOW | .agents/agents/issue-analyzer.agent.md | 78 | ### Step 4: Investigate like the code-changes triage path | COMMENT |
| LOW | .agents/agents/issue-analyzer.agent.md | 89 | ### Step 5: Synthesize findings | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CONTRIBUTING.md | 120 | [agentic]: https://github.com/JanDeDobbeleer/agentic | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/plugins/segments/index.js | 357 | function assertStaticAssetsMatchTotal(total) { | CODE |
| LOW | website/src/components/ConfigEditor/schemaCompletion.js | 145 | function findDeepestOpenYamlContainer(tree) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/static/install.sh | 105 | # Check if regular user has write permission | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/shell/scripts/omp.zsh | 704 | # Non-existent: just create it. | COMMENT |