AI Slop Code RIsk Monitor

CloakHQ/CloakBrowser

Stealth Chromium that passes every bot detection test. Drop-in Playwright replacement with source-level fingerprint patches. 30/30 tests passed.

34.1 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for CloakHQ/CloakBrowser, a Python project with 32,025 GitHub stars. SynthScan examined 69,781 lines of code across 216 source files, recording 1261 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 34.1 (High 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.

34.1
Adjusted Signal
34.1
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
32.0K
Stars
Python
Language
69.8K
Lines of Code
216
Files
1.3K
Pattern Hits
2026-10-12
Scan Date
0.66
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 37.5/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 710 finding(s).

Hallucinated Dependency & Supply Chain Risk 38.9/100 · MEDIUM

Are imports declared and package/API names verified? 194 finding(s).

Agent Over-Engineering Ratio 67.8/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 976 finding(s).

PR Review Velocity Impact 83.2/100 · CRITICAL

Which changes need focused human review? 1261 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 142MEDIUM 261LOW 858

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1261 distinct pattern matches across 18 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.

Decorative Section Separators249 hits · 798 pts
SeverityFileLineSnippetContext
MEDIUMjs/tests/license.test.ts46// ── resolveLicenseKey ─────────────────────────────────COMMENT
MEDIUMjs/tests/license.test.ts87// ── validateLicense ───────────────────────────────────COMMENT
MEDIUMjs/tests/license.test.ts283// ── getProLatestVersion ───────────────────────────────COMMENT
MEDIUMjs/tests/license.test.ts487// ── Config pro parameter ──────────────────────────────COMMENT
MEDIUMjs/tests/license.test.ts503// ── buildLaunchEnv ─────────────────────────────────────COMMENT
MEDIUMjs/tests/license.test.ts609// ── post-handshake denial: helpers + guard ─────────────COMMENT
MEDIUMjs/tests/license.test.ts877// ── getActiveSessionCount ─────────────────────────────COMMENT
MEDIUMjs/tests/license.test.ts941// ── getSessionSeats ───────────────────────────────────COMMENT
MEDIUMjs/tests/cli.test.ts119// ── formatSeats ───────────────────────────────────────COMMENT
MEDIUM⚡tests/test_geoip.py52# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py54# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py71# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py73# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py126# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py128# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py143# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py145# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py300# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py302# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py320# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_geoip.py322# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_geoip.py19# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_geoip.py21# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_persistent_context.py31# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_persistent_context.py33# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_persistent_context.py224# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_persistent_context.py226# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_persistent_context.py316# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_persistent_context.py324# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_humanize_unit.py39# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py41# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py44# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py46# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py61# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py63# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py112# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py114# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py183# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py185# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py188# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py190# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py193# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py195# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py198# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py200# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py203# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py205# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py208# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py210# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py213# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py215# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py229# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py231# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py255# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py257# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py260# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py262# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py359# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py361# =========================================================================COMMENT
MEDIUM⚡tests/test_humanize_unit.py676# =========================================================================COMMENT
189 more matches not shown…
Cross-Language Confusion108 hits · 612 pts
SeverityFileLineSnippetContext
HIGHtests/test_launch.py85 """window.chrome should exist (Playwright leaks undefined)."""STRING
HIGHtests/test_stealth_reproduction_110.py37 window.__detections.evaluateQS.push(sel);CODE
HIGHtests/test_stealth_reproduction_110.py46 window.__detections.untrustedKeydown.push(e.key);CODE
HIGHtests/test_stealth_reproduction_110.py146 window.__evalLeaks.push(sel);CODE
HIGH⚡tests/test_stealth_unit.py580 if (e.stack && e.stack.includes(':302:')) {CODE
HIGH⚡tests/test_stealth_unit.py581 window.__evalLeaks.push(sel);CODE
HIGH⚡tests/test_stealth_unit.py590 window.__untrustedKeys.push(e.key);CODE
HIGHtests/test_stealth_unit.py415 if (e.stack && e.stack.includes(':302:')) {CODE
HIGHtests/test_stealth_unit.py416 window.__evaluateDetections.push(sel);CODE
HIGHtests/test_stealth_unit.py459 window.__untrustedKeys.push(e.key);CODE
HIGHtests/test_stealth_unit.py461 window.__trustedKeys.push(e.key);CODE
HIGHtests/test_stealth_unit.py534 if (e.stack && e.stack.includes(':302:')) {CODE
HIGHtests/test_stealth_unit.py535 window.__evalLeaks.push({sel, stack: e.stack.substring(0, 200)});CODE
HIGHtests/test_stealth_unit.py643 if (e.stack && e.stack.includes(':302:')) {CODE
HIGHtests/test_stealth_unit.py644 window.__evalLeaks.push(sel);CODE
HIGHtests/test_stealth_unit.py679 if (!e.isTrusted) window.__untrusted.push(e.key);CODE
HIGH⚡tests/test_humanize_engine.py105 if (!el || el === document) return 'document';CODE
HIGH⚡tests/test_humanize_engine.py113 if ('detail' in e && type !== 'focus') rec.detail = e.detail;CODE
HIGH⚡tests/test_humanize_engine.py120 log.push(rec);CODE
HIGH⚡tests/test_humanize_engine.py124 log.push({ t: 'scroll', ts: performance.now(), sx: scrollX, sy: scrollY });CODE
HIGH⚡tests/test_humanize_engine.py233 if (!el || el === document) return 'document';CODE
HIGH⚡tests/test_humanize_engine.py241 if ('detail' in e && type !== 'focus') rec.detail = e.detail;CODE
HIGH⚡tests/test_humanize_engine.py248 log.push(rec);CODE
HIGH⚡tests/test_humanize_engine.py252 log.push({ t: 'scroll', ts: performance.now(), sx: scrollX, sy: scrollY });CODE
HIGH⚡tests/test_humanize_engine.py491 " e => __kd.push(e.target.id + ':' + e.key)); }")CODE
HIGH⚡tests/test_humanize_engine.py520 window.__clicks = []; document.addEventListener('click', e => { __clicks.push(e.target.id); e.preventDefault(); CODE
HIGH⚡tests/test_humanize_engine.py560 document.addEventListener('dragstart', e => __dt.push(e.dataTransfer instanceof DataTransfer)); }""")CODE
HIGH⚡tests/test_humanize_engine.py570 page.evaluate("() => { window.__keys = []; document.addEventListener('keydown', e => __keys.push(e.key)); }")CODE
HIGHtests/test_humanize_engine.py61 const note = (probe, detail) => hits.push({ probe, detail: String(detail ?? '') });CODE
HIGHtests/test_humanize_engine.py65 if (name === 'contenteditable') note('getAttribute(contenteditable)', this.id || this.tagName);CODE
HIGHtests/test_humanize_engine.py189 const note = (probe, detail) => hits.push({ probe, detail: String(detail ?? '') });CODE
HIGHtests/test_humanize_engine.py193 if (name === 'contenteditable') note('getAttribute(contenteditable)', this.id || this.tagName);CODE
HIGHtests/test_humanize_engine.py699 window.__sel = []; for (const t of ['input', 'change']) s.addEventListener(t, () => __sel.push(t));CODE
HIGH⚡tests/test_license.py544 """Leaseless mode on the server → {"active": null}, never a false 0."""STRING
HIGH⚡tests/test_stealth.py49 """window.chrome must be an object (not undefined)."""STRING
HIGHtests/test_stealth.py106 failed.push(cells[0].innerText.trim());CODE
HIGHtests/test_stealth.py167 const isBot = botMatch ? botMatch[1] === 'true' : null;CODE
HIGHtests/test_stealth.py215 return {score: scoreMatch ? parseFloat(scoreMatch[1]) : null};CODE
HIGHtests/test_stealth_dom_browser.py11 window.__clicked.push(el ? el.id : null);CODE
HIGHtests/test_stealth_dom_browser.py11 window.__clicked.push(el ? el.id : null);CODE
HIGH⚡cloakbrowser/human/world.py79 if (Math.abs(b.left - x) < 0.6 && Math.abs(b.top - y) < 0.6 &&CODE
HIGH⚡cloakbrowser/human/world.py80 Math.abs(b.width - w) < 0.6 && Math.abs(b.height - h) < 0.6) out.push(e);CODE
HIGH⚡cloakbrowser/human/world.py80 Math.abs(b.width - w) < 0.6 && Math.abs(b.height - h) < 0.6) out.push(e);CODE
HIGH⚡cloakbrowser/human/world.py141 catch (err) { return { error: err && err.message ? err.message : String(err) }; }CODE
HIGH⚡cloakbrowser/human/world.py145 if (!a || a === document.body) return { tag: null };CODE
HIGH⚡cloakbrowser/human/world.py145 if (!a || a === document.body) return { tag: null };CODE
HIGH⚡cloakbrowser/human/world.py146 return { tag: a.nodeName.toLowerCase(), type: a.nodeName === 'INPUT' ? String(a.type).toLowerCase() : null,CODE
HIGH⚡cloakbrowser/human/world.py154 if (r === undefined) return null;CODE
HIGH⚡cloakbrowser/human/world.py164 return null;CODE
HIGH⚡cloakbrowser/human/world.py173 return { checked: r === true, radio: !!t && t.nodeName === 'INPUT' && t.type === 'radio' };CODE
HIGH⚡cloakbrowser/human/world.py179 if (!e.isConnected) return null;CODE
HIGH⚡cloakbrowser/human/world.py189 const top = document.scrollingElement || document.documentElement;CODE
HIGH⚡cloakbrowser/human/world.py190 for (let p = parentOrHost(e); p && p !== top && p !== document.body; p = parentOrHost(p)) {CODE
HIGH⚡cloakbrowser/human/world.py197 if ((sy && (b.top < y || b.bottom > y + h)) || (sx && (b.left < x || b.right > x + w)))CODE
HIGH⚡cloakbrowser/human/world.py200 return null;CODE
HIGH⚡cloakbrowser/human/world.py203 const e = document.scrollingElement || document.documentElement;CODE
HIGH⚡cloakbrowser/human/world.py205 const rtl = getComputedStyle(document.body || e).direction === 'rtl';CODE
HIGH⚡cloakbrowser/human/world.py238 const lbl = (l) => l === o.label || norm(l) === norm(o.label);CODE
HIGH⚡cloakbrowser/human/world.py240 if (w.valueOrLabel !== undefined) ok = ok && (w.valueOrLabel === o.value || lbl(w.valueOrLabel));CODE
HIGH⚡cloakbrowser/human/world.py240 if (w.valueOrLabel !== undefined) ok = ok && (w.valueOrLabel === o.value || lbl(w.valueOrLabel));CODE
48 more matches not shown…
Hyper-Verbose Identifiers613 hits · 542 pts
SeverityFileLineSnippetContext
LOWjs/src/license.ts345export function resolveLicenseKeyWithSource(CODE
LOWjs/src/download.ts349export function resetPreviewFallbackWarned(): void {CODE
LOWjs/src/download.ts1255export function resetWrapperUpdateChecked(): void {CODE
LOWjs/src/proxy.ts76function lenientDecodeURIComponent(s: string): string {CODE
LOWjs/src/config.ts75export function normalizeRequestedVersion(version?: string): string | undefined {CODE
LOWjs/src/config.ts279export function binarySupportsHeadlessNoViewport(CODE
LOWjs/src/config.ts326export function binarySupportsMaximizedWindow(CODE
LOWjs/src/config.ts366export function binarySupportsHttpProxyInlineAuth(CODE
LOWtests/test_font_warning.py43def test_warns_when_no_windows_fonts(tmp_path, capsys, monkeypatch):CODE
LOWtests/test_font_warning.py55def test_in_process_flag_blocks_second_call(tmp_path, capsys):CODE
LOWtests/test_font_warning.py68def test_marker_suppresses_across_processes(tmp_path, capsys):CODE
LOWtests/test_font_warning.py80def test_env_suppresses_and_writes_no_marker(tmp_path, capsys, monkeypatch):CODE
LOW⚡tests/test_font_warning.py92def test_no_warn_on_non_linux(tmp_path, capsys):CODE
LOW⚡tests/test_font_warning.py101def test_no_warn_when_platform_overridden(tmp_path, capsys):CODE
LOW⚡tests/test_font_warning.py110def test_no_warn_no_crash_when_fc_list_absent(tmp_path, capsys):CODE
LOWtests/test_font_warning.py121def test_no_warn_when_full_set_present(tmp_path, capsys):CODE
LOWtests/test_font_warning.py131def test_warns_on_partial_set(tmp_path, capsys):CODE
LOWtests/test_profile_seed.py35def test_first_launch_writes_seed_and_second_reuses(tmp_path):CODE
LOWtests/test_profile_seed.py49async def test_async_launch_uses_stored_seed(tmp_path):CODE
LOWtests/test_profile_seed.py67def test_explicit_fingerprint_wins_and_file_untouched(tmp_path, flag):CODE
LOW⚡tests/test_profile_seed.py78def test_stealth_args_false_writes_nothing(tmp_path):CODE
LOW⚡tests/test_profile_seed.py86def test_non_persistent_launch_stays_random(tmp_path, monkeypatch):CODE
LOW⚡tests/test_profile_seed.py96def test_corrupt_file_logs_and_regenerates(tmp_path, caplog, content):CODE
LOW⚡tests/test_profile_seed.py107def test_python_file_format_is_cross_wrapper(tmp_path):CODE
LOW⚡tests/test_profile_seed.py115def test_empty_user_data_dir_is_ignored():CODE
LOW⚡tests/test_profile_seed.py119def test_concurrent_first_launches_agree(tmp_path):CODE
LOWtests/test_profile_seed.py135def test_no_hard_link_support_falls_back_to_exclusive_create(tmp_path):CODE
LOW⚡tests/test_geoip.py57def test_locale_map_has_common_countries():CODE
LOW⚡tests/test_geoip.py76def test_default_geoip_timeout_is_twenty_seconds():CODE
LOW⚡tests/test_geoip.py131def test_resolve_exit_ip_no_proxy_fetches_directly():CODE
LOW⚡tests/test_geoip.py148def test_maybe_resolve_skips_when_geoip_false():CODE
LOW⚡tests/test_geoip.py155def test_maybe_resolve_no_proxy_uses_machine_ip():CODE
LOW⚡tests/test_geoip.py185def test_maybe_resolve_skips_when_both_explicit():CODE
LOW⚡tests/test_geoip.py194def test_maybe_resolve_fills_missing_timezone():CODE
LOW⚡tests/test_geoip.py202def test_maybe_resolve_fills_missing_locale():CODE
LOW⚡tests/test_geoip.py210def test_maybe_resolve_fills_both():CODE
LOW⚡tests/test_geoip.py219def test_maybe_resolve_raw_timezone_flag_wins_over_geoip():CODE
LOW⚡tests/test_geoip.py290def test_maybe_resolve_geoip_rejects_incomplete_result():CODE
LOW⚡tests/test_geoip.py325def test_download_overwrites_existing_db(tmp_path):CODE
LOWtests/test_geoip.py92def test_resolve_geo_raises_when_exit_ip_missing():CODE
LOWtests/test_geoip.py103def test_resolve_geo_raises_when_db_missing():CODE
LOWtests/test_geoip.py114def test_resolve_geo_raises_when_lookup_fails():CODE
LOWtests/test_geoip.py169def test_maybe_resolve_no_proxy_both_explicit_skips_ip():CODE
LOWtests/test_geoip.py234def test_maybe_resolve_raw_lang_flag_wins_over_geoip():CODE
LOWtests/test_geoip.py247def test_maybe_resolve_raw_flags_both_skip_geo_lookup():CODE
LOWtests/test_geoip.py262def test_maybe_resolve_param_beats_raw_flag():CODE
LOWtests/test_geoip.py276def test_maybe_resolve_geoip_timeout_aborts_launch(monkeypatch):CODE
LOWtests/test_geoip.py356def test_ensure_db_downloads_once_under_concurrency(tmp_path):CODE
LOWtests/test_launch.py17def test_removed_backend_kwarg_raises(env, monkeypatch):CODE
LOWtests/test_launch.py65def test_launch_with_extra_args():CODE
LOWtests/test_launch.py84def test_chrome_object_exists():CODE
LOWtests/test_resolver_sources_match.py26def test_world_helpers_are_byte_identical():CODE
LOW⚡tests/test_persistent_context.py21def _make_mock_pw_and_context():CODE
LOW⚡tests/test_persistent_context.py38def test_persistent_context_args_built(_mock_geoip, _mock_bin):CODE
LOW⚡tests/test_persistent_context.py229def _make_mock_async_pw_and_context():CODE
LOW⚡tests/test_persistent_context.py329def test_persistent_context_humanizes_before_the_license_guard(_mock_geoip, _mock_bin):CODE
LOWtests/test_persistent_context.py54def test_persistent_context_default_viewport(_mock_geoip, _mock_bin):CODE
LOWtests/test_persistent_context.py68def test_persistent_context_headed_no_viewport(_mock_geoip, _mock_bin):CODE
LOWtests/test_persistent_context.py84def test_persistent_context_custom_viewport(_mock_geoip, _mock_bin):CODE
LOWtests/test_persistent_context.py99def test_persistent_context_user_agent(_mock_geoip, _mock_bin):CODE
553 more matches not shown…
Empty Error Handlers33 hits · 160 pts
SeverityFileLineSnippetContext
HIGHtests/test_human_visual.py53except:CODE
HIGHtests/test_stealth.py189except Exception:CODE
HIGHcloakbrowser/config.py90except FileNotFoundError:CODE
HIGHcloakbrowser/config.py131except FileExistsError:CODE
HIGHcloakbrowser/config.py346except (ValueError, OSError):CODE
HIGHcloakbrowser/config.py360except (ValueError, OSError):CODE
HIGHcloakbrowser/config.py140except FileExistsError:CODE
HIGHcloakbrowser/download.py136except Exception:CODE
HIGHcloakbrowser/download.py190except OSError:CODE
HIGHcloakbrowser/download.py533except OSError:CODE
HIGHcloakbrowser/download.py1197except (ValueError, OSError):CODE
HIGHcloakbrowser/download.py496except OSError:CODE
HIGHcloakbrowser/browser.py1661except Exception:CODE
HIGHcloakbrowser/browser.py1654except Exception:CODE
HIGHcloakbrowser/browser.py1659except OSError:CODE
HIGHcloakbrowser/browser.py1142except BaseException:CODE
HIGHcloakbrowser/geoip.py167except OSError:CODE
HIGHcloakbrowser/geoip.py172except OSError:CODE
HIGHcloakbrowser/license.py227except OSError:CODE
HIGHcloakbrowser/license.py287except OSError:CODE
HIGHcloakbrowser/license.py203except OSError:CODE
HIGHcloakbrowser/license.py454except (OSError, ValueError, TypeError):CODE
HIGHcloakbrowser/license.py550except Exception:CODE
HIGHcloakbrowser/license.py225except OSError:CODE
HIGHcloakbrowser/license.py510except OSError:CODE
HIGHcloakbrowser/license.py612except (ValueError, TypeError):CODE
HIGHcloakbrowser/license.py507except (OSError, ValueError, TypeError):CODE
HIGHcloakbrowser/__main__.py597except OSError:CODE
HIGHcloakbrowser/__main__.py608except Exception:CODE
HIGHcloakbrowser/human/patch.py415except Exception: # e.g. called from an event handler; done lazilyCODE
HIGHcloakbrowser/human/world.py587except Error:CODE
HIGHcloakbrowser/human/world.py349except Exception: # pragma: no cover - emitter missing in mocksCODE
HIGHexamples/integrations/aws_lambda/lambda_handler.py302except Exception:CODE
Excessive Try-Catch Wrapping69 hits · 71 pts
SeverityFileLineSnippetContext
LOWbin/fetch-widevine.py299 except Exception as e: # noqa: BLE001 — top-level guard; entrypoint treats nonzero as soft-failCODE
LOWtests/test_stealth.py189 except Exception:CODE
MEDIUMtests/test_extract.py246def run_caller():CODE
MEDIUMtests/test_extract.py309def run_caller():CODE
LOWtests/test_extract.py249 except Exception as err:CODE
LOWtests/test_extract.py312 except Exception as err:CODE
LOW⚡cloakbrowser/download.py771 except Exception as exc:CODE
LOW⚡cloakbrowser/download.py779 except Exception:CODE
LOW⚡cloakbrowser/download.py787 except Exception:CODE
LOWcloakbrowser/download.py136 except Exception:CODE
LOWcloakbrowser/download.py257 except Exception as e:CODE
LOWcloakbrowser/download.py373 except Exception as primary_err:CODE
LOWcloakbrowser/download.py513 except Exception:CODE
LOWcloakbrowser/download.py604 except Exception as exc:CODE
LOWcloakbrowser/download.py753 except Exception:CODE
LOWcloakbrowser/download.py815 except Exception:CODE
LOWcloakbrowser/download.py1054 except Exception:CODE
LOWcloakbrowser/download.py1219 except Exception:CODE
LOWcloakbrowser/download.py1280 except Exception:CODE
LOWcloakbrowser/download.py1315 except Exception:CODE
MEDIUMcloakbrowser/browser.py1011def _close_context_with_cleanup() -> None:CODE
LOWcloakbrowser/browser.py117 except Exception:CODE
LOWcloakbrowser/browser.py146 except Exception as exc:CODE
LOWcloakbrowser/browser.py188 except Exception as exc:CODE
LOWcloakbrowser/browser.py402 except Exception as exc:CODE
LOWcloakbrowser/browser.py406 except Exception as stop_exc:CODE
LOWcloakbrowser/browser.py535 except Exception as exc:CODE
LOWcloakbrowser/browser.py539 except Exception as stop_exc:CODE
LOWcloakbrowser/browser.py701 except Exception as exc:CODE
LOWcloakbrowser/browser.py705 except Exception as stop_exc:CODE
LOWcloakbrowser/browser.py872 except Exception as exc:CODE
LOWcloakbrowser/browser.py876 except Exception as stop_exc:CODE
LOWcloakbrowser/browser.py1004 except Exception:CODE
LOWcloakbrowser/browser.py1391 except Exception:CODE
LOWcloakbrowser/browser.py1654 except Exception:CODE
LOWcloakbrowser/browser.py1661 except Exception:CODE
LOW⚡cloakbrowser/geoip.py147 except Exception as exc:CODE
LOWcloakbrowser/geoip.py182 except Exception as exc:CODE
LOW⚡cloakbrowser/geoip.py280 except Exception:CODE
LOWcloakbrowser/geoip.py313 except Exception as exc:CODE
LOWcloakbrowser/geoip.py347 except Exception:CODE
LOWcloakbrowser/geoip.py367 except Exception:CODE
LOWcloakbrowser/widevine.py122 except Exception:CODE
LOWcloakbrowser/widevine.py127 except Exception as e:CODE
LOWcloakbrowser/license.py422 except Exception as e:CODE
LOWcloakbrowser/license.py492 except Exception as e:CODE
LOWcloakbrowser/license.py538 except Exception as e:CODE
LOWcloakbrowser/license.py550 except Exception:CODE
LOWcloakbrowser/license.py558 except Exception as e:CODE
LOWcloakbrowser/__main__.py139 except Exception as exc:CODE
LOWcloakbrowser/__main__.py284 except Exception as exc:CODE
LOWcloakbrowser/__main__.py289 except Exception as exc: # platform unsupported, etc.CODE
LOWcloakbrowser/__main__.py351 except Exception as exc: # network/proxy failure — never crash `info`CODE
LOWcloakbrowser/__main__.py608 except Exception:CODE
LOWcloakbrowser/__main__.py740 except Exception as e:CODE
MEDIUMcloakbrowser/__main__.py741 print(f"Error: {e}", file=sys.stderr)CODE
LOWcloakbrowser/human/patch.py415 except Exception: # e.g. called from an event handler; done lazilyCODE
LOWcloakbrowser/human/world.py349 except Exception: # pragma: no cover - emitter missing in mocksCODE
LOWexamples/stealth_test.py253 except Exception:CODE
LOWexamples/stealth_test.py261 except Exception:CODE
9 more matches not shown…
Unused Imports82 hits · 70 pts
SeverityFileLineSnippetContext
LOWtests/test_resolver_sources_match.py10CODE
LOWtests/test_stealth_unit.py16CODE
LOWtests/test_stealth_unit.py17CODE
LOWtests/test_stealth_unit.py19CODE
LOWtests/test_stealth_unit.py22CODE
LOWtests/test_stealth_unit.py22CODE
LOWtests/test_stealth_unit.py22CODE
LOWtests/test_humanize_engine.py10CODE
LOWtests/test_update.py3CODE
LOWtests/test_extract.py8CODE
LOWtests/test_lambda_security.py3CODE
LOWtests/test_lambda_security.py7CODE
LOWcloakbrowser/config.py3CODE
LOWcloakbrowser/download.py7CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py14CODE
LOWcloakbrowser/__init__.py15CODE
LOWcloakbrowser/__init__.py15CODE
LOWcloakbrowser/__init__.py16CODE
LOWcloakbrowser/__init__.py16CODE
LOWcloakbrowser/__init__.py16CODE
LOWcloakbrowser/__init__.py16CODE
LOWcloakbrowser/__init__.py17CODE
LOWcloakbrowser/__init__.py17CODE
LOWcloakbrowser/__init__.py17CODE
LOWcloakbrowser/__init__.py18CODE
LOWcloakbrowser/browser.py15CODE
LOWcloakbrowser/geoip.py11CODE
LOWcloakbrowser/widevine.py23CODE
LOWcloakbrowser/license.py7CODE
LOWcloakbrowser/__main__.py11CODE
LOWcloakbrowser/human/patch.py21CODE
LOWcloakbrowser/human/world.py17CODE
LOWcloakbrowser/human/config.py7CODE
LOWcloakbrowser/human/config.py9CODE
LOWcloakbrowser/human/config.py12CODE
LOWcloakbrowser/human/fields.py15CODE
LOWcloakbrowser/human/__init__.py19CODE
LOWcloakbrowser/human/__init__.py21CODE
LOWcloakbrowser/human/__init__.py21CODE
LOWcloakbrowser/human/__init__.py21CODE
LOWcloakbrowser/human/__init__.py21CODE
LOWcloakbrowser/human/__init__.py22CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
LOWcloakbrowser/human/__init__.py23CODE
22 more matches not shown…
Over-Commented Block49 hits · 47 pts
SeverityFileLineSnippetContext
LOWbin/docker-entrypoint.sh1#!/bin/bashCOMMENT
LOWbin/docker-entrypoint.sh21doneCOMMENT
LOWjs/src/fonts.ts1// ---------------------------------------------------------------------------COMMENT
LOWjs/src/download.ts41// Seconds, matching the Python/.NET `.last_update_check` marker format so theCOMMENT
LOWjs/src/config.ts41// ---------------------------------------------------------------------------COMMENT
LOWjs/src/config.ts401}COMMENT
LOWtests/test_humanize_unit.py181COMMENT
LOWcloakbrowser/config.py41# ---------------------------------------------------------------------------COMMENT
LOWcloakbrowser/config.py461 version = get_effective_version(pro=pro, release_channel=release_channel)COMMENT
LOWcloakbrowser/browser.py1501 seen["--start-maximized"] = "--start-maximized"COMMENT
LOWdotnet/tests/CloakBrowser.Tests/ViewportTests.cs1using CloakBrowser;COMMENT
LOW…loakBrowser.Tests/Wrappers/GeneratorDelegationTests.cs141 Assert.NotNull(wrapper.GetProperty("Original"));COMMENT
LOWdotnet/src/CloakBrowser/ViewportDefaults.cs1using Microsoft.Playwright;COMMENT
LOWdotnet/src/CloakBrowser/Download.cs21/// <summary>COMMENT
LOWdotnet/src/CloakBrowser/Download.cs141COMMENT
LOWdotnet/src/CloakBrowser/Download.cs201 /// CloakBrowser Pro license key. Also read from the <c>CLOAKBROWSER_LICENSE_KEY</c>COMMENT
LOWdotnet/src/CloakBrowser/Download.cs681 ///COMMENT
LOWdotnet/src/CloakBrowser/Download.cs1161 CloakLog.Info("Cache cleared: {0}", cacheDir);COMMENT
LOWdotnet/src/CloakBrowser/Handles.cs61 Browser = (IBrowser)LicenseGuard.Wrap(visible, denialPath);COMMENT
LOWdotnet/src/CloakBrowser/Handles.cs81 public Task<IBrowserContext> NewContextAsync(BrowserNewContextOptions? options = null) =>COMMENT
LOWdotnet/src/CloakBrowser/Handles.cs121/// A denial that lands after Playwright connected kills the browser without a launchCOMMENT
LOWdotnet/src/CloakBrowser/Config.cs41 "MKFKwIhUcKWq5xTuNA0Ovg99njcDEcEJvmWYYhApvaU=",COMMENT
LOWdotnet/src/CloakBrowser/Config.cs521 NormalizeReleaseChannel(releaseChannel) == "preview"COMMENT
LOWdotnet/src/CloakBrowser/Config.cs621 };COMMENT
LOWdotnet/src/CloakBrowser/CloakLauncher.cs601 }COMMENT
LOWdotnet/src/CloakBrowser/Widevine.cs1using System.Runtime.InteropServices;COMMENT
LOWdotnet/src/CloakBrowser/LaunchOptions.cs41 /// <summary>Chrome extension paths to load.</summary>COMMENT
LOWdotnet/src/CloakBrowser/LaunchOptions.cs61 /// Binary release channel (<c>stable</c> or <c>preview</c>). Also read from theCOMMENT
LOWdotnet/src/CloakBrowser/License.cs1using System.Security.Cryptography;COMMENT
LOWdotnet/src/CloakBrowser/License.cs21/// <list type="bullet">COMMENT
LOWdotnet/src/CloakBrowser/License.cs41public sealed record ProReleaseInfo(COMMENT
LOWdotnet/src/CloakBrowser/License.cs61internal enum LicenseKeySourceCOMMENT
LOWdotnet/src/CloakBrowser/License.cs121 /// message when the browser process exited with a known license exit code, elseCOMMENT
LOWdotnet/src/CloakBrowser/License.cs161 /// Maps a raw license exit code (76-79) to a <see cref="CloakBrowserLicenseError"/>,COMMENT
LOWdotnet/src/CloakBrowser/License.cs361 /// <list type="bullet">COMMENT
LOWdotnet/src/CloakBrowser/License.cs641 }COMMENT
LOWdotnet/src/CloakBrowser/Wrappers/Humanize.cs1using System.Collections.Generic;COMMENT
LOW…et/src/CloakBrowser/Wrappers/HumanizedElementHandle.cs1using CloakBrowser.Human;COMMENT
LOWdotnet/src/CloakBrowser/Wrappers/HumanizedLocator.cs1using System.Text.RegularExpressions;COMMENT
LOWdotnet/src/CloakBrowser/Human/HumanPage.cs21/// <summary>COMMENT
LOWdotnet/src/CloakBrowser/Human/InjectedSource.cs1using System.Text;COMMENT
LOWdotnet/src/CloakBrowser/Human/Actionability.cs101// ---------------------------------------------------------------------------COMMENT
LOWdotnet/src/CloakBrowser/Human/HumanRandom.cs1namespace CloakBrowser.Human;COMMENT
LOWdotnet/src/CloakBrowser/Human/HumanKeyboard.cs101 char lower = char.ToLowerInvariant(ch);COMMENT
LOWdotnet/src/CloakBrowser/Human/HumanScroll.cs1namespace CloakBrowser.Human;COMMENT
LOWdotnet/src/CloakBrowser/Human/HumanScroll.cs21 /// <summary>COMMENT
LOWdotnet/src/CloakBrowser.Cli/Program.cs1using System.Diagnostics;COMMENT
LOWexamples/integrations/agent_browser.sh1#!/bin/bashCOMMENT
LOWexamples/integrations/aws_lambda/lambda-entrypoint.sh1#!/bin/shCOMMENT
Deep Nesting23 hits · 18 pts
SeverityFileLineSnippetContext
LOWbin/fetch-widevine.py74CODE
LOWtests/test_geoip.py92CODE
LOWtests/test_geoip.py103CODE
LOWtests/test_geoip.py114CODE
LOWtests/test_humanize_engine.py661CODE
LOWtests/test_update.py505CODE
LOWtests/test_update.py587CODE
LOWtests/test_lambda_security.py131CODE
LOWcloakbrowser/config.py103CODE
LOWcloakbrowser/config.py313CODE
LOWcloakbrowser/download.py862CODE
LOWcloakbrowser/download.py906CODE
LOWcloakbrowser/download.py1202CODE
LOWcloakbrowser/geoip.py318CODE
LOWcloakbrowser/license.py217CODE
LOWcloakbrowser/license.py433CODE
LOWcloakbrowser/license.py585CODE
LOWcloakbrowser/__main__.py148CODE
LOWcloakbrowser/__main__.py398CODE
LOWcloakbrowser/human/engine.py448CODE
LOWcloakbrowser/human/engine.py804CODE
LOWcloakbrowser/human/injected.py46CODE
LOWexamples/fingerprint_scan_test.py89CODE
Verbosity Indicators5 hits · 11 pts
SeverityFileLineSnippetContext
LOW⚡examples/integrations/browser_use_example.py18 # Step 1: Launch CloakBrowser (handles binary, stealth args, fingerprints)COMMENT
LOW⚡examples/integrations/browser_use_example.py24 # Step 2: Connect browser-use to the stealth browser via CDPCOMMENT
LOW⚡examples/integrations/browser_use_example.py27 # Step 3: Run your AI agent — it browses through CloakBrowserCOMMENT
LOW⚡examples/integrations/crawl4ai_example.py17 # Step 1: Launch CloakBrowser with remote debuggingCOMMENT
LOW⚡examples/integrations/crawl4ai_example.py23 # Step 2: Connect Crawl4AI to the stealth browser via CDPCOMMENT
Structural Annotation Overuse5 hits · 11 pts
SeverityFileLineSnippetContext
LOW⚡examples/integrations/browser_use_example.py18 # Step 1: Launch CloakBrowser (handles binary, stealth args, fingerprints)COMMENT
LOW⚡examples/integrations/browser_use_example.py24 # Step 2: Connect browser-use to the stealth browser via CDPCOMMENT
LOW⚡examples/integrations/browser_use_example.py27 # Step 3: Run your AI agent — it browses through CloakBrowserCOMMENT
LOW⚡examples/integrations/crawl4ai_example.py17 # Step 1: Launch CloakBrowser with remote debuggingCOMMENT
LOW⚡examples/integrations/crawl4ai_example.py23 # Step 2: Connect Crawl4AI to the stealth browser via CDPCOMMENT
Self-Referential Comments3 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_update.py455 # Create the binary dir so it looks already downloadedCOMMENT
MEDIUMtests/test_update.py494 # Create a fake cached binaryCOMMENT
MEDIUM⚡tests/test_license.py710 # Create the binary so effective version returns itCOMMENT
Modern Structural Boilerplate6 hits · 6 pts
SeverityFileLineSnippetContext
LOWcloakbrowser/__init__.py32__all__ = [CODE
LOWcloakbrowser/__main__.py49def _setup_logging() -> None:CODE
LOWcloakbrowser/human/patch.py203 async def set_checked(h: Human, impl: Any, a: dict) -> None:CODE
LOWcloakbrowser/human/__init__.py40__all__ = [CODE
LOWcloakbrowser/human/engine.py782 async def set_checked(self, target: Target, checked: bool, opts: dict, api: str) -> None:CODE
LOWcloakbrowser/human/errors.py81__all__ = [CODE
AI Slop Vocabulary3 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMcloakbrowser/browser.py1460 # feature set matches a stock browser rather than a test harness. Merged into anyCOMMENT
MEDIUMexamples/fingerprint_scan_test.py90 """abrahamjuliot.github.io/creepjs — comprehensive fingerprint analysis."""STRING
MEDIUMexamples/stealth_test.py53 """bot.incolumitas.com — comprehensive 30+ check bot detection."""STRING
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHcloakbrowser/human/config.py179Resolve a preset name + optional overrides into a full HumanConfig. Args: preset: 'default' or 'careful'. STRING
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOWREADME.md610page.locator("#email").fill("user@example.com") # per-character timing, thinking pausesCODE
LOWREADME.md1401 page.type("#email", "user@example.com", delay=50)CODE
LOWjs/README.md330 await page.type('#email', 'user@example.com', { delay: 50 });CODE
LOWjs/src/puppeteer.ts183 * await page.type('#email', 'user@example.com'); // Per-character timingCOMMENT
AI Structural Patterns6 hits · 3 pts
SeverityFileLineSnippetContext
LOWcloakbrowser/browser.py320CODE
LOWcloakbrowser/browser.py456CODE
LOWcloakbrowser/browser.py584CODE
LOWcloakbrowser/browser.py753CODE
LOWcloakbrowser/browser.py922CODE
LOWcloakbrowser/browser.py1035CODE
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMexamples/integrations/aws_lambda/INSTRUCTIONS.md113### Retry orchestrationCOMMENT
Redundant / Tautological Comments1 hit · 0 pts
SeverityFileLineSnippetContext
LOWtests/test_stealth_unit.py429 # Check if any querySelector calls came from evaluate contextSTRING