AI Slop Code RIsk Monitor

tmux-python/tmuxp

🖥️ Session manager for tmux, built on libtmux.

22.5 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for tmux-python/tmuxp, a Python project with 4,589 GitHub stars. SynthScan examined 36,563 lines of code across 237 source files, recording 742 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 22.5 (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.

22.5
Adjusted Signal
22.5
Raw Pattern Score
100%
Time Factor
2026-10-03
Last Push
4.6K
Stars
Python
Language
36.6K
Lines of Code
237
Files
742
Pattern Hits
2026-10-12
Scan Date
0.04
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 56.0/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 15.1/100 · LOW

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

Agent Over-Engineering Ratio 58.8/100 · HIGH

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

PR Review Velocity Impact 66.2/100 · HIGH

Which changes need focused human review? 742 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 10MEDIUM 1LOW 731

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 742 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.

Hyper-Verbose Identifiers511 hits · 544 pts
SeverityFileLineSnippetContext
LOWconftest.py88def monkeypatch_plugin_test_packages(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWconftest.py121def pytest_collection_modifyitems(items: list[pytest.Item]) -> None:CODE
LOW⚡tests/test_plugin.py39def test_tmux_version_fail_min() -> None:CODE
LOW⚡tests/test_plugin.py46def test_tmux_version_fail_max() -> None:CODE
LOW⚡tests/test_plugin.py53def test_tmux_version_fail_incompatible() -> None:CODE
LOW⚡tests/test_plugin.py60def test_tmuxp_version_fail_min() -> None:CODE
LOW⚡tests/test_plugin.py67def test_tmuxp_version_fail_max() -> None:CODE
LOW⚡tests/test_plugin.py74def test_tmuxp_version_fail_incompatible() -> None:CODE
LOW⚡tests/test_plugin.py81def test_libtmux_version_fail_min() -> None:CODE
LOW⚡tests/test_plugin.py88def test_libtmux_version_fail_max() -> None:CODE
LOW⚡tests/test_plugin.py95def test_libtmux_version_fail_incompatible() -> None:CODE
LOW⚡tests/test_plugin.py102def test_plugin_version_check_logs_debug(CODE
LOWtests/test_util.py83def test_run_before_script_isatty(CODE
LOW⚡tests/test_util.py123def test_beforeload_returncode() -> None:CODE
LOW⚡tests/test_util.py132def test_beforeload_returns_stderr_messages() -> None:CODE
LOW⚡tests/test_util.py141def test_get_session_should_default_to_local_attached_session(CODE
LOWtests/test_util.py157def test_get_session_should_return_first_session_if_no_active_session(CODE
LOWtests/test_util.py172def test_get_pane_logs_debug_on_failure(CODE
LOWtests/test_util.py203def test_oh_my_zsh_auto_title_logs_warning(CODE
LOWtests/test_log.py18def test_level_colors_no_colorama() -> None:CODE
LOWtests/test_log.py26def test_log_formatter_format_plain_text() -> None:CODE
LOWtests/test_log.py43def test_debug_log_formatter_format_smoke() -> None:CODE
LOWtests/test_log.py59def test_timestamp_format_has_minutes() -> None:CODE
LOW⚡tests/test_log.py84def test_tmuxp_echo_default_stdout(capsys: pytest.CaptureFixture[str]) -> None:CODE
LOW⚡tests/test_log.py92def test_tmuxp_echo_to_stderr(capsys: pytest.CaptureFixture[str]) -> None:CODE
LOW⚡tests/test_log.py100def test_tmuxp_echo_none_is_no_op(capsys: pytest.CaptureFixture[str]) -> None:CODE
LOWtests/test_docs_tmux_layout.py45def test_arrange_fills_screen(case: ArrangeCase) -> None:CODE
LOWtests/test_docs_tmux_layout.py61def test_arrange_unknown_layout_raises() -> None:CODE
LOW⚡tests/test_docs_tmux_layout.py86def test_highlight_emits_pygments_classes(case: HighlightCase) -> None:CODE
LOW⚡tests/test_docs_tmux_layout.py93def test_highlight_leaves_command_builtin_default() -> None:CODE
LOW⚡tests/test_docs_tmux_layout.py99def test_highlight_escapes_markup() -> None:CODE
LOWtests/test_docs_tmux_layout.py161def test_parse_size_invalid_raises() -> None:CODE
LOWtests/test_docs_tmux_layout.py167def test_render_layout_structure() -> None:CODE
LOWtests/test_docs_tmux_layout.py178def test_render_layout_clips_compact_pane_text_without_rescaling() -> None:CODE
LOWtests/test_docs_tmux_layout.py200def test_setup_registers_components() -> None:CODE
LOW⚡tests/_internal/test_private_path.py14def test_private_path_collapses_home(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/_internal/test_private_path.py22def test_private_path_collapses_home_exact(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/_internal/test_private_path.py30def test_private_path_preserves_non_home(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/_internal/test_private_path.py38def test_private_path_preserves_tmp(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/_internal/test_private_path.py46def test_private_path_preserves_already_collapsed() -> None:CODE
LOWtests/_internal/test_private_path.py60def test_private_path_in_fstring(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/_internal/test_private_path.py69def test_private_path_similar_prefix_not_collapsed(CODE
LOWtests/_internal/test_private_path.py83def test_collapse_home_in_string_single_path(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/_internal/test_private_path.py91def test_collapse_home_in_string_multiple_paths(CODE
LOW⚡tests/_internal/test_private_path.py103def test_collapse_home_in_string_no_home_paths(CODE
LOW⚡tests/_internal/test_private_path.py113def test_collapse_home_in_string_mixed_paths(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOW⚡tests/_internal/test_private_path.py121def test_collapse_home_in_string_empty() -> None:CODE
LOW⚡tests/_internal/test_colors.py185def test_get_color_mode_none_returns_auto() -> None:CODE
LOW⚡tests/_internal/test_colors.py190def test_get_color_mode_auto_string() -> None:CODE
LOW⚡tests/_internal/test_colors.py195def test_get_color_mode_always_string() -> None:CODE
LOW⚡tests/_internal/test_colors.py200def test_get_color_mode_never_string() -> None:CODE
LOW⚡tests/_internal/test_colors.py205def test_get_color_mode_case_insensitive() -> None:CODE
LOW⚡tests/_internal/test_colors.py212def test_get_color_mode_invalid_returns_auto() -> None:CODE
LOW⚡tests/_internal/test_colors.py222def test_semantic_color_names() -> None:CODE
LOW⚡tests/_internal/test_colors.py278def test_style_with_empty_tuple() -> None:CODE
LOW⚡tests/_internal/test_colors.py286def test_style_with_rgb_value_too_high() -> None:CODE
LOW⚡tests/_internal/test_colors.py292def test_style_with_rgb_value_negative() -> None:CODE
LOW⚡tests/_internal/test_colors.py298def test_style_with_rgb_non_integer() -> None:CODE
LOW⚡tests/_internal/test_colors.py307def test_heading_applies_bright_cyan_bold(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWtests/_internal/test_colors.py41def test_auto_no_tty_disabled(monkeypatch: pytest.MonkeyPatch) -> None:CODE
451 more matches not shown…
Unused Imports123 hits · 120 pts
SeverityFileLineSnippetContext
LOWconftest.py11CODE
LOWtests/test_plugin.py3CODE
LOWtests/constants.py3CODE
LOWtests/test_util.py3CODE
LOWtests/test_log.py3CODE
LOWtests/test_docs_tmux_layout.py3CODE
LOWtests/test_shell.py3CODE
LOWtests/_internal/conftest.py3CODE
LOWtests/_internal/test_private_path.py3CODE
LOWtests/_internal/test_colors.py3CODE
LOWtests/_internal/test_colors_formatters.py3CODE
LOWtests/_internal/test_colors_integration.py3CODE
LOWtests/workspace/test_freezer.py3CODE
LOWtests/workspace/conftest.py3CODE
LOWtests/workspace/test_options.py3CODE
LOWtests/workspace/test_finders_local.py3CODE
LOWtests/workspace/test_import_teamocil.py3CODE
LOWtests/workspace/test_builder_registry.py3CODE
LOWtests/workspace/test_progress.py3CODE
LOWtests/workspace/test_finder.py3CODE
LOWtests/workspace/test_builder.py3CODE
LOWtests/workspace/test_config.py3CODE
LOWtests/workspace/test_import_tmuxinator.py3CODE
LOWtests/tests/test_helpers.py3CODE
LOWtests/cli/conftest.py3CODE
LOWtests/cli/test_freeze_colors.py3CODE
LOWtests/cli/test_search.py3CODE
LOWtests/cli/test_freeze.py3CODE
LOWtests/cli/test_ls.py3CODE
LOWtests/cli/test_convert.py3CODE
LOWtests/cli/test_output.py3CODE
LOWtests/cli/test_debug_info_colors.py3CODE
LOWtests/cli/test_progress.py3CODE
LOWtests/cli/test_shell_colors.py3CODE
LOWtests/cli/test_prompt_colors.py3CODE
LOWtests/cli/test_import.py3CODE
LOWtests/cli/test_convert_colors.py3CODE
LOWtests/cli/test_formatter.py3CODE
LOWtests/cli/test_debug_info.py3CODE
LOWtests/cli/test_edit_colors.py3CODE
LOWtests/cli/test_help_examples.py3CODE
LOWtests/cli/test_shell.py3CODE
LOWtests/cli/test_cli.py3CODE
LOWtests/cli/test_load.py3CODE
LOWtests/cli/test_import_colors.py3CODE
LOWdocs/conf.py3CODE
LOWdocs/_ext/conftest.py7CODE
LOWdocs/_ext/aafig.py15CODE
LOWdocs/_ext/tmux_layout.py34CODE
LOWsrc/tmuxp/log.py3CODE
LOWsrc/tmuxp/util.py3CODE
LOWsrc/tmuxp/shell.py4CODE
LOWsrc/tmuxp/__init__.py7CODE
LOWsrc/tmuxp/__init__.py11CODE
LOWsrc/tmuxp/__init__.py11CODE
LOWsrc/tmuxp/__init__.py12CODE
LOWsrc/tmuxp/__init__.py12CODE
LOWsrc/tmuxp/__init__.py12CODE
LOWsrc/tmuxp/__init__.py12CODE
LOWsrc/tmuxp/__init__.py12CODE
63 more matches not shown…
Empty Error Handlers10 hits · 50 pts
SeverityFileLineSnippetContext
HIGHdocs/_ext/aafig.py212except AafigError:CODE
HIGHsrc/tmuxp/util.py139except StopIteration:CODE
HIGHsrc/tmuxp/shell.py292except ImportError:CODE
HIGHsrc/tmuxp/workspace/builder/classic.py408except ObjectDoesNotExist:CODE
HIGHsrc/tmuxp/workspace/builder/classic.py687except (KeyError, IndexError):CODE
HIGHsrc/tmuxp/cli/import_config.py154except ImportError:CODE
HIGHsrc/tmuxp/cli/convert.py58except ImportError:CODE
HIGHsrc/tmuxp/cli/ls.py235except (yaml.YAMLError, json.JSONDecodeError, OSError):CODE
HIGHsrc/tmuxp/cli/search.py611except (yaml.YAMLError, json.JSONDecodeError, OSError):CODE
HIGHsrc/tmuxp/cli/load.py864except ImportError:CODE
Modern Structural Boilerplate45 hits · 44 pts
SeverityFileLineSnippetContext
LOWconftest.py29logger = logging.getLogger(__name__)CODE
LOWdocs/_ext/aafig.py40logger = logging.getLogger(__name__)CODE
LOWdocs/_ext/tmux_layout.py50logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/log.py12logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/util.py23logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/shell.py11logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/__init__.py23logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/types.py15logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/exc.py11logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/__about__.py7logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/plugin.py15logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/_compat.py6logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/_internal/config_reader.py12logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/_internal/__init__.py7logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/_internal/types.py19logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/_internal/private_path.py14logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/_internal/private_path.py145__all__ = ["PrivatePath", "collapse_home_in_string"]CODE
LOWsrc/tmuxp/_internal/colors.py52logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/freezer.py8logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/finders.py15logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/constants.py7logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/__init__.py7logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/importers.py8logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/loader.py10logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/validation.py10logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/workspace/builder/__init__.py32__all__ = [CODE
LOWsrc/tmuxp/workspace/builder/classic.py30logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/_colors.py26logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/_colors.py28__all__ = [CODE
LOWsrc/tmuxp/cli/_output.py32logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/import_config.py20logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/_formatter.py20logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/convert.py19logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/shell.py19logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/__init__.py62logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/debug_info.py24logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/edit.py16logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/ls.py50logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/utils.py19logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/utils.py25__all__ = [CODE
LOWsrc/tmuxp/cli/freeze.py25logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/search.py43logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/load.py39logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/_progress.py22logger = logging.getLogger(__name__)CODE
LOWsrc/tmuxp/cli/_progress.py904 def update_message(self, message: str) -> None:STRING
Deep Nesting25 hits · 25 pts
SeverityFileLineSnippetContext
LOWtests/workspace/test_finder.py425CODE
LOWtests/cli/test_help_examples.py13CODE
LOWtests/cli/test_help_examples.py42CODE
LOWdocs/_ext/aafig.py166CODE
LOWsrc/tmuxp/util.py28CODE
LOWsrc/tmuxp/util.py144CODE
LOWsrc/tmuxp/shell.py147CODE
LOWsrc/tmuxp/shell.py339CODE
LOWsrc/tmuxp/workspace/freezer.py59CODE
LOWsrc/tmuxp/workspace/finders.py285CODE
LOWsrc/tmuxp/workspace/importers.py116CODE
LOWsrc/tmuxp/workspace/loader.py68CODE
LOWsrc/tmuxp/workspace/loader.py197CODE
LOWsrc/tmuxp/cli/_formatter.py172CODE
LOWsrc/tmuxp/cli/__init__.py281CODE
LOWsrc/tmuxp/cli/ls.py258CODE
LOWsrc/tmuxp/cli/ls.py399CODE
LOWsrc/tmuxp/cli/ls.py482CODE
LOWsrc/tmuxp/cli/search.py534CODE
LOWsrc/tmuxp/cli/search.py676CODE
LOWsrc/tmuxp/cli/load.py134CODE
LOWsrc/tmuxp/cli/load.py342CODE
LOWsrc/tmuxp/cli/load.py459CODE
LOWsrc/tmuxp/cli/_progress.py439CODE
LOWsrc/tmuxp/cli/_progress.py787CODE
Structural Annotation Overuse11 hits · 19 pts
SeverityFileLineSnippetContext
LOW.claude/skills/update-libtmux/SKILL.md29## Step 0: PreflightCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md59## Step 1: Study upstream changesCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md112## Step 2: Create branchCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md120## Step 3: Package commitCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md174## Step 4: Code commit(s) — if neededCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md218## Step 5: Test commit(s) — if neededCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md249## Step 6: CHANGES commitCOMMENT
LOW.claude/skills/update-libtmux/SKILL.md286## Step 7: Push and open PRCOMMENT
LOW⚡.github/issue_template.md5### Step 1: Provide a summary of your problemCOMMENT
LOW⚡.github/issue_template.md9### Step 2: Provide tmuxp detailsCOMMENT
LOW⚡.github/issue_template.md14### Step 3: Describe the problem:COMMENT
Excessive Try-Catch Wrapping8 hits · 8 pts
SeverityFileLineSnippetContext
LOWdocs/_ext/aafig.py206 except Exception as e:CODE
LOWsrc/tmuxp/log.py160 except Exception as e:CODE
LOWsrc/tmuxp/util.py162 except Exception as e:CODE
LOWsrc/tmuxp/util.py184 except Exception as e:CODE
LOWsrc/tmuxp/util.py203 except Exception as e:CODE
LOWsrc/tmuxp/workspace/builder/classic.py70 except Exception:CODE
LOWsrc/tmuxp/workspace/builder/classic.py537 except Exception:CODE
LOWsrc/tmuxp/cli/load.py667 except Exception:CODE
Redundant / Tautological Comments4 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/workspace/test_builder.py337 # Print output for easier debugging if assertion failsCOMMENT
LOWtests/cli/test_debug_info.py158 # Set SHELL to a path under home directoryCOMMENT
LOWsrc/tmuxp/cli/search.py230 # Check if prefix is a valid field aliasCOMMENT
LOWsrc/tmuxp/cli/search.py1301 # Output resultsCOMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMtests/cli/test_prompt_colors.py134 # Create a path under the user's home directoryCOMMENT
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpyproject.toml261"src/tmuxp/cli/*.py" = ["PTH"]COMMENT
LOWtests/workspace/test_config.py101}COMMENT
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsrc/tmuxp/_internal/colors.py735CODE
LOWsrc/tmuxp/cli/load.py459CODE