AI Slop Code RIsk Monitor

open-webui/open-terminal

A computer you can curl ⚡

44.3 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for open-webui/open-terminal, a Python project with 3,301 GitHub stars. SynthScan examined 6,747 lines of code across 28 source files, recording 132 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 44.3 (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.

44.3
Adjusted Signal
44.3
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
3.3K
Stars
Python
Language
6.7K
Lines of Code
28
Files
132
Pattern Hits
2026-10-12
Scan Date
0.71
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 18.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 8.8/100 · LOW

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

Agent Over-Engineering Ratio 85.6/100 · CRITICAL

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

PR Review Velocity Impact 92.0/100 · CRITICAL

Which changes need focused human review? 132 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 20MEDIUM 54LOW 58

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 132 distinct pattern matches across 11 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 Separators51 hits · 144 pts
SeverityFileLineSnippetContext
MEDIUMentrypoint-slim.sh4# ============================================================================COMMENT
MEDIUMentrypoint-slim.sh6# ============================================================================COMMENT
MEDIUMentrypoint-slim.sh19# ============================================================================COMMENT
MEDIUMentrypoint-slim.sh22# ── Helper: Docker-secrets _FILE resolution ────────────────────────────────COMMENT
MEDIUMentrypoint-slim.sh56# ── Helper: drop privileges to "user" ─────────────────────────────────────COMMENT
MEDIUMentrypoint-slim.sh73# ── Home directory setup ──────────────────────────────────────────────────COMMENT
MEDIUMentrypoint-slim.sh105# ── Network egress filtering ──────────────────────────────────────────────COMMENT
MEDIUMentrypoint-slim.sh134 # ── Deny-all mode ──────────────────────────────────────────────COMMENT
MEDIUMentrypoint-slim.sh138 # ── Restricted mode (DNS whitelist + ipset) ────────────────────COMMENT
MEDIUMentrypoint-slim.sh191# ============================================================================COMMENT
MEDIUMentrypoint-slim.sh193# ============================================================================COMMENT
MEDIUMentrypoint.sh4# -----------------------------------------------------------------------COMMENT
MEDIUMentrypoint.sh7# -----------------------------------------------------------------------COMMENT
MEDIUMentrypoint.sh84# -----------------------------------------------------------------------COMMENT
MEDIUMentrypoint.sh94# -----------------------------------------------------------------------COMMENT
MEDIUMentrypoint.sh109 # ── Deny-all mode ──────────────────────────────────────────────COMMENT
MEDIUMentrypoint.sh113 # ── Restricted mode (DNS whitelist + ipset) ────────────────────COMMENT
MEDIUM⚡open_terminal/main.py240# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡open_terminal/main.py242# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡open_terminal/main.py1871# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡open_terminal/main.py1873# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py347# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py349# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py370# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py372# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py446# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py448# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py462# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py464# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py542# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py544# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py1650# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py1652# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py1994# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py1996# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py2437# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/main.py2439# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py37 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py39 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py67 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py69 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py143 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py145 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py249 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/fs.py251 # ------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/notebooks.py25# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/notebooks.py27# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡open_terminal/utils/notebooks.py80# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡open_terminal/utils/notebooks.py82# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/notebooks.py115# ---------------------------------------------------------------------------COMMENT
MEDIUMopen_terminal/utils/notebooks.py117# ---------------------------------------------------------------------------COMMENT
Empty Error Handlers19 hits · 95 pts
SeverityFileLineSnippetContext
HIGHopen_terminal/cli.py108except Exception:CODE
HIGHopen_terminal/main.py1733except asyncio.TimeoutError:CODE
HIGHopen_terminal/main.py1793except asyncio.TimeoutError:CODE
HIGHopen_terminal/main.py2424except WebSocketDisconnect:CODE
HIGHopen_terminal/main.py431except OSError:CODE
HIGHopen_terminal/main.py1048except (UnicodeDecodeError, ValueError, OSError):CODE
HIGHopen_terminal/main.py2041except OSError:CODE
HIGHopen_terminal/main.py2431except (asyncio.CancelledError, Exception):CODE
HIGHopen_terminal/main.py1531except OSError:CODE
HIGHopen_terminal/main.py2049except (ProcessLookupError, PermissionError):CODE
HIGHopen_terminal/main.py2057except (ProcessLookupError, PermissionError):CODE
HIGHopen_terminal/main.py2422except (json.JSONDecodeError, KeyError):CODE
HIGHopen_terminal/utils/port.py64except OSError:CODE
HIGHopen_terminal/utils/runner.py133except OSError:CODE
HIGHopen_terminal/utils/runner.py121except ProcessLookupError:CODE
HIGHopen_terminal/utils/user_isolation.py93except KeyError:CODE
HIGHopen_terminal/utils/fs.py191except (AttributeError, OSError):CODE
HIGHopen_terminal/utils/notebooks.py70except Exception:CODE
HIGHopen_terminal/utils/notebooks.py244except Exception:CODE
Deep Nesting27 hits · 19 pts
SeverityFileLineSnippetContext
LOWopen_terminal/main.py979CODE
LOWopen_terminal/main.py1093CODE
LOWopen_terminal/main.py1320CODE
LOWopen_terminal/main.py1454CODE
LOWopen_terminal/main.py1593CODE
LOWopen_terminal/main.py1015CODE
LOWopen_terminal/main.py1117CODE
LOWopen_terminal/main.py1339CODE
LOWopen_terminal/main.py1477CODE
LOWopen_terminal/main.py1617CODE
LOWopen_terminal/main.py2024CODE
LOWopen_terminal/main.py2285CODE
LOWopen_terminal/main.py1024CODE
LOWopen_terminal/main.py1131CODE
LOWopen_terminal/main.py1228CODE
LOWopen_terminal/main.py2386CODE
LOWopen_terminal/utils/port.py7CODE
LOWopen_terminal/utils/port.py153CODE
LOWopen_terminal/utils/port.py20CODE
LOWopen_terminal/utils/port.py46CODE
LOWopen_terminal/utils/port.py76CODE
LOWopen_terminal/utils/port.py112CODE
LOWopen_terminal/utils/documents.py29CODE
LOWopen_terminal/utils/documents.py178CODE
LOWopen_terminal/utils/fs.py41CODE
LOWopen_terminal/utils/file_compare.py34CODE
LOWopen_terminal/utils/file_compare.py121CODE
Excessive Try-Catch Wrapping19 hits · 18 pts
SeverityFileLineSnippetContext
LOWopen_terminal/config.py51 except Exception as exc:CODE
LOWopen_terminal/config.py62 except Exception as exc:CODE
LOWopen_terminal/cli.py108 except Exception:CODE
MEDIUMopen_terminal/main.py1131def walk_entries() -> list[tuple[str, str]]:CODE
LOW⚡open_terminal/main.py1883 except Exception:CODE
LOWopen_terminal/main.py801 except Exception:CODE
LOWopen_terminal/main.py2132 except Exception:CODE
LOWopen_terminal/main.py2375 except Exception:CODE
LOWopen_terminal/main.py2401 except Exception:CODE
LOWopen_terminal/utils/runner.py80 except Exception:CODE
LOWopen_terminal/utils/runner.py234 except Exception:CODE
MEDIUMopen_terminal/utils/runner.py229def _read_blocking():CODE
LOW⚡open_terminal/utils/notebooks.py70 except Exception:CODE
LOWopen_terminal/utils/notebooks.py153 except Exception as e:CODE
LOWopen_terminal/utils/notebooks.py164 except Exception as e:CODE
LOWopen_terminal/utils/notebooks.py211 except Exception as e:CODE
LOWopen_terminal/utils/notebooks.py244 except Exception:CODE
LOWopen_terminal/utils/file_compare.py98 except Exception as exc:CODE
LOWopen_terminal/utils/file_compare.py278 except Exception as exc:CODE
Cross-Language Confusion1 hit · 8 pts
SeverityFileLineSnippetContext
HIGH⚡open_terminal/main.py249 json_schema_extra={"examples": ["echo hello", "ls -la && whoami"]},CODE
Unused Imports5 hits · 5 pts
SeverityFileLineSnippetContext
LOWopen_terminal/utils/skills.py3CODE
LOWopen_terminal/utils/user_isolation.py121CODE
LOWopen_terminal/utils/user_isolation.py122CODE
LOWopen_terminal/utils/notebooks.py10CODE
LOWopen_terminal/utils/notebooks.py18CODE
Over-Commented Block3 hits · 3 pts
SeverityFileLineSnippetContext
LOWentrypoint-slim.sh1#!/bin/shCOMMENT
LOWentrypoint-slim.sh101 chown -R user:user "$home" 2>/dev/null || trueCOMMENT
LOWentrypoint.sh81 fiCOMMENT
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMopen_terminal/utils/fs.py54 # Swap /home/user (and /home/usr, a common LLM hallucination)COMMENT
Hyper-Verbose Identifiers4 hits · 2 pts
SeverityFileLineSnippetContext
LOWopen_terminal/config.py19def _default_user_config_path() -> Path:CODE
LOWopen_terminal/main.py89def _expand_system_prompt_template(template: str) -> str:CODE
LOWopen_terminal/main.py229async def normalize_null_query_params(request: Request, call_next):CODE
LOWopen_terminal/main.py1228 def content_matches_with_python(files: set[str]) -> dict[str, list[dict]]:CODE
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWopen_terminal/utils/runner.py278 def set_size(self, rows: int, cols: int) -> None:CODE
AI Structural Patterns1 hit · 0 pts
SeverityFileLineSnippetContext
LOWopen_terminal/main.py979CODE