AI Slop Code Risk Monitor

tw93/Mole

SlopCodeMonitor badge for tw93/Mole Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

🐹 Keep your Mac and PC clean, light, and running like new. Fast open-source CLI, plus native Mac and Windows apps.

4.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for tw93/Mole, a Shell project with 73,404 GitHub stars. SynthScan examined 103,087 lines of code across 240 source files, recording 224 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 4.0 (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.

4.0
Adjusted Signal
4.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
73.4K
Stars
Shell
Language
103.1K
Lines of Code
240
Files
224
Pattern Hits
2026-10-31
Scan Date
0.03
HC Hit Rate

Risk Review · Payload v1

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.

Cognitive Ownership Risk 8.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.4/100 · LOW

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

Agent Over-Engineering Ratio 9.7/100 · LOW

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

PR Review Velocity Impact 17.5/100 · LOW

Which changes need focused human review? 224 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 6MEDIUM 71LOW 147

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 224 distinct pattern matches across 13 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 Separators64 hits · 189 pts
SeverityFileLineSnippetContext
MEDIUMscripts/setup-quick-launchers.sh73# ──────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/setup-quick-launchers.sh75# ──────────────────────────────────────────────────────────COMMENT
MEDIUM⚡lib/core/base.sh1812# ============================================================================COMMENT
MEDIUM⚡lib/core/base.sh1814# ============================================================================COMMENT
MEDIUMlib/core/base.sh20# ============================================================================COMMENT
MEDIUMlib/core/base.sh32# ============================================================================COMMENT
MEDIUMlib/core/base.sh103# ============================================================================COMMENT
MEDIUMlib/core/base.sh105# ============================================================================COMMENT
MEDIUMlib/core/base.sh121# ============================================================================COMMENT
MEDIUMlib/core/base.sh123# ============================================================================COMMENT
MEDIUMlib/core/base.sh151# ============================================================================COMMENT
MEDIUMlib/core/base.sh153# ============================================================================COMMENT
MEDIUMlib/core/base.sh168# ============================================================================COMMENT
MEDIUMlib/core/base.sh170# ============================================================================COMMENT
MEDIUMlib/core/base.sh555# ============================================================================COMMENT
MEDIUMlib/core/base.sh557# ============================================================================COMMENT
MEDIUMlib/core/base.sh648# ============================================================================COMMENT
MEDIUMlib/core/base.sh650# ============================================================================COMMENT
MEDIUMlib/core/base.sh872# ============================================================================COMMENT
MEDIUMlib/core/base.sh874# ============================================================================COMMENT
MEDIUMlib/core/base.sh1050# ============================================================================COMMENT
MEDIUMlib/core/base.sh1052# ============================================================================COMMENT
MEDIUMlib/core/base.sh1255# ============================================================================COMMENT
MEDIUMlib/core/base.sh1257# ============================================================================COMMENT
MEDIUMlib/core/base.sh1650# ============================================================================COMMENT
MEDIUMlib/core/base.sh1652# ============================================================================COMMENT
MEDIUMlib/core/log.sh20# ============================================================================COMMENT
MEDIUMlib/core/log.sh22# ============================================================================COMMENT
MEDIUMlib/core/log.sh36# ============================================================================COMMENT
MEDIUMlib/core/log.sh38# ============================================================================COMMENT
MEDIUMlib/core/log.sh126# ============================================================================COMMENT
MEDIUMlib/core/log.sh128# ============================================================================COMMENT
MEDIUMlib/core/log.sh250# ============================================================================COMMENT
MEDIUMlib/core/log.sh252# ============================================================================COMMENT
MEDIUMlib/core/log.sh483# ============================================================================COMMENT
MEDIUMlib/core/log.sh485# ============================================================================COMMENT
MEDIUMlib/core/log.sh530# ============================================================================COMMENT
MEDIUMlib/core/log.sh532# ============================================================================COMMENT
MEDIUMlib/core/sudo.sh7# ============================================================================COMMENT
MEDIUMlib/core/sudo.sh9# ============================================================================COMMENT
MEDIUMlib/core/sudo.sh283# ============================================================================COMMENT
MEDIUMlib/core/sudo.sh285# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh84# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh86# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh113# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh115# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh1381# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh1383# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh2289# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh2291# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh3442# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh3444# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh4024# ============================================================================COMMENT
MEDIUMlib/core/file_ops.sh4026# ============================================================================COMMENT
MEDIUMlib/core/timeout.sh13# ============================================================================COMMENT
MEDIUMlib/core/timeout.sh15# ============================================================================COMMENT
MEDIUMlib/core/timeout.sh66# ============================================================================COMMENT
MEDIUMlib/core/timeout.sh68# ============================================================================COMMENT
MEDIUMlib/core/timeout.sh374 # ========================================================================COMMENT
MEDIUMlib/core/timeout.sh376 # ========================================================================COMMENT
4 more matches not shown…
Redundant / Tautological Comments45 hits · 68 pts
SeverityFileLineSnippetContext
LOWbin/touchid.sh39# Check if Touch ID is already configuredCOMMENT
LOWbin/touchid.sh53# Check if system supports Touch IDCOMMENT
LOWbin/touchid.sh55 # Check if bioutil exists and has Touch ID capabilityCOMMENT
LOWbin/touchid.sh116 # Check if we should use sudo_local (Sonoma+)COMMENT
LOWbin/touchid.sh118 # Check if already correctly configured in sudo_localCOMMENT
LOWbin/touchid.sh134 # Check if configured in sudo (Legacy)COMMENT
LOWbin/touchid.sh182 # Check if already configured (Legacy)COMMENT
LOWbin/completion.sh244 # Check if already installed and normalize to latest lineCOMMENT
LOWbin/slim.sh342# Set keys_file to the cached slim_sealed_keys output for a sealing root;COMMENT
LOW⚡lib/core/base.sh1816# Check if terminal supports ANSI escape codesCOMMENT
LOW⚡lib/core/base.sh1824 # Check if running in interactive terminalCOMMENT
LOWlib/core/base.sh1793 # Check if enough time has elapsedCOMMENT
LOWlib/core/app_protection.sh64# Check if bundle ID matches pattern (glob support)COMMENT
LOWlib/core/app_protection.sh115# Check if application is a protected system componentCOMMENT
LOWlib/core/app_protection.sh171# Check if application data should be protected during cleanupCOMMENT
LOWlib/core/app_protection.sh383# Check if a path is protected from deletionCOMMENT
LOWlib/core/app_protection.sh666# Check if a path is protected by whitelist patternsCOMMENT
LOWlib/core/app_protection.sh711 # Check if target is a parent directory of a whitelisted pathCOMMENT
LOWlib/core/app_protection.sh718 # Check if target is a child of a whitelisted directory pathCOMMENT
LOWlib/core/app_protection.sh2666 # Check if process is running using exact match onlyCOMMENT
LOWlib/core/ui.sh567# Check if terminal has Full Disk AccessCOMMENT
LOWlib/core/sudo.sh58 # Check if lid is closed; ignore pipeline failures so set -e doesn't exitCOMMENT
LOWlib/core/sudo.sh132 # Check if already have sudo accessCOMMENT
LOWlib/core/sudo.sh183 # Check if in clamshell mode - if yes, skip Touch ID entirelyCOMMENT
LOWlib/core/sudo.sh339# Check if sudo session is activeCOMMENT
LOWlib/core/sudo.sh405 # Check if already establishedCOMMENT
LOWlib/core/sudo.sh438 # Check if already establishedCOMMENT
LOWlib/core/file_ops.sh1365 # Check if path is protected (keychains, system settings, etc)COMMENT
LOWlib/core/file_ops.sh1538 # Check if path existsCOMMENT
LOWlib/core/file_ops.sh1846 # Check if it's a permission errorCOMMENT
LOWlib/core/timeout.sh397 # Check if process still existsCOMMENT
LOWlib/core/timeout.sh460 # Check if command was killed by timeout (exit codes 143=SIGTERM, 137=SIGKILL)COMMENT
LOWlib/optimize/tasks.sh488 # Check if database has any entries worth cleaning.COMMENT
LOWlib/optimize/tasks.sh1289 # Check if periodic command exists (removed in macOS 26+)COMMENT
LOWlib/optimize/tasks.sh1799# Check if a login item name corresponds to an installed app.COMMENT
LOWlib/clean/project.sh39# Check if a directory contains projects (directly or in subdirectories).COMMENT
LOW⚡lib/clean/project.sh459 # Check if parent directory has a .csproj/.fsproj/.vbproj fileCOMMENT
LOW⚡lib/clean/project.sh464 # Check if bin directory contains Debug/ or Release/ subdirectoriesCOMMENT
LOW⚡lib/clean/project.sh470# Check if a vendor directory should be protected from purgeCOMMENT
LOWlib/clean/project.sh500# Check if an artifact should be protected from purgeCOMMENT
LOWlib/clean/project.sh848 # Check if we should abort (scanning file removed by Ctrl+C)COMMENT
LOWlib/clean/brew.sh300 # Check if Homebrew cache is whitelistedCOMMENT
LOWlib/uninstall/brew.sh32# Check if Homebrew is installed and accessibleCOMMENT
LOWlib/uninstall/brew.sh285 # Check if path is inside Caskroom. Quote literals so Homebrew bottleCOMMENT
LOWlib/manage/purge_paths.sh66 # Check if using custom configCOMMENT
Over-Commented Block70 hits · 66 pts
SeverityFileLineSnippetContext
LOWcmd/analyze/scanner.go121// that are easy to get wrong; see the per-field notes before adjusting.COMMENT
LOWcmd/analyze/delete.go21)COMMENT
LOWcmd/analyze/cache.go21COMMENT
LOWcmd/analyze/cache.go361COMMENT
LOWcmd/analyze/constants.go41 legacySweepWorkers = 4COMMENT
LOWbin/uninstall.sh161# Display names depend on the ordered language list. Keep the fingerprint inCOMMENT
LOWbin/clean.sh641COMMENT
LOWtests/color_tty_fixture.sh1#!/bin/bashCOMMENT
LOWtests/timeout_tty_background_fixture.sh1#!/bin/bashCOMMENT
LOWtests/helpers/common.bash1#!/usr/bin/env bashCOMMENT
LOWtests/helpers/common.bash41# it calls today instead of an extracted copy that silently falls back whenCOMMENT
LOWscripts/audit_bundle_drift.sh1#!/bin/bashCOMMENT
LOWscripts/setup-quick-launchers.sh61#!/bin/bashCOMMENT
LOWlib/core/base.sh21# Color DefinitionsCOMMENT
LOWlib/core/base.sh201 # moment a user saves one custom entry. Removing them breaks macOS search,COMMENT
LOWlib/core/base.sh561# so a test can rebind it to a fixture stub after sourcing.COMMENT
LOWlib/core/base.sh1381 (COMMENT
LOWlib/core/base.sh1661# fallback wording, dry-run export behavior). Before changing any of them,COMMENT
LOWlib/core/base.sh1861COMMENT
LOWlib/core/base.sh1881}COMMENT
LOWlib/core/app_protection.sh241COMMENT
LOWlib/core/app_protection.sh661 fiCOMMENT
LOWlib/core/app_protection.sh981# Return 0 when `path` looks like a dotdir / XDG state directory belonging toCOMMENT
LOWlib/core/app_protection.sh1341 )COMMENT
LOWlib/core/app_protection.sh1761COMMENT
LOWlib/core/app_protection.sh1781 { [[ "$app_name" =~ DevEco|deveco ]] || [[ "$bundle_id" =~ huawei.*deveco ]]; }; thenCOMMENT
LOWlib/core/app_protection.sh2601 # A flat PlayCover bundle keeps its plist at the root; falling back to theCOMMENT
LOWlib/core/ui.sh121COMMENT
LOWlib/core/timeouts.sh1#!/bin/bashCOMMENT
LOWlib/core/timeouts.sh21# DISK_VERIFY Filesystem-level verify/repair operations. ~30s.COMMENT
LOWlib/core/timeouts.sh41# `find /private/var/folders -maxdepth 8` GPU-cache scan inCOMMENT
LOWlib/core/app_protection_data.sh621)COMMENT
LOWlib/core/file_ops.sh441# ProcessGuard.processListMentionsCacheOwner):COMMENT
LOWlib/core/file_ops.sh561 id=$(run_with_timeout "$MOLE_TIMEOUT_QUICK_DETECT_SEC" \COMMENT
LOWlib/core/file_ops.sh1221 # match on the LITERAL path string, and the -L test above only inspects theCOMMENT
LOWlib/core/file_ops.sh2381# MOLE_DELETE_MODE "permanent" (default) or "trash"; other values failCOMMENT
LOWlib/core/file_ops.sh3621COMMENT
LOWlib/core/file_ops.sh4021 return "$delete_rc"COMMENT
LOWlib/core/timeout.sh1#!/bin/bashCOMMENT
LOWlib/core/timeout.sh21# brew install coreutilsCOMMENT
LOWlib/core/timeout.sh141# Returns:COMMENT
LOWlib/core/timeout.sh181 # No timeout if duration is invalid or zero. The regex already forbids aCOMMENT
LOWlib/core/timeout.sh381COMMENT
LOWlib/optimize/tasks.sh101 ;;COMMENT
LOWlib/optimize/diagnostics.sh541 # printed "swap 0GB of 1GB used (88%)" on a machine with a small swap file.COMMENT
LOWlib/clean/app_caches.sh541# fix parsed. `man plutil` says of `-p`: "The output format is not stable andCOMMENT
LOWlib/clean/app_caches.sh661# to render its in-app docs, sheets, slides, and AI surfaces. Every workspaceCOMMENT
LOWlib/clean/app_caches.sh781# with no Notion install on hand to confirm the reclaim or to check that loginCOMMENT
LOWlib/clean/app_caches.sh841 "$cleanup_deadline" || guarded_rc=$?COMMENT
LOWlib/clean/app_caches.sh861# WeCom cefcache/<profile>/Cache 424 MBCOMMENT
LOWlib/clean/dev.sh461 return 0COMMENT
LOWlib/clean/dev.sh961 # that child is hard-safety whitelisted. Whitelisting a nested path alsoCOMMENT
LOWlib/clean/dev.sh1401 "Rust" \COMMENT
LOWlib/clean/dev.sh2721 [[ -n "$excerpt" ]] || return 0COMMENT
LOWlib/clean/dev.sh2741# list` heads each image with the image version ("iOS 26.4.1") while `listCOMMENT
LOWlib/clean/dev.sh3141# Gradle: Respects whitelist, cleaned when not protected via: mo clean --whitelistCOMMENT
LOWlib/clean/dev.sh4081 [[ $clean_rc -eq 0 || $clean_rc -eq 1 ]] || return "$clean_rc"COMMENT
LOWlib/clean/dev.sh4481 # `lsof +D` returns 1 when no open files match. Timeouts or other failuresCOMMENT
LOWlib/clean/dev.sh4561 local physical_after=""COMMENT
LOWlib/clean/dev.sh4861# The installer holds install.lock with POSIX lockf while it unpacks a releaseCOMMENT
10 more matches not shown…
Cross-Language Confusion4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHtests/sudo_adoption_pty.py26 IFS= read -r answer < /dev/tty || return 1CODE
HIGHtests/sudo_adoption_pty.py34sudo -n -v || exit 1CODE
HIGHtests/uninstall_brew_output_pty.py39_batch_execute_removals || rc=$?CODE
HIGHtests/uninstall_review_pty.py34_batch_preview_and_confirm || rc=$?CODE
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWtests/sudo_adoption_pty.py49CODE
LOWtests/main_menu_pty.py20CODE
LOWtests/main_menu_pty.py107CODE
LOWtests/uninstall_menu_pty.py37CODE
LOWtests/purge_menu_pty.py160CODE
LOWtests/menu_search_pty.py36CODE
LOWtests/menu_search_pty.py101CODE
LOWscripts/audit_incidents.py105CODE
LOWscripts/audit_skill_commands.py43CODE
LOWscripts/audit_skill_commands.py159CODE
LOWscripts/audit_bats_assertions.py54CODE
LOWscripts/e2e_macos.py489CODE
AI Slop Vocabulary4 hits · 10 pts
SeverityFileLineSnippetContext
LOWlib/core/ui.sh108 # we cannot just use the total width formula on the whole string.COMMENT
MEDIUMlib/core/sudo.sh393 # Use the robust implementation from common.shCOMMENT
MEDIUMlib/clean/dev.sh4086# When an MCP server or agent harness dies without cleanup, its browserCOMMENT
MEDIUMlib/uninstall/batch.sh2119 # not by the app bundle's owner. Do not elevate solely because aCOMMENT
Hyper-Verbose Identifiers9 hits · 10 pts
SeverityFileLineSnippetContext
LOWtests/main_menu_pty.py182def check_inherited_term_mask():STRING
LOWtests/purge_menu_pty.py160def check_activity_poll_interrupt(root: Path) -> None:STRING
LOWtests/menu_search_pty.py101def check_term_without_keypress():STRING
LOWtests/e2e_harness_test.py65 def test_failed_prerequisites_block_dependent_actions_with_keep_going(self):CODE
LOW⚡tests/e2e_harness_test.py80 def test_read_only_failure_keeps_independent_analyze_and_smoke(self):CODE
LOW⚡tests/e2e_harness_test.py84 def test_default_stops_after_first_failure(self):CODE
LOW⚡tests/e2e_harness_test.py88 def test_failed_transfer_and_checksum_block_installation(self):CODE
LOW⚡tests/e2e_harness_test.py96 def test_success_and_explicit_skip_build_keep_the_full_flow(self):CODE
LOW⚡tests/e2e_harness_test.py106 def test_rate_limited_release_lookup_falls_back_to_signed_in_gh(self):CODE
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHtests/purge_menu_pty.py299except (ProcessLookupError, PermissionError):CODE
HIGHscripts/e2e_macos.py154except OSError:CODE
Unused Imports8 hits · 8 pts
SeverityFileLineSnippetContext
LOWtests/sudo_tty_pty.py9CODE
LOWscripts/audit_destructive_sinks.py4CODE
LOWscripts/audit_incidents.py18CODE
LOWscripts/audit_skill_commands.py18CODE
LOWscripts/audit_function_duplication.py25CODE
LOWscripts/audit_bats_assertions.py20CODE
LOWscripts/risk_tier.py20CODE
LOWscripts/audit_timeout_status.py12CODE
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMbin/touchid.sh143 # Create the fileCOMMENT
MEDIUMbin/slim.sh538 # Create the output exclusively rather than opening a bundle-owned path.COMMENT
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM…aude/skills/bugs/references/shell-and-test-pitfalls.md64## 15. Cancellation is local unless orchestration makes it stickyCOMMENT
MEDIUMlib/clean/user.sh2283 # BrowserOS (Chromium-based agentic browser).COMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtests/main_menu_pty.py107CODE
Excessive Try-Catch Wrapping1 hit · 0 pts
SeverityFileLineSnippetContext
LOWtests/purge_menu_pty.py309 except Exception as cleanup_error:STRING