AI Slop Code RIsk Monitor

sshuttle/sshuttle

Transparent proxy server that works as a poor man's VPN. Forwards over ssh. Doesn't require admin. Works with Linux and MacOS. Supports DNS tunneling.

20.3 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for sshuttle/sshuttle, a Python project with 13,602 GitHub stars. SynthScan examined 9,485 lines of code across 52 source files, recording 113 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 20.3 (Elevated 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.

20.3
Adjusted Signal
20.3
Raw Pattern Score
100%
Time Factor
2026-10-08
Last Push
13.6K
Stars
Python
Language
9.5K
Lines of Code
52
Files
113
Pattern Hits
2026-10-12
Scan Date
0.29
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 39.7/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 6.4/100 · LOW

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

Agent Over-Engineering Ratio 45.3/100 · MEDIUM

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

PR Review Velocity Impact 66.2/100 · HIGH

Which changes need focused human review? 113 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 15MEDIUM 9LOW 89

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 113 distinct pattern matches across 10 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 Handlers10 hits · 50 pts
SeverityFileLineSnippetContext
HIGHsshuttle/hostwatch.py146except (OSError, socket.error, UnicodeError):CODE
HIGHsshuttle/hostwatch.py159except (socket.gaierror, UnicodeError):CODE
HIGHsshuttle/hostwatch.py60except Exception:CODE
HIGHsshuttle/firewall.py117except OSError:CODE
HIGHsshuttle/firewall.py351except NotImplementedError:CODE
HIGHsshuttle/ssh.py64except Exception:CODE
HIGHsshuttle/helpers.py28except (IOError, ValueError): # ValueError ~ I/O operation on closed fileCODE
HIGHsshuttle/helpers.py41except (IOError, ValueError): # ValueError ~ I/O operation on closed fileCODE
HIGHsshuttle/helpers.py303except Exception:CODE
HIGHsshuttle/ssnet.py175except AttributeError:CODE
Excessive Try-Catch Wrapping26 hits · 34 pts
SeverityFileLineSnippetContext
LOWsshuttle/server.py155 except Exception:CODE
LOWsshuttle/hostwatch.py60 except Exception:CODE
LOWsshuttle/firewall.py258 except Exception:CODE
LOWsshuttle/firewall.py280 except Exception:CODE
LOW⚡sshuttle/firewall.py384 except Exception:CODE
LOW⚡sshuttle/firewall.py391 except Exception:CODE
LOW⚡sshuttle/firewall.py395 except Exception:CODE
LOW⚡sshuttle/firewall.py402 except Exception:CODE
LOW⚡sshuttle/firewall.py406 except Exception:CODE
LOW⚡sshuttle/firewall.py412 except Exception:CODE
LOW⚡sshuttle/firewall.py416 except Exception:CODE
LOW⚡sshuttle/firewall.py422 except Exception:CODE
LOW⚡sshuttle/firewall.py426 except Exception:CODE
MEDIUMsshuttle/firewall.py225def _read_next_string_line():CODE
LOWsshuttle/client.py1019 except Exception as e:CODE
LOWsshuttle/ssh.py64 except Exception:CODE
LOWsshuttle/helpers.py269 except Exception:CODE
LOWsshuttle/helpers.py303 except Exception:CODE
LOWsshuttle/helpers.py323 except Exception:CODE
LOWsshuttle/helpers.py337 except Exception:CODE
MEDIUMsshuttle/helpers.py318def stream_reader_to_sock():CODE
MEDIUMsshuttle/helpers.py330def stream_sock_to_writer():CODE
LOWsshuttle/ssnet.py67 except Exception as e:CODE
LOWsshuttle/ssnet.py79 except Exception as e:CODE
LOWsshuttle/methods/windivert.py364 except Exception:CODE
MEDIUMsshuttle/methods/windivert.py361def _target():CODE
Hyper-Verbose Identifiers31 hits · 30 pts
SeverityFileLineSnippetContext
LOWtests/server/test_server.py75def test_dnsproxy_dispose_closes_every_socket_it_made():CODE
LOWtests/server/test_server.py92def test_udpproxy_dispose_closes_its_socket():CODE
LOWtests/client/test_options.py123def test_convert_arg_line_to_args_skips_comments():CODE
LOWtests/client/test_options.py129def test_parse_subnetport_host(mock_getaddrinfo):CODE
LOWtests/client/test_options.py148def test_parse_subnetport_host_with_port(mock_getaddrinfo):CODE
LOWtests/client/test_methods_tproxy.py9def test_get_supported_features():CODE
LOWtests/client/test_ssnet.py18def test_close_later_closes_the_socket():CODE
LOWtests/client/test_ssnet.py32def test_close_later_tolerates_none_and_double_close():CODE
LOWtests/client/test_ssnet.py41def test_close_later_closes_inline_when_the_backlog_is_full():CODE
LOWtests/client/test_ssnet.py62def test_handler_dispose_is_a_noop():CODE
LOWtests/client/test_ssnet.py66def test_proxy_dispose_leaves_the_mux_alone():CODE
LOWtests/client/test_firewall.py68def test_rewrite_etc_hosts_no_overwrite(mock_link, mock_rename, tmpdir):STRING
LOWtests/client/test_sudoers.py8def test_build_config_pythonpath_is_site_packages_parent():CODE
LOWtests/client/test_sudoers.py46def test_build_config_contains_user_name_and_cmd_alias():CODE
LOWtests/client/test_methods_pf.py11def test_get_supported_features():CODE
LOWtests/client/test_methods_pf.py93def test_firewall_command_darwin(mock_pf_get_dev, mock_ioctl, mock_stdout):CODE
LOWtests/client/test_methods_pf.py116def test_firewall_command_freebsd(mock_pf_get_dev, mock_ioctl, mock_stdout):CODE
LOWtests/client/test_methods_pf.py139def test_firewall_command_openbsd(mock_pf_get_dev, mock_ioctl, mock_stdout):CODE
LOWtests/client/test_methods_pf.py174def test_setup_firewall_darwin(mock_pf_get_dev, mock_ioctl, mock_pfctl):CODE
LOWtests/client/test_methods_pf.py293def test_setup_firewall_freebsd(mock_pf_get_dev, mock_ioctl, mock_pfctl,CODE
LOWtests/client/test_methods_pf.py403def test_setup_firewall_openbsd(mock_pf_get_dev, mock_ioctl, mock_pfctl):CODE
LOWtests/client/test_listeners.py41def test_dual_wildcard_real_sockets(kind):CODE
LOWtests/client/test_listeners.py86def test_startup_port_bookkeeping(ports, dns, udp):CODE
LOWtests/client/test_methods_nat.py11def test_get_supported_features():CODE
LOWtests/client/test_helpers.py120def test_resolvconf_nameservers(mock_open):CODE
LOWtests/client/test_helpers.py146def test_get_random_nameserver(mock_open):STRING
LOWtests/client/test_sdnotify.py9def test_notify_invalid_socket_path(mock_get):CODE
LOWtests/client/test_sdnotify.py15def test_notify_socket_not_there(mock_get):CODE
LOWsshuttle/firewall.py98def _setup_daemon_for_unix_like():CODE
LOWsshuttle/firewall.py124def _setup_daemon_for_windows():CODE
LOWsshuttle/methods/windivert.py295 def _get_bind_address_for_port(self, port, family):CODE
Over-Commented Block18 hits · 18 pts
SeverityFileLineSnippetContext
LOWdocs/conf.py1#!/usr/bin/env python3COMMENT
LOWdocs/conf.py21# If extensions (or modules to document with autodoc) are in another directory,COMMENT
LOWdocs/conf.py41# The suffix of source filenames.COMMENT
LOWdocs/conf.py61version = '.'.join(release.split('.')[:2])COMMENT
LOWdocs/conf.py81# If true, '()' will be appended to :func: etc. cross-reference text.COMMENT
LOWdocs/conf.py101COMMENT
LOWdocs/conf.py121# html_short_title = NoneCOMMENT
LOWdocs/conf.py141COMMENT
LOWdocs/conf.py161# html_use_index = TrueCOMMENT
LOWdocs/conf.py201# (source start file, target name, title,COMMENT
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/codeql.yml61 # ✏️ If the Autobuild fails above, remove it and uncomment the following three linesCOMMENT
LOWsshuttle/client.py361 # Normally, READY will be the first text on the firstCOMMENT
LOWsshuttle/ssh.py181 if python:COMMENT
LOWsshuttle/ssh.py201 # hide the version that "python3 -V" might print (someCOMMENT
LOWsshuttle/helpers.py81 #COMMENT
LOWsshuttle/ssnet.py21#COMMENT
LOWsshuttle/ssnet.py261 else:COMMENT
Deep Nesting15 hits · 15 pts
SeverityFileLineSnippetContext
LOWsshuttle/server.py21CODE
LOWsshuttle/server.py298CODE
LOWsshuttle/hostwatch.py117CODE
LOWsshuttle/firewall.py200CODE
LOWsshuttle/client.py594CODE
LOWsshuttle/client.py811CODE
LOWsshuttle/cmdline.py17CODE
LOWsshuttle/ssh.py33CODE
LOWsshuttle/ssh.py124CODE
LOWsshuttle/helpers.py66CODE
LOWsshuttle/ssnet.py228CODE
LOWsshuttle/ssnet.py490CODE
LOWsshuttle/methods/tproxy.py20CODE
LOWsshuttle/methods/windivert.py404CODE
LOWsshuttle/methods/windivert.py485CODE
Synthetic Comment Markers2 hits · 15 pts
SeverityFileLineSnippetContext
HIGHsshuttle/methods/nft.py56 # Redirect DNS traffic as requested. This includes routing trafficCOMMENT
HIGHsshuttle/methods/nat.py53 # Redirect DNS traffic as requested. This includes routing trafficCOMMENT
Cross-Language Confusion3 hits · 12 pts
SeverityFileLineSnippetContext
HIGHsshuttle/server.py70 mask = _maskbits(maskw) # returns 32 if maskw is nullCODE
HIGHsshuttle/hostwatch.py167 p = ssubprocess.Popen(argv, stdout=ssubprocess.PIPE, stderr=null,CODE
HIGHsshuttle/ssh.py223 pycmd = ("P=python3; $P -V 2>%s || P=python; "STRING
AI Slop Vocabulary4 hits · 10 pts
SeverityFileLineSnippetContext
LOWsshuttle/server.py370 # different platforms we can not just set the socket familyCOMMENT
MEDIUMsshuttle/client.py229 if is_admin_user(): # No need to elevate privilegesCODE
MEDIUMsshuttle/client.py236 # XXX: Attempt to elevate privilege using 'runas' in windows seems not working.COMMENT
MEDIUMsshuttle/client.py355 # entered the wrong password to elevate privileges.COMMENT
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMdocs/conf.py7# This file is execfile()d with the current directory set to itsCOMMENT
MEDIUMsshuttle/client.py87 # Create a daemon process with a new session id.COMMENT
Redundant / Tautological Comments2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsshuttle/hostwatch.py240 # Check if this jobs needs to run.COMMENT
LOWsshuttle/client.py351 rv = self.p.poll() # Check if process is still runningCODE