AI Slop Code RIsk Monitor

leebaird/discover

Custom Bash and Python scripts used to automate various penetration testing tasks including recon, scanning, enumeration, and malicious payload creation using Metasploit. For use with Ubuntu. Limited support for Kali Linux.

5.9 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for leebaird/discover, a Shell project with 3,936 GitHub stars. SynthScan examined 78,210 lines of code across 206 source files, recording 261 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 5.9 (Moderate 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.

5.9
Adjusted Signal
5.9
Raw Pattern Score
100%
Time Factor
2026-10-06
Last Push
3.9K
Stars
Shell
Language
78.2K
Lines of Code
206
Files
261
Pattern Hits
2026-10-12
Scan Date
0.20
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 7.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.2/100 · LOW

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

Agent Over-Engineering Ratio 19.4/100 · LOW

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

PR Review Velocity Impact 27.6/100 · MEDIUM

Which changes need focused human review? 261 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 1HIGH 40MEDIUM 17LOW 203

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 261 distinct pattern matches across 14 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.

Empty Error Handlers39 hits · 195 pts
SeverityFileLineSnippetContext
HIGHmisc/host-scan-statusd.py1404except KeyboardInterrupt:CODE
HIGHmisc/host-scan-statusd.py195except Exception:CODE
HIGHmisc/host-scan-statusd.py1409except OSError:CODE
HIGHmisc/host-scan-statusd.py639except Exception:CODE
HIGHmisc/op_notes.py64except OSError:CODE
HIGHmisc/op_notes.py181except Exception:CODE
HIGHmisc/op_notes.py55except OSError:CODE
HIGHparsers/social.py162except Exception:CODE
HIGHdev/lib/sensitive-scanner/engine.py354except requests.RequestException:CODE
HIGHdev/lib/sensitive-scanner/engine.py429except requests.RequestException:CODE
HIGHdev/lib/sensitive-scanner/engine.py452except requests.RequestException:CODE
HIGHdev/lib/waf-detect/wafw00f_run.py27except Exception:CODE
HIGHdev/lib/open-redirect-scanner/engine.py806except Exception:CODE
HIGHrecon/active-tech.py2841except Exception:CODE
HIGHrecon/active-tech.py2448except OSError:CODE
HIGHrecon/active-tech.py1460except ValueError:CODE
HIGHrecon/active-tech.py2442except OSError:CODE
HIGHrecon/shodan-enrich.py695except OSError:CODE
HIGHrecon/shodan-enrich.py701except OSError:CODE
HIGHrecon/shodan-enrich.py720except (OSError, subprocess.TimeoutExpired):CODE
HIGHrecon/shodan-enrich.py1061except Exception:CODE
HIGHrecon/shodan-enrich.py440except OSError:CODE
HIGHrecon/shodan-enrich.py449except OSError:CODE
HIGHrecon/shodan-enrich.py633except Exception:CODE
HIGHrecon/shodan-enrich.py258except OSError:CODE
HIGHrecon/import-operator-package.py597except OSError:CODE
HIGHrecon/import-operator-package.py777except Exception:CODE
HIGHrecon/audit-build.py1223except Exception:CODE
HIGHrecon/discover-config.py81except OSError:CODE
HIGHrecon/discover-config.py137except OSError:CODE
HIGHrecon/discover-config.py178except OSError:CODE
HIGHrecon/discover-config.py318except OSError:CODE
HIGHrecon/discover-config.py372except OSError:CODE
HIGHrecon/discover-config.py366except FileNotFoundError:CODE
HIGHrecon/software-cve.py358except Exception:CODE
HIGHrecon/software-cve.py325except OSError:CODE
HIGHrecon/software-cve.py341except OSError:CODE
HIGHrecon/software-cve.py304except OSError:CODE
HIGHrecon/software-cve.py332except OSError:CODE
Excessive Try-Catch Wrapping68 hits · 76 pts
SeverityFileLineSnippetContext
LOWmisc/host-scan-statusd.py174 except Exception:CODE
LOWmisc/host-scan-statusd.py195 except Exception:CODE
LOWmisc/host-scan-statusd.py563 except Exception as exc:CODE
LOWmisc/host-scan-statusd.py639 except Exception:CODE
LOWmisc/host-scan-statusd.py985 except Exception as exc:CODE
LOWmisc/host-scan-statusd.py1340 except Exception as exc:CODE
LOWmisc/op_notes.py52 except Exception:CODE
MEDIUM⚡misc/op_notes.py73 print("Error: ~/.discover/client_secret.json not found.", file=sys.stderr)CODE
LOW⚡misc/op_notes.py82 except Exception:CODE
LOW⚡misc/op_notes.py90 except Exception:CODE
MEDIUM⚡misc/op_notes.py91 print("Error refreshing token.", file=sys.stderr)CODE
LOWmisc/op_notes.py181 except Exception:CODE
LOWmisc/op_notes.py225 except Exception as exc:CODE
MEDIUMmisc/op_notes.py226 print(f"Error syncing to Google Sheet: {exc}", file=sys.stderr)CODE
LOWmisc/open-ffuf-tabs.sh110except Exception:CODE
LOWmisc/open-ffuf-tabs.sh144 except Exception:CODE
LOWmisc/update.sh456except Exception:CODE
LOWmisc/run-host-scan.sh231except Exception:CODE
LOWmisc/run-host-scan.sh249 except Exception:CODE
LOWmisc/run-host-scan.sh1646except Exception:CODE
LOWmisc/run-host-scan.sh1843except Exception:CODE
LOWmisc/run-host-scan.sh2064except Exception:CODE
LOWmisc/run-host-scan.sh2149except Exception:CODE
LOWmisc/run-host-scan.sh2291except Exception:CODE
LOWmisc/run-host-scan.sh2313 except Exception:CODE
LOWmisc/run-host-scan.sh2336 except Exception:CODE
LOWparsers/parse-burp.py30 except Exception as ex:CODE
LOWparsers/social.py162 except Exception:CODE
MEDIUMparsers/parse-nessus-feed.py63 print("Error writing CSV file. Check for permissions and/or path.\n")CODE
MEDIUMparsers/parse-nessus-feed.py76 print("Error writing remainder of the column data to file. Check for permissions and/or path.")CODE
MEDIUMparsers/parse-nessus-feed.py93 print("Error reading/parsing XML file. Its likely that the XML file is mangled in some way.")CODE
LOWdev/lib/sensitive-scanner/engine.py398 except Exception as exc:CODE
LOWdev/lib/waf-detect/wafw00f_run.py27 except Exception:CODE
LOWdev/lib/open-redirect-scanner/engine.py234 except Exception as exc:CODE
LOWdev/lib/open-redirect-scanner/engine.py258 except Exception as exc:CODE
LOWdev/lib/open-redirect-scanner/engine.py395 except Exception:CODE
LOWdev/lib/open-redirect-scanner/engine.py424 except Exception:CODE
LOWdev/lib/open-redirect-scanner/engine.py452 except Exception:CODE
LOWdev/lib/open-redirect-scanner/engine.py585 except Exception as exc:CODE
LOWdev/lib/open-redirect-scanner/engine.py680 except Exception as exc:CODE
LOWdev/lib/open-redirect-scanner/engine.py697 except Exception as exc:CODE
LOWdev/lib/open-redirect-scanner/engine.py806 except Exception:CODE
LOWrecon/import-subdomains.sh310 except Exception as exc:CODE
LOWrecon/passive.sh493except Exception as exc:CODE
LOWrecon/active-tech.py1226 except Exception:CODE
LOWrecon/active-tech.py1698 except Exception:CODE
LOWrecon/active-tech.py1791 except Exception:CODE
LOWrecon/active-tech.py1817 except Exception:CODE
LOWrecon/active-tech.py2841 except Exception:CODE
LOWrecon/shodan-enrich.py75 except Exception:CODE
LOWrecon/shodan-enrich.py633 except Exception:CODE
LOWrecon/shodan-enrich.py1061 except Exception:CODE
LOWrecon/import-operator-package.py92 except Exception:CODE
LOWrecon/import-operator-package.py154 except Exception:CODE
LOWrecon/import-operator-package.py624 except Exception as exc:CODE
LOWrecon/import-operator-package.py646 except Exception as exc:CODE
LOWrecon/import-operator-package.py777 except Exception:CODE
LOWrecon/audit-build.py60 except Exception:CODE
LOWrecon/audit-build.py138 except Exception:CODE
LOWrecon/audit-build.py303 except Exception:CODE
8 more matches not shown…
Hyper-Verbose Identifiers45 hits · 43 pts
SeverityFileLineSnippetContext
LOWmisc/host-scan-statusd.py160def load_discover_config_module(discover_root: Path):CODE
LOWmisc/host-scan-statusd.py178def shodan_api_key_configured(discover_root: Path) -> bool:CODE
LOWparsers/parse-burp.py119def parse_vulnerability_classifications(html_content):CODE
LOWparsers/company.py153def extract_contact_from_html(html: str) -> tuple[list[str], str] | None:CODE
LOWdev/lib/open-redirect-scanner/engine.py315def location_points_to_canary(location: str, canary: str, base_url: str) -> bool:CODE
LOWreport/assets/javascript/inc-host-scan.js1587 function hostScanArtifactAbsolutePath(relFromPages) {CODE
LOWreport/assets/javascript/inc-active-align.js106 function matchTechnologiesWidthToWebservers() {CODE
LOWrecon/import-subdomains.sh1056def rows_from_subdomain_objects(rows):CODE
LOWrecon/active-tech.py123def normalize_tech_separators(value):CODE
LOWrecon/active-tech.py275def whatweb_has_password_field(plugins) -> bool:CODE
LOWrecon/active-tech.py533def strip_redundant_technology_labels(technologies, webserver):CODE
LOWrecon/active-tech.py555def strip_noise_technology_labels(technologies):CODE
LOWrecon/active-tech.py590def strip_runtime_when_product(technologies, extra: str = ""):CODE
LOWrecon/active-tech.py608def strip_generic_when_specific(technologies):CODE
LOWrecon/active-tech.py648def append_control_m_from_row(technologies, title: str = "", host: str = "") -> str:CODE
LOWrecon/active-tech.py661def strip_redundant_webserver_tokens(webserver, technologies):CODE
LOWrecon/active-tech.py1172def _load_software_cve_module():CODE
LOWrecon/active-tech.py1180def enrich_software_rows_for_report(CODE
LOWrecon/active-tech.py1580def is_generic_http_auth_title(title: str) -> bool:CODE
LOWrecon/active-tech.py1649def is_microsoft_login_redirect(tech: dict | None) -> bool:CODE
LOWrecon/active-tech.py1702def citrix_gateway_uses_microsoft_sso(host: str, timeout: float = 12.0) -> bool:CODE
LOWrecon/active-tech.py2166def is_software_version_label(label):CODE
LOWrecon/active-tech.py2489def write_subdomains_active_page(report_dir: str) -> dict:CODE
LOWrecon/shodan-enrich.py63def _load_software_cve_module() -> Any | None:CODE
LOWrecon/shodan-enrich.py404def report_has_shodan_artifacts(report_dir: str) -> bool:CODE
LOWrecon/import-operator-package.py526def count_operator_audit_lines(source: Path, operator: str) -> int:CODE
LOWrecon/audit-build.py95def normalize_audit_display_ts(s: str) -> str:CODE
LOWrecon/audit-build.py180def _extract_command_from_output_text(text: str) -> str:CODE
LOWrecon/audit-build.py307def _duration_for_finished_scan(CODE
LOWrecon/audit-build.py435def _is_finished_host_scan_action(action: str) -> bool:CODE
LOWrecon/audit-build.py447def _audit_action_hides_operator_ip(action: str) -> bool:CODE
LOWrecon/audit-build.py533def delete_audit_line_by_hash(report_root: Path, line_hash: str) -> dict:CODE
LOWrecon/audit-build.py608def _newest_host_scan_tool_meta(tool_dir: Path) -> dict:CODE
LOWrecon/audit-build.py796def _robots_disallow_has_dirs(list_disk: Path) -> bool:CODE
LOWrecon/audit-build.py814def _host_scan_finding_url_count(json_disk: Path) -> int:CODE
LOWrecon/audit-build.py874def build_host_scan_output_index(report_root: Path) -> dict[str, dict[str, dict]]:CODE
LOWrecon/audit-build.py1158def _software_product_from_action(action: str) -> str:CODE
LOWrecon/audit-build.py1479def _metrics_range_select_html(selected: str) -> str:CODE
LOWrecon/audit-build.py1497def _render_metrics_panel_body(metrics: dict) -> str:CODE
LOWrecon/discover-config.py183def rewrite_audit_operator_name(report_root: Path, old_name: str, new_name: str) -> int:CODE
LOWrecon/software-cve.py258def migrate_legacy_api_key_files() -> list[str]:CODE
LOWrecon/software-cve.py412def _parse_nvd_vulnerabilities(payload: dict[str, Any]) -> list[dict[str, Any]]:CODE
LOWrecon/software-cve.py700def enrich_software_version_rows(CODE
LOWrecon/software-cve.py901def write_cve_software_index_js(cache_path: str) -> str:CODE
LOWrecon/import-names-titles-emails.sh393def format_names_report_lines(contacts):CODE
Deep Nesting49 hits · 42 pts
SeverityFileLineSnippetContext
LOWmisc/host-scan-statusd.py178CODE
LOWmisc/host-scan-statusd.py200CODE
LOWmisc/host-scan-statusd.py282CODE
LOWparsers/parse-burp.py63CODE
LOWparsers/parse-burp.py83CODE
LOWparsers/social.py156CODE
LOWparsers/social.py237CODE
LOWparsers/company.py212CODE
LOWparsers/sec_people.py256CODE
LOWparsers/sec_people.py98CODE
LOWparsers/sec_common.py60CODE
LOWparsers/parse-nexpose.py65CODE
LOWparsers/parse-nipper.py75CODE
LOWparsers/parse-nessus-feed.py85CODE
LOWparsers/parse-nmap.py76CODE
LOWnotes/build.py68CODE
LOWdev/lib/sensitive-scanner/engine.py102CODE
LOWdev/lib/sensitive-scanner/engine.py302CODE
LOWdev/lib/sensitive-scanner/filescan.py189CODE
LOWdev/lib/sensitive-scanner/filescan.py239CODE
LOWdev/lib/open-redirect-scanner/engine.py161CODE
LOWdev/lib/open-redirect-scanner/engine.py193CODE
LOWdev/lib/open-redirect-scanner/engine.py206CODE
LOWdev/lib/open-redirect-scanner/engine.py241CODE
LOWdev/lib/open-redirect-scanner/engine.py662CODE
LOWrecon/active-tech.py244CODE
LOWrecon/active-tech.py324CODE
LOWrecon/active-tech.py661CODE
LOWrecon/active-tech.py744CODE
LOWrecon/active-tech.py848CODE
LOWrecon/active-tech.py892CODE
LOWrecon/active-tech.py1851CODE
LOWrecon/active-tech.py2232CODE
LOWrecon/shodan-enrich.py97CODE
LOWrecon/shodan-enrich.py421CODE
LOWrecon/shodan-enrich.py559CODE
LOWrecon/shodan-enrich.py724CODE
LOWrecon/import-operator-package.py104CODE
LOWrecon/audit-build.py180CODE
LOWrecon/audit-build.py307CODE
LOWrecon/audit-build.py608CODE
LOWrecon/audit-build.py685CODE
LOWrecon/audit-build.py814CODE
LOWrecon/audit-build.py886CODE
LOWrecon/audit-build.py1285CODE
LOWrecon/discover-config.py432CODE
LOWrecon/software-cve.py238CODE
LOWrecon/software-cve.py346CODE
LOWrecon/software-cve.py953CODE
Decorative Section Separators8 hits · 24 pts
SeverityFileLineSnippetContext
MEDIUMold/deploy/main.tf16# ---------------------------------------------------------------------------------------------------------------------COMMENT
MEDIUMold/deploy/main.tf45# ---------------------------------------------------------------------------------------------------------------------COMMENT
MEDIUMrecon/import-subdomains.sh758# ---------------------------------------------------------------------------COMMENT
MEDIUMrecon/import-subdomains.sh760# ---------------------------------------------------------------------------COMMENT
MEDIUMrecon/import-subdomains.sh990# ---------------------------------------------------------------------------COMMENT
MEDIUMrecon/import-subdomains.sh992# ---------------------------------------------------------------------------COMMENT
MEDIUMrecon/active.sh1173# ---------------------------------------------------------------------------COMMENT
MEDIUMrecon/active.sh1176# ---------------------------------------------------------------------------COMMENT
Unused Imports19 hits · 18 pts
SeverityFileLineSnippetContext
LOWmisc/host-scan-statusd.py41CODE
LOWmisc/op_notes.py16CODE
LOWparsers/social.py4CODE
LOWparsers/company.py4CODE
LOWparsers/sec_people.py4CODE
LOWparsers/sec_common.py4CODE
LOWnotes/build.py4CODE
LOWdev/lib/sensitive-scanner/engine.py4CODE
LOWdev/lib/sensitive-scanner/filescan.py4CODE
LOWdev/lib/waf-detect/wafw00f_run.py4CODE
LOWdev/lib/web-api-scanner/msf_parse.py4CODE
LOWdev/lib/web-api-scanner/msf_parse.py9CODE
LOWdev/lib/open-redirect-scanner/engine.py6CODE
LOWrecon/shodan-enrich.py27CODE
LOWrecon/import-operator-package.py17CODE
LOWrecon/touch-report-date.py13CODE
LOWrecon/audit-build.py6CODE
LOWrecon/discover-config.py19CODE
LOWrecon/software-cve.py18CODE
Redundant / Tautological Comments12 hits · 18 pts
SeverityFileLineSnippetContext
LOWold/dns-reverse.sh21# Check if class is empty or invalidCOMMENT
LOWold/dns-reverse.sh37 # Check if the host command returns a valid PTR recordCOMMENT
LOWold/compare-sites.sh112 # Check if selected versions are validCOMMENT
LOWold/rebrand.sh39# Check if index.htm existsCOMMENT
LOWold/wtf.sh97 # Check if the interface is in monitorCOMMENT
LOWold/wtf.sh131 # Check if the process is still running before trying to kill itCOMMENT
LOWold/wtf.sh138 # Check if the scan file existsCOMMENT
LOWold/dns-transfer.sh53 # Check if the DNS zone transfer is successfulCOMMENT
LOWdev/lib/container-scanner/k8s.sh18 # Check if kubectl can connect to a clusterCOMMENT
LOWdev/lib/container-scanner/docker.sh33 # Check if there are any imagesCOMMENT
LOWdev/lib/container-scanner/docker.sh407 # Check if there are any containersCOMMENT
LOWdev/lib/container-scanner/docker.sh483 # Check if container is running in privileged modeCOMMENT
Over-Commented Block11 hits · 11 pts
SeverityFileLineSnippetContext
LOWdiscover.sh1#!/usr/bin/env bashCOMMENT
LOWdiscover.sh21# Matt Banick - original developmentCOMMENT
LOWmisc/open-ffuf-tabs.sh1#!/usr/bin/env bashCOMMENT
LOWmisc/run-host-scan.sh1#!/usr/bin/env bashCOMMENT
LOWmisc/open-robots-tabs.sh1#!/usr/bin/env bashCOMMENT
LOWmisc/patch-droopescan-py314.sh1#!/usr/bin/env bashCOMMENT
LOWparsers/parse-nessus-feed.py1#!/usr/bin/env python3COMMENT
LOWdev/cloud-scanner.sh1#!/usr/bin/env bashCOMMENT
LOWdev/web-api-scanner.sh1#!/usr/bin/env bashCOMMENT
LOWdev/container-scanner.sh1#!/usr/bin/env bashCOMMENT
LOWresource/user-agent.txt1# Discover scanner User-Agent (Microsoft Edge on Windows).COMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALreport/assets/javascript/jquery.min.js4return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{marginLeftCODE
Example Usage Blocks4 hits · 6 pts
SeverityFileLineSnippetContext
LOWmisc/open-theharvester-keys.sh9# Usage:COMMENT
LOWmisc/open-ffuf-tabs.sh9# Usage:COMMENT
LOWmisc/open-nmap-web-tabs.sh8# Usage:COMMENT
LOWmisc/open-robots-tabs.sh9# Usage:COMMENT
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMdev/api-scanner.sh551# Scan orchestrationCOMMENT
MEDIUMdev/lib/web-api-scanner/probe.sh1# Technology fingerprinting and scan orchestrationCOMMENT
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHdev/lib/sensitive-scanner/run-tests.sh31grep -q 'your-api-key' "$OUT/hits.jsonl" && fail "denylist allows placeholder" || pass "denylist filters placeholder"CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMdev/lib/container-scanner/k8s.sh523 # Create comprehensive Kubernetes security summaryCOMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWdev/lib/sensitive-scanner/run-tests.sh32grep -q 'user@example.com' "$OUT/hits.jsonl" && fail "denylist allows example email" || pass "denylist filters example eCODE