AI Slop Code RIsk Monitor

EvoScientist/EvoScientist

🔬 Harness Vibe Research with Self-evolving AI Scientists

52.5 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for EvoScientist/EvoScientist, a Python project with 4,976 GitHub stars. SynthScan examined 196,369 lines of code across 514 source files, recording 7290 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 52.5 (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.

52.5
Adjusted Signal
52.5
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
5.0K
Stars
Python
Language
196.4K
Lines of Code
514
Files
7.3K
Pattern Hits
2026-10-12
Scan Date
0.53
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 65.5/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 15.7/100 · LOW

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

Agent Over-Engineering Ratio 90.4/100 · CRITICAL

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

PR Review Velocity Impact 93.7/100 · CRITICAL

Which changes need focused human review? 7290 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 273MEDIUM 1098LOW 5918

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 7290 distinct pattern matches across 21 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 Identifiers4354 hits · 3737 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_hitl.py23 def test_interrupt_event_structure(self):CODE
LOW⚡tests/test_hitl.py37 def test_interrupt_defaults_review_configs(self):CODE
LOW⚡tests/test_hitl.py41 def test_interrupt_multiple_action_requests(self):CODE
LOW⚡tests/test_hitl.py56 def test_handle_interrupt_sets_pending(self):CODE
LOW⚡tests/test_hitl.py108 def test_empty_requests_auto_approves(self):CODE
LOW⚡tests/test_hitl.py115 def test_session_auto_approve(self):CODE
LOW⚡tests/test_hitl.py389 def test_auto_approve_default(self):CODE
LOW⚡tests/test_hitl.py419 def test_shell_allow_list_set(self):CODE
LOW⚡tests/test_hitl.py432 async def test_interrupt_from_updates_mode(self):CODE
LOW⚡tests/test_hitl.py490 def test_parse_approval_approve(self):CODE
LOW⚡tests/test_hitl.py496 def test_parse_approval_reject(self):CODE
LOW⚡tests/test_hitl.py541 def test_should_auto_approve_non_execute(self):CODE
LOW⚡tests/test_hitl.py548 def test_should_auto_approve_empty(self):CODE
LOW⚡tests/test_hitl.py553 def test_should_auto_approve_execute_no_allowlist(self):CODE
LOW⚡tests/test_hitl.py667 async def test_register_and_resolve_reply(self):CODE
LOW⚡tests/test_hitl.py708 def test_prompt_fn_called_for_execute(self):CODE
LOW⚡tests/test_hitl.py800 def test_hitl_interrupt_on_helper_arms_every_shell_tool(self):CODE
LOW⚡tests/test_hitl.py1038 def test_dangerous_is_approved_under_session_grant(self):CODE
LOW⚡tests/test_hitl.py1139 def test_async_factory_guards_research_agents(self, workspace):CODE
LOW⚡tests/test_hitl.py1147 def test_async_factory_does_not_guard_internal_agents(self, workspace):CODE
LOW⚡tests/test_hitl.py1157 def test_delegation_prompt_explains_blocked_command_relay(self):CODE
LOWtests/test_hitl.py69 def test_pending_interrupt_starts_none(self):CODE
LOWtests/test_hitl.py73 def test_interrupt_does_not_affect_other_state(self):CODE
LOWtests/test_hitl.py87 def test_done_after_interrupt_preserves_pending(self):CODE
LOWtests/test_hitl.py133 def test_display_auto_approve_config_true(self):CODE
LOWtests/test_hitl.py159 def test_non_execute_tool_auto_approves(self):CODE
LOWtests/test_hitl.py185 def test_execute_with_matching_allow_list(self):CODE
LOWtests/test_hitl.py211 def test_execute_not_in_allow_list_prompts(self):CODE
LOWtests/test_hitl.py242 def test_run_in_background_not_in_allow_list_prompts(self):CODE
LOWtests/test_hitl.py277 def test_run_in_background_in_allow_list_auto_approves(self):CODE
LOWtests/test_hitl.py307 def test_delete_only_request_prompts_not_auto_approved(self):CODE
LOWtests/test_hitl.py340 def test_rich_cli_approve_all_keeps_policy_reject(self):CODE
LOWtests/test_hitl.py401 def test_shell_allow_list_default(self):CODE
LOWtests/test_hitl.py469 async def test_updates_without_interrupt_skipped(self):CODE
LOWtests/test_hitl.py508 def test_parse_approval_unrecognized(self):CODE
LOWtests/test_hitl.py515 def test_format_approval_prompt(self):CODE
LOWtests/test_hitl.py529 def test_format_approval_prompt_multiple(self):CODE
LOWtests/test_hitl.py571 def test_should_auto_approve_run_in_background_no_allowlist(self):CODE
LOWtests/test_hitl.py588 def test_should_auto_approve_config_true(self):CODE
LOWtests/test_hitl.py603 def test_should_auto_approve_allowlist_match(self):CODE
LOWtests/test_hitl.py619 def test_should_auto_approve_delete_not_cleared(self):CODE
LOWtests/test_hitl.py637 def test_dangerous_mode_approves_always_prompt_tools(self):CODE
LOWtests/test_hitl.py683 def test_try_resolve_no_pending(self):CODE
LOWtests/test_hitl.py691 async def test_reply_timeout_returns_none(self):CODE
LOWtests/test_hitl.py738 def test_prompt_fn_not_called_for_auto_approve(self):CODE
LOWtests/test_hitl.py766 def test_prompt_fn_not_called_for_non_execute(self):CODE
LOWtests/test_hitl.py811 def test_hitl_when_arms_by_default_outside_a_run(self):CODE
LOWtests/test_hitl.py818 def test_hitl_when_disarms_when_run_is_suppressed(self, monkeypatch):CODE
LOWtests/test_hitl.py835 def test_hitl_when_reads_the_requests_own_runtime_config(self):CODE
LOWtests/test_hitl.py852 def test_hitl_interrupt_on_reaches_create_deep_agent(self, workspace):CODE
LOWtests/test_hitl.py916 def test_dangerous_command_rejected_under_auto_approve(self, monkeypatch):CODE
LOWtests/test_hitl.py937 def test_everyday_command_approved_under_auto_approve(self, monkeypatch):CODE
LOWtests/test_hitl.py950 def test_session_grant_blanket_approves_dangerous(self, monkeypatch):CODE
LOWtests/test_hitl.py965 def test_interactive_dangerous_calls_prompt(self, monkeypatch):CODE
LOWtests/test_hitl.py985 def test_schedule_task_always_prompts_not_auto_cleared(self, monkeypatch):CODE
LOWtests/test_hitl.py1008 def test_malformed_request_is_not_auto_approved(self, monkeypatch):CODE
LOWtests/test_hitl.py1054 def test_length_matches_all_approved(self):CODE
LOWtests/test_hitl.py1065 def test_empty_batch_returns_empty(self):CODE
LOWtests/test_hitl.py1076 def test_get_default_backend_applies_forced_guard(self, workspace):CODE
LOWtests/test_hitl.py1092 def test_get_default_backend_guard_defaults_false(self, workspace):CODE
4294 more matches not shown…
Decorative Section Separators1050 hits · 3637 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_hitl.py17# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py19# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py50# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py52# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py102# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py104# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py383# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py385# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py426# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py428# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py484# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py486# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py657# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py659# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py702# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py704# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py792# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py794# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py1027# =============================================================================COMMENT
MEDIUM⚡tests/test_hitl.py1029# =============================================================================COMMENT
MEDIUMtests/test_hitl.py898# =============================================================================COMMENT
MEDIUMtests/test_hitl.py900# =============================================================================COMMENT
MEDIUM⚡tests/test_tool_error_handler.py14# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py16# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py26# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py28# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py74# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py76# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py143# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py145# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py204# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_tool_error_handler.py206# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_ccproxy_manager.py86# =============================================================================COMMENT
MEDIUM⚡tests/test_ccproxy_manager.py88# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py22# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py24# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py40# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py42# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py124# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py126# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py199# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py201# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py220# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py222# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py246# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py248# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py272# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py274# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py288# =============================================================================COMMENT
MEDIUMtests/test_ccproxy_manager.py290# =============================================================================COMMENT
MEDIUM⚡tests/test_serde_default_rich_exception.py32# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_serde_default_rich_exception.py34# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_serde_default_rich_exception.py139# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_serde_default_rich_exception.py141# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_serde_default_rich_exception.py206# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_serde_default_rich_exception.py209# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_stream_state.py10# =============================================================================COMMENT
MEDIUM⚡tests/test_stream_state.py12# =============================================================================COMMENT
MEDIUM⚡tests/test_stream_state.py63# =============================================================================COMMENT
MEDIUM⚡tests/test_stream_state.py65# =============================================================================COMMENT
990 more matches not shown…
Empty Error Handlers230 hits · 1148 pts
SeverityFileLineSnippetContext
HIGHtests/test_wechat_channel.py249except ImportError:CODE
HIGHtests/test_background_middleware.py90except Exception:CODE
HIGHtests/test_agent_loader.py161except asyncio.CancelledError:CODE
HIGHtests/test_cli_channel_bridge.py88except asyncio.CancelledError:CODE
HIGHtests/test_cli_channel_bridge.py123except asyncio.CancelledError:CODE
HIGHtests/test_sessions.py223except OSError:CODE
HIGHtests/test_sessions.py744except OSError:CODE
HIGHtests/test_sessions.py748except OSError:CODE
HIGHtests/test_sessions.py1176except OSError:CODE
HIGHtests/test_sessions.py1439except OSError:CODE
HIGHtests/test_sessions.py1443except OSError:CODE
HIGHtests/test_sessions.py1774except OSError:CODE
HIGHtests/test_sessions.py1778except OSError:CODE
HIGHtests/test_mcp_client.py818except psutil.NoSuchProcess:CODE
HIGHtests/test_mcp_client.py852except psutil.NoSuchProcess:CODE
HIGHtests/test_langgraph_manager.py189except OSError:CODE
HIGHtests/test_langgraph_manager.py870except FileNotFoundError:CODE
HIGHtests/test_langgraph_manager.py885except FileNotFoundError:CODE
HIGHtests/test_langgraph_manager.py912except FileNotFoundError:CODE
HIGHtests/test_langgraph_manager.py933except FileNotFoundError:CODE
HIGHtests/test_langgraph_manager.py1019except FileNotFoundError:CODE
HIGHtests/test_langgraph_manager.py1032except FileNotFoundError:CODE
HIGHtests/test_langgraph_manager.py794except FileNotFoundError:CODE
HIGHtests/test_bus_integration.py110except asyncio.CancelledError:CODE
HIGHtests/test_bus_integration.py157except asyncio.CancelledError:CODE
HIGHtests/test_bus_integration.py204except asyncio.CancelledError:CODE
HIGHtests/test_bus_integration.py266except asyncio.CancelledError:CODE
HIGHtests/test_bus_integration.py463except asyncio.CancelledError:CODE
HIGHtests/test_bus_integration.py627except asyncio.CancelledError:CODE
HIGHtests/test_bus_integration.py681except asyncio.CancelledError:CODE
HIGHtests/test_channel_debug.py331except asyncio.CancelledError:CODE
HIGHtests/test_channel_debug.py305except asyncio.CancelledError:CODE
HIGHtests/test_channel_debug.py379except RuntimeError:CODE
HIGHtests/test_background.py44except Exception:CODE
HIGHtests/test_agent_shell.py704except (psutil.Error, TypeError):CODE
HIGHtests/test_agent_shell.py836except (psutil.Error, TypeError):CODE
HIGHtests/test_stream_recovery.py91except Exception:CODE
HIGHtests/test_stream_recovery.py303except asyncio.CancelledError:CODE
HIGHtests/test_async_notifier.py458except RuntimeError:CODE
HIGHtests/test_tui_banner_position.py108except SystemExit:CODE
HIGHtests/test_channel_comprehensive.py70except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py1556except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py1583except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py1614except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py1651except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py1726except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py1763except asyncio.CancelledError:CODE
HIGHtests/test_channel_comprehensive.py2242except asyncio.CancelledError:CODE
HIGHtests/test_workspace_injection.py207except RuntimeError:CODE
HIGHEvoScientist/sessions.py1247except aiosqlite.Error:CODE
HIGHEvoScientist/sessions.py1519except Exception:CODE
HIGHEvoScientist/sessions.py1332except Exception: # pragma: no cover - never let UI break sweepCODE
HIGHEvoScientist/sessions.py1869except (ValueError, TypeError):CODE
HIGHEvoScientist/background.py226except Exception:CODE
HIGHEvoScientist/background.py390except ProcessLookupError:CODE
HIGHEvoScientist/background.py384except (psutil.NoSuchProcess, psutil.AccessDenied):CODE
HIGHEvoScientist/runtime.py317except concurrent.futures.InvalidStateError:CODE
HIGHEvoScientist/runtime.py324except concurrent.futures.InvalidStateError:CODE
HIGHEvoScientist/runtime.py343except RuntimeError:CODE
HIGHEvoScientist/runtime.py550except RuntimeError:CODE
170 more matches not shown…
Excessive Try-Catch Wrapping555 hits · 490 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_tool_error_handler.py68 except Exception:CODE
LOWtests/test_background_middleware.py90 except Exception:CODE
LOWtests/test_observation_memory.py480 except Exception as exc:CODE
MEDIUMtests/test_stream_utils.py41 content = '#!/usr/bin/env python3\n"""\nSkill Packager\n"""\n\nprint(f"Error: not found")'CODE
LOWtests/test_bus_integration.py23 except Exception:CODE
LOW⚡tests/test_background.py44 except Exception:CODE
MEDIUMtests/test_agent_shell.py420def churn(group):CODE
LOWtests/test_agent_shell.py425 except Exception as exc:CODE
LOWtests/test_stream_recovery.py91 except Exception:CODE
LOW⚡EvoScientist/sessions.py463 except Exception: # pragma: no cover - defensive (config import errors)CODE
LOW⚡EvoScientist/sessions.py534 except Exception as exc:CODE
LOW⚡EvoScientist/sessions.py1519 except Exception:CODE
LOWEvoScientist/sessions.py241 except Exception as exc: # pragma: no cover - defensiveCODE
LOWEvoScientist/sessions.py346 except Exception as exc:CODE
LOWEvoScientist/sessions.py762 except Exception as exc:CODE
LOWEvoScientist/sessions.py1416 except Exception as exc:CODE
LOWEvoScientist/sessions.py1703 except Exception:CODE
LOWEvoScientist/sessions.py1979 except Exception:CODE
LOWEvoScientist/sessions.py2041 except Exception:CODE
LOWEvoScientist/sessions.py1332 except Exception: # pragma: no cover - never let UI break sweepSTRING
LOWEvoScientist/sessions.py1861 except Exception:STRING
LOWEvoScientist/paths.py333except Exception:CODE
LOWEvoScientist/update_check.py44 except Exception:CODE
LOWEvoScientist/update_check.py57 except Exception:CODE
LOWEvoScientist/update_check.py68 except Exception:CODE
LOWEvoScientist/background.py226 except Exception:CODE
LOWEvoScientist/backends.py405 except Exception:CODE
LOWEvoScientist/backends.py516 except Exception:CODE
LOWEvoScientist/backends.py1546 except Exception:CODE
LOWEvoScientist/backends.py1559 except Exception:CODE
LOWEvoScientist/backends.py2169 except Exception as exc:CODE
LOWEvoScientist/ccproxy_manager.py74 except Exception:CODE
LOW⚡EvoScientist/ccproxy_manager.py166 except Exception as exc:CODE
LOWEvoScientist/ccproxy_manager.py266 except Exception:CODE
LOWEvoScientist/stt.py133 except Exception as e:CODE
LOWEvoScientist/middleware/expert_async_subagent.py401 except Exception as e:CODE
LOWEvoScientist/middleware/expert_async_subagent.py449 except Exception as e:CODE
LOWEvoScientist/middleware/context_overflow.py36 except Exception as exc:CODE
LOWEvoScientist/middleware/context_overflow.py54 except Exception as exc:CODE
LOWEvoScientist/middleware/memory.py324 except Exception:CODE
LOWEvoScientist/middleware/memory.py774 except Exception as e:CODE
LOWEvoScientist/middleware/memory.py785 except Exception as e:CODE
LOWEvoScientist/middleware/memory.py836 except Exception as e:CODE
LOWEvoScientist/middleware/model_fallback.py323 except Exception as fb_exc:CODE
LOWEvoScientist/middleware/model_fallback.py393 except Exception as fb_exc:CODE
LOWEvoScientist/middleware/model_fallback.py525 except Exception as exc:CODE
LOWEvoScientist/middleware/model_fallback.py543 except Exception as exc:CODE
LOWEvoScientist/middleware/events.py378 except Exception:CODE
LOWEvoScientist/middleware/tool_selector.py96 except Exception:CODE
LOWEvoScientist/middleware/tool_selector.py299 except Exception as exc:CODE
LOWEvoScientist/middleware/tool_selector.py307 except Exception as exc:CODE
LOW⚡EvoScientist/middleware/tool_selector.py361 except Exception as exc:CODE
LOW⚡EvoScientist/middleware/tool_selector.py369 except Exception as exc:CODE
LOWEvoScientist/middleware/configurable_model.py60 except Exception:CODE
LOWEvoScientist/middleware/configurable_model.py158 except Exception:CODE
LOWEvoScientist/middleware/configurable_model.py186 except Exception:CODE
LOWEvoScientist/middleware/error_normalization.py318 except Exception as exc:CODE
LOWEvoScientist/middleware/error_normalization.py331 except Exception as exc:CODE
LOWEvoScientist/middleware/background.py75 except Exception:CODE
LOWEvoScientist/middleware/active_team.py78 except Exception:CODE
495 more matches not shown…
Unused Imports531 hits · 484 pts
SeverityFileLineSnippetContext
LOWtests/test_setup_install.py3CODE
LOWtests/test_serde_default_rich_exception.py17CODE
LOWtests/test_serve_agent_holder.py9CODE
LOWtests/test_middleware_utils.py8CODE
LOWtests/test_channel_notification_origin.py4CODE
LOWtests/test_message_meta.py3CODE
LOWtests/stream_v3_fakes.py3CODE
LOWtests/test_thread_selector.py3CODE
LOWtests/test_cli_resume_flag.py3CODE
LOWtests/test_configurable_model_middleware.py9CODE
LOWtests/test_cron_scoping.py3CODE
LOWtests/test_agent_shell_env.py3CODE
LOWtests/test_wechat_channel.py241CODE
LOWtests/test_wechat_channel.py246CODE
LOWtests/test_async_subagent_swap.py8CODE
LOWtests/test_autoskills.py1CODE
LOWtests/test_async_subagent_factory.py10CODE
LOWtests/test_async_subagent_factory.py16CODE
LOWtests/test_setup_webui.py3CODE
LOWtests/test_route_async_specs.py13CODE
LOWtests/test_observation_memory.py1CODE
LOWtests/test_active_team_middleware.py3CODE
LOWtests/test_cli_async_runtime.py9CODE
LOWtests/test_langgraph_dev_server_env.py7CODE
LOWtests/test_llm.py11CODE
LOWtests/test_file_mentions.py3CODE
LOWtests/test_langgraph_schema_generator_silenced.py11CODE
LOWtests/test_picker_widgets.py11CODE
LOWtests/test_error_normalization_middleware.py10CODE
LOWtests/test_agent_loader.py3CODE
LOWtests/test_command_goto_none_crash.py35CODE
LOWtests/test_command_goto_none_crash.py48CODE
LOWtests/test_expert_container.py3CODE
LOWtests/test_langgraph_dev_stream_transformers.py15CODE
LOWtests/test_tui_completion_window.py11CODE
LOWtests/test_load_subagents.py8CODE
LOWtests/test_langgraph_dev_http.py6CODE
LOWtests/test_langgraph_dev_workspace_sidecar.py17CODE
LOWtests/test_cli_serve.py3CODE
LOWtests/test_runtime.py3CODE
LOWtests/test_mcp_client.py392CODE
LOWtests/test_mcp_client.py615CODE
LOWtests/test_graph_gateway.py3CODE
LOWtests/test_experts_command.py3CODE
LOWtests/test_skills_reload_middleware.py3CODE
LOWtests/test_middleware_event_sink.py11CODE
LOWtests/test_cli_workspace_resolution.py3CODE
LOWtests/test_langgraph_dev_sdk.py3CODE
LOWtests/test_subagent_summarize.py10CODE
LOWtests/test_tui_stream_lifecycle.py3CODE
LOWtests/test_ollama_discovery.py9CODE
LOWtests/test_langgraph_manager.py8CODE
LOWtests/test_cli_channel_bus_mode.py3CODE
LOWtests/test_gateway_composite.py3CODE
LOWtests/test_stream_cancel.py3CODE
LOWtests/test_panel_widget.py10CODE
LOWtests/test_agent_mcp_cache.py3CODE
LOWtests/test_profile_memory_middleware.py1CODE
LOWtests/test_gateway_background_runs.py1CODE
LOWtests/test_tui_widgets.py7CODE
471 more matches not shown…
Cross-Language Confusion28 hits · 159 pts
SeverityFileLineSnippetContext
HIGH⚡tests/test_background_middleware.py208 {"command": "cat /etc/hosts && cat ../x"}CODE
HIGH⚡tests/test_background_middleware.py211 assert captured["command"] == "cat /etc/hosts && cat ../x" # no ./ rewriteCODE
HIGHtests/test_langgraph_dev_workspace_sidecar.py83 '{"workspace": null}', # workspace present but null → Path(None) TypeErrorCODE
HIGH⚡tests/test_backends.py113 result = validate_command("cd /etc && cat passwd")CODE
HIGH⚡tests/test_backends.py141 assert validate_command("cd /etc && ls", dangerous=True) is NoneCODE
HIGH⚡tests/test_backends.py1423 "cat /data/file.txt && ssh host 'ls /home/username/project'",CODE
HIGH⚡tests/test_backends.py1430 == "cat ./data/file.txt && ssh host 'ls /home/username/project'"CODE
HIGH⚡tests/test_backends.py1564 command = "cat /data/file.txt && ssh host 'ls /home/username/project'"CODE
HIGH⚡tests/test_backends.py1571 == "cat ./data/file.txt && ssh host 'ls /home/username/project'"CODE
HIGH⚡tests/test_backends.py1777 result = validate_command("echo ok && chmod 777 file")CODE
HIGH⚡tests/test_backends.py1793 assert validate_command("mkdir build && cd build") is NoneCODE
HIGH⚡tests/test_backends.py2149 assert check_dangerous_command("a || bash") is NoneCODE
HIGH⚡tests/test_backends.py2150 assert check_dangerous_command("a && bash") is NoneCODE
HIGH⚡tests/test_backends.py2398 "ls -la && curl http://x -o y",CODE
HIGH⚡tests/test_backends.py2399 "ls -la || rm x",CODE
HIGHtests/test_backends.py1277 command = f"mkdir -p {tmp_workspace}/test-sanitized && echo ok"CODE
HIGHtests/test_backends.py1465 command = "echo __EVOSCI_SSH_REMOTE_0__ && ssh host 'ls /home'"CODE
HIGH⚡tests/test_backends.py1776 """chmod after && should be caught."""STRING
HIGH⚡tests/test_backends.py1792 """Normal && chains should be fine."""STRING
HIGH⚡EvoScientist/backends.py804 "for example: ssh host 'cd /home/user/project && python train.py'."CODE
HIGHEvoScientist/backends.py457 a chain (``a; b``, ``a && b``, ``a | b``) must match, so an allow-listedSTRING
HIGHEvoScientist/backends.py685 >>> [(i, h, r, e) for _, i, h, r, e in _ssh_invocations("cat x && ssh -p 22 host 'pwd'")]STRING
HIGHEvoScientist/backends.py732 >>> _ssh_remote_command_spans("cat /tmp/x && ssh host 'pwd'")STRING
HIGHEvoScientist/middleware/error_normalization.py10``{"message": …, "status_code": …, "body": …, "headers": null,STRING
HIGHEvoScientist/middleware/error_normalization.py11"raw_response": null, "data": {…}}`` with no ``error`` / ``class`` /STRING
HIGHEvoScientist/subagents/_factory.py54# criteria ``oneOf`` (every entry comes back null), Anthropic JSON mode returnsCOMMENT
HIGHEvoScientist/langgraph_dev/http.py189 the interrupt delivers). Response: ``{"decisions": list[dict] | null}`` —STRING
HIGHEvoScientist/langgraph_dev/manager.py337 ``{"workspace": null}`` or ``{"workspace": []}`` would parse fine, passSTRING
Modern Structural Boilerplate152 hits · 156 pts
SeverityFileLineSnippetContext
LOW⚡tests/fakes.py122 def update_status_after_compact(self, tokens_after: int) -> None:CODE
LOWEvoScientist/sessions.py1176async def _set_user_version(conn: aiosqlite.Connection, version: int) -> None:STRING
LOW⚡EvoScientist/EvoScientist.py110def set_active_config(cfg) -> None:CODE
LOWEvoScientist/EvoScientist.py238def set_chat_model_instance(instance, key: tuple[str | None, str | None]) -> None:CODE
LOWEvoScientist/git_cli.py16logger = logging.getLogger(__name__)CODE
LOWEvoScientist/paths.py14logger = logging.getLogger(__name__)CODE
LOWEvoScientist/update_check.py16logger = logging.getLogger(__name__)CODE
LOWEvoScientist/background.py34logger = logging.getLogger(__name__)CODE
LOWEvoScientist/runtime.py28logger = logging.getLogger(__name__)CODE
LOWEvoScientist/runtime.py217 def _settle_abandoned_tasks(self) -> None:CODE
LOWEvoScientist/runtime.py314 def _set_handle_result(handle: RuntimeHandle[Any], result: Any) -> None:CODE
LOWEvoScientist/runtime.py321 def _set_handle_exception(handle: RuntimeHandle[Any], exc: BaseException) -> None:CODE
LOWEvoScientist/runtime.py562__all__ = [CODE
LOWEvoScientist/utils.py17logger = logging.getLogger(__name__)CODE
LOW⚡EvoScientist/ccproxy_manager.py21logger = logging.getLogger(__name__)CODE
LOWEvoScientist/stt.py23logger = logging.getLogger(__name__)CODE
LOWEvoScientist/agent_shell.py39logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/context_overflow.py21logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/code_interpreter.py47logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/memory.py44logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/model_fallback.py31logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/model_fallback.py153def set_fallback_chain(chain: list[tuple[str, str]]) -> None:CODE
LOWEvoScientist/middleware/tool_selector.py43logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/configurable_model.py44logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/__init__.py46__all__ = [CODE
LOW⚡EvoScientist/middleware/ask_user.py37logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/tool_history_repair.py45logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/summarization.py50logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/memory_lifecycle.py23logger = logging.getLogger(__name__)CODE
LOWEvoScientist/middleware/tool_error_handler.py33logger = logging.getLogger(__name__)CODE
LOWEvoScientist/tools/__init__.py11__all__ = [CODE
LOW⚡EvoScientist/llm/deepseek.py15logger = logging.getLogger(__name__)CODE
LOWEvoScientist/subagents/_factory.py40logger = logging.getLogger(__name__)CODE
LOWEvoScientist/memory/__init__.py34__all__ = [CODE
LOWEvoScientist/memory/scheduler.py21logger = logging.getLogger(__name__)CODE
LOW⚡EvoScientist/memory/agents/memory_worker.py35logger = logging.getLogger(__name__)CODE
LOWEvoScientist/memory/agents/__init__.py9__all__ = [CODE
LOWEvoScientist/memory/agents/observation_linker.py24logger = logging.getLogger(__name__)CODE
LOWEvoScientist/memory/observations/tools.py31logger = logging.getLogger(__name__)CODE
LOWEvoScientist/memory/observations/__init__.py40__all__ = [CODE
LOWEvoScientist/config/__init__.py32__all__ = [CODE
LOWEvoScientist/config/onboard/prompter.py115__all__ = [CODE
LOWEvoScientist/config/onboard/constants.py50__all__ = [CODE
LOWEvoScientist/config/onboard/__init__.py34__all__ = ["run_onboard"]CODE
LOWEvoScientist/deploy/__init__.py22__all__ = ["server"]CODE
LOWEvoScientist/deploy/launcher.py42logger = logging.getLogger(__name__)CODE
LOWEvoScientist/deploy/busy.py16logger = logging.getLogger(__name__)CODE
LOWEvoScientist/stream/sink.py24logger = logging.getLogger(__name__)CODE
LOWEvoScientist/setup/git.py58logger = logging.getLogger(__name__)CODE
LOWEvoScientist/setup/webui.py40logger = logging.getLogger(__name__)CODE
LOWEvoScientist/setup/webui.py849__all__ = [CODE
LOWEvoScientist/setup/__init__.py18logger = logging.getLogger(__name__)CODE
LOWEvoScientist/setup/__init__.py121__all__ = [CODE
LOWEvoScientist/setup/node.py49logger = logging.getLogger(__name__)CODE
LOWEvoScientist/setup/_install.py13logger = logging.getLogger(__name__)CODE
LOWEvoScientist/setup/research_env.py39logger = logging.getLogger(__name__)CODE
LOW⚡EvoScientist/mcp/registry.py29logger = logging.getLogger(__name__)CODE
LOW⚡EvoScientist/mcp/client.py26logger = logging.getLogger(__name__)CODE
LOWEvoScientist/mcp/__init__.py29__all__ = [CODE
LOW⚡EvoScientist/cli/rich_command_ui.py229 def update_status_after_compact(self, input_tokens: int) -> None:CODE
92 more matches not shown…
Deep Nesting187 hits · 140 pts
SeverityFileLineSnippetContext
LOWtests/test_hitl.py852CODE
LOWtests/test_graph_gateway.py2264CODE
LOWtests/test_model_fallback.py856CODE
LOWtests/test_setup_node.py28CODE
LOWtests/test_setup_research_env.py131CODE
LOWEvoScientist/sessions.py468CODE
LOWEvoScientist/sessions.py595CODE
LOWEvoScientist/sessions.py1726CODE
LOWEvoScientist/background.py355CODE
LOWEvoScientist/runtime.py456CODE
LOWEvoScientist/backends.py177CODE
LOWEvoScientist/backends.py317CODE
LOWEvoScientist/backends.py887CODE
LOWEvoScientist/backends.py1184CODE
LOWEvoScientist/backends.py1221CODE
LOWEvoScientist/backends.py1256CODE
LOWEvoScientist/backends.py1513CODE
LOWEvoScientist/backends.py1811CODE
LOWEvoScientist/backends.py2030CODE
LOWEvoScientist/utils.py43CODE
LOWEvoScientist/utils.py85CODE
LOWEvoScientist/ccproxy_manager.py55CODE
LOWEvoScientist/middleware/tool_selector.py75CODE
LOWEvoScientist/middleware/error_normalization.py64CODE
LOWEvoScientist/middleware/ask_user.py245CODE
LOWEvoScientist/middleware/tool_history_repair.py68CODE
LOWEvoScientist/middleware/tool_history_repair.py164CODE
LOWEvoScientist/tools/skills_manager.py818CODE
LOWEvoScientist/tools/skills_manager.py990CODE
LOWEvoScientist/tools/skills_manager.py1117CODE
LOWEvoScientist/tools/skills_manager.py1301CODE
LOWEvoScientist/tools/skill_manager.py11CODE
LOWEvoScientist/tools/skill_manager.py21CODE
LOWEvoScientist/llm/models.py391CODE
LOWEvoScientist/llm/patches.py51CODE
LOWEvoScientist/llm/patches.py95CODE
LOWEvoScientist/llm/patches.py356CODE
LOWEvoScientist/llm/patches.py393CODE
LOWEvoScientist/llm/patches.py874CODE
LOWEvoScientist/llm/patches.py1377CODE
LOWEvoScientist/memory/search.py92CODE
LOWEvoScientist/memory/autoskills/candidates.py124CODE
LOWEvoScientist/config/onboard/steps.py1160CODE
LOWEvoScientist/config/onboard/wizard.py69CODE
LOWEvoScientist/config/onboard/wizard.py171CODE
LOWEvoScientist/config/onboard/wizard.py509CODE
LOWEvoScientist/config/onboard/channels.py25CODE
LOWEvoScientist/config/onboard/channels.py828CODE
LOWEvoScientist/config/onboard/channels.py848CODE
LOWEvoScientist/config/onboard/helpers.py631CODE
LOWEvoScientist/deploy/launcher.py749CODE
LOWEvoScientist/deploy/launcher.py491CODE
LOWEvoScientist/stream/events.py971CODE
LOWEvoScientist/stream/events.py1025CODE
LOWEvoScientist/stream/events.py736CODE
LOWEvoScientist/stream/display.py282CODE
LOWEvoScientist/stream/display.py656CODE
LOWEvoScientist/stream/display.py1040CODE
LOWEvoScientist/stream/display.py1320CODE
LOWEvoScientist/stream/display.py1438CODE
127 more matches not shown…
Structural Annotation Overuse49 hits · 91 pts
SeverityFileLineSnippetContext
LOW⚡EvoScientist/prompts.py183## Step 5: Write ReportCOMMENT
LOW⚡EvoScientist/prompts.py189## Step 6: VerifyCOMMENT
LOWEvoScientist/prompts.py105## Step 3: Execute & DebugCOMMENT
LOWEvoScientist/prompts.py130## Step 4: Evaluate & IterateCOMMENT
LOW⚡EvoScientist/prompts.py88 return "\n".join(["## Step 1: Intake & Scope", *bullets])STRING
LOW⚡EvoScientist/prompts.py91_EXPERIMENT_WORKFLOW_EXECUTION = """## Step 2: Plan (Recommended Structure)STRING
LOWEvoScientist/config/onboard/helpers.py637 # Step 1: ValidateCOMMENT
LOWEvoScientist/config/onboard/helpers.py653 # Step 2: Offer to installCOMMENT
LOWEvoScientist/skills/find-skills/SKILL.md20## Step 1: Search for SkillsCOMMENT
LOWEvoScientist/skills/find-skills/SKILL.md42## Step 2: Present OptionsCOMMENT
LOWEvoScientist/skills/find-skills/SKILL.md50## Step 3: InstallCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md206### Step 1: Spawn all runs (with-skill AND baseline) using `task` toolCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md236### Step 2: While runs are in progress, draft assertionsCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md242### Step 3: As runs complete, capture timing dataCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md254### Step 4: Grade, aggregate, and launch the viewerCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md287### Step 5: Read the feedbackCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md330### Step 1: Generate trigger eval queriesCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md347### Step 2: Review with userCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md356### Step 3: Run the optimization loopCOMMENT
LOWEvoScientist/skills/skill-creator/SKILL.md377### Step 4: Apply the resultCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/grader.md21### Step 1: Read the TranscriptCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/grader.md27### Step 2: Examine Output FilesCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/grader.md33### Step 3: Evaluate Each AssertionCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/grader.md43### Step 4: Extract and Verify ClaimsCOMMENT
LOWEvoScientist/skills/skill-creator/agents/grader.md61### Step 5: Read User NotesCOMMENT
LOWEvoScientist/skills/skill-creator/agents/grader.md68### Step 6: Critique the EvalsCOMMENT
LOWEvoScientist/skills/skill-creator/agents/grader.md81### Step 7: Write Grading ResultsCOMMENT
LOWEvoScientist/skills/skill-creator/agents/grader.md101### Step 8: Read Executor Metrics and TimingCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md22### Step 1: Read Both OutputsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md29### Step 2: Understand the TaskCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md37### Step 3: Generate Evaluation RubricCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md60### Step 4: Evaluate Each Output Against the RubricCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md68### Step 5: Check Assertions (if provided)COMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md77### Step 6: Determine the WinnerCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/comparator.md87### Step 7: Write Comparison ResultsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md23### Step 1: Read Comparison ResultCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md29### Step 2: Read Both SkillsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md39### Step 3: Read Both TranscriptsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md49### Step 4: Analyze Instruction FollowingCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md59### Step 5: Identify Winner StrengthsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md69### Step 6: Identify Loser WeaknessesCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md77### Step 7: Generate Improvement SuggestionsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md87### Step 8: Write Analysis ResultsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md205### Step 1: Read Benchmark DataCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md211### Step 2: Analyze Per-Assertion PatternsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md220### Step 3: Analyze Cross-Eval PatternsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md227### Step 4: Analyze Metrics PatternsCOMMENT
LOW⚡EvoScientist/skills/skill-creator/agents/analyzer.md234### Step 5: Generate NotesCOMMENT
LOWEvoScientist/skills/skill-creator/agents/analyzer.md249### Step 6: Write NotesCOMMENT
Docstring Block Structure12 hits · 60 pts
SeverityFileLineSnippetContext
HIGHEvoScientist/__init__.py45Lazily import and cache package-level attributes. Args: name: The attribute name to look up. Returns: STRING
HIGHEvoScientist/ccproxy_manager.py203Start ccproxy serve as a background process. Args: port: Port number for the proxy server. Returns: STRING
HIGHEvoScientist/middleware/model_fallback.py269Walk the fallback chain, trying each model until one succeeds. Shared implementation for both sync and async middleSTRING
HIGHEvoScientist/middleware/model_fallback.py445Check non-fallbackable conditions, then delegate to ``_try_fallbacks``. Args: primary_exc: The exception raSTRING
HIGHEvoScientist/tools/skill_manager.py29Manage user-installable skills: install from GitHub or local path, list available skills, browse remote skills, get detaSTRING
HIGHEvoScientist/llm/models.py396Get a chat model instance. Args: model: Model name (short name like 'claude-sonnet-4-6' or full ID STRING
HIGHEvoScientist/subagents/_factory.py237Build a deployable graph for the ``name`` sub-agent defined in yaml. Args: name: The sub-agent's key in oneSTRING
HIGHEvoScientist/config/settings.py754Coerce a value to the expected field type. Args: value: The value to coerce. field_type: The targetSTRING
HIGHEvoScientist/langgraph_dev/manager.py906Start langgraph dev as a background subprocess. Args: workspace_dir: Working directory for the subprocess (STRING
HIGHEvoScientist/commands/implementation/model.py12Parse model name and provider from argument list. Args: args: Non-empty argument list (model_name [providerSTRING
HIGHEvoScientist/channels/imessage/targets.py150Parse an iMessage target string. Supports formats: - chat_id:123 - chat_guid:abc-def - chat_identifier:STRING
HIGHEvoScientist/channels/imessage/rpc_client.py127Send a JSON-RPC request and wait for response. Args: method: RPC method name params: MeSTRING
Over-Commented Block56 hits · 40 pts
SeverityFileLineSnippetContext
LOWtests/test_stt.py261# EvoSci config set stt_enabled trueCOMMENT
LOWEvoScientist/EvoScientist.py81# when config.model/provider change (e.g. via /model). Without this,COMMENT
LOWEvoScientist/EvoScientist.py381 )COMMENT
LOWEvoScientist/git_cli.py21# then open a credential helper window or wait for a username on the terminal.COMMENT
LOWEvoScientist/middleware/expert_async_subagent.py501 # all five tools using our config-injecting client cache below.COMMENT
LOWEvoScientist/middleware/summarization.py221 # Captured before any shim wraps it, so racing installers never nest shims.COMMENT
LOWEvoScientist/tools/skills_manager.py141 # "" — not an expertCOMMENT
LOWEvoScientist/tools/skills_manager.py181# is a package, a contract file is a capability, presence is the declaration,COMMENT
LOWEvoScientist/llm/context_window.py61 # Moonshot Kimi K3 — 1M context; covers bare ``kimi-k3`` (native Moonshot),COMMENT
LOWEvoScientist/llm/models.py461 base_url = os.environ.get("OPENAI_BASE_URL", "")COMMENT
LOWEvoScientist/llm/models.py541 # summary is returned for display. OpenAI-Responses also emits encryptedCOMMENT
LOWEvoScientist/llm/patches.py81COMMENT
LOWEvoScientist/llm/patches.py781 except Exception:COMMENT
LOWEvoScientist/llm/patches.py801# The fallback path is fine; the warning + traceback is just noise. AndCOMMENT
LOWEvoScientist/llm/patches.py841 # which is a benign fallback.COMMENT
LOWEvoScientist/llm/patches.py921 except Exception:COMMENT
LOWEvoScientist/llm/patches.py981# Moonshot's always-thinking models (kimi-k3).COMMENT
LOWEvoScientist/llm/patches.py1021 except Exception:COMMENT
LOWEvoScientist/llm/errors.py101 for.COMMENT
LOWEvoScientist/llm/errors.py161# Kept here rather than imported from ``models.py`` to keep theCOMMENT
LOWEvoScientist/subagents/_factory.py41COMMENT
LOWEvoScientist/subagents/_factory.py301COMMENT
LOWEvoScientist/subagents/expert_container_async.py141 "with status='error' explaining the skill is missing."COMMENT
LOWEvoScientist/subagents/expert_container_async.py281 # skills that share the same frontmatter ``name`` (workspace listingCOMMENT
LOWEvoScientist/subagents/expert_container_async.py361 # does NOT inherit the main agent's subagent stack. Without at leastCOMMENT
LOWEvoScientist/memory/observations/store.py361 )COMMENT
LOWEvoScientist/config/settings.py221 # data-analysis-agent. Adds ~10-15s to CLI startup (langgraph dev coldCOMMENT
LOWEvoScientist/config/settings.py241 langgraph_dev_host: str = "127.0.0.1"COMMENT
LOWEvoScientist/config/settings.py261 # back to UTC if it can't be determined; set e.g. "Europe/London" to pin one.COMMENT
LOWEvoScientist/config/settings.py281 # exits. The next `EvoSci` start in the same workspace reuses it instantlyCOMMENT
LOWEvoScientist/config/settings.py321 # each count as 1) before raising GraphRecursionError. Resets on everyCOMMENT
LOWEvoScientist/config/settings.py361 # cache. Each entry holds one parsed document keyed on the file path; atCOMMENT
LOWEvoScientist/config/settings.py381 mirror: Literal["default", "cn"] = "default"COMMENT
LOWEvoScientist/config/settings.py521 # ``EvoScientist/middleware/code_interpreter.py`` as a load-bearing safetyCOMMENT
LOWEvoScientist/config/settings.py1081COMMENT
LOWEvoScientist/mcp/client.py21COMMENT
LOWEvoScientist/mcp/client.py101COMMENT
LOWEvoScientist/mcp/client.py381COMMENT
LOWEvoScientist/mcp/client.py401# ``start_langgraph_dev`` while still leaving room for a first ``npx -y``COMMENT
LOWEvoScientist/cli/async_notifier.py201# below, one completion yields exactly one enqueue.COMMENT
LOWEvoScientist/cli/channel.py501# ``run_coroutine_threadsafe`` while the calling (main / TUI) thread blocksCOMMENT
LOWEvoScientist/cli/commands.py1961 # ``_message_queue.get(timeout=...)`` and land in the ``except``COMMENT
LOWEvoScientist/langgraph_dev/__init__.py21# loop that serves runs. Forcing the Proactor loop policy here — at import,COMMENT
LOWEvoScientist/langgraph_dev/main_graph.py41# Sanity check on the LangGraph internals ``_strip_private`` scrubs. If anyCOMMENT
LOWEvoScientist/langgraph_dev/manager.py141COMMENT
LOWEvoScientist/langgraph_dev/manager.py361 except OSError:COMMENT
LOWEvoScientist/langgraph_dev/manager.py381# a thread from a different workspace) and trigger a restart so the deployedCOMMENT
LOWEvoScientist/langgraph_dev/manager.py621 except OSError:COMMENT
LOWEvoScientist/langgraph_dev/manager.py961 from ..mcp.client import _ensure_node_for_stdio, load_mcp_configCOMMENT
LOWEvoScientist/langgraph_dev/manager.py1021 # ``_rotate_log_if_needed``). See #209.COMMENT
LOWEvoScientist/langgraph_dev/manager.py1041 # is fragile (relative paths in MCP configs etc.); env var is explicit.COMMENT
LOWEvoScientist/langgraph_dev/manager.py1061 # cron job state across CLI restarts — work without further changes. UsersCOMMENT
LOWEvoScientist/langgraph_dev/manager.py1081 # ``--port`` differs from the persisted ``langgraph_dev_port``, andCOMMENT
LOWEvoScientist/langgraph_dev/manager.py1401 if not needs_langgraph_dev(config, backend=backend):COMMENT
LOW.github/workflows/publish.yml1name: Publish to PyPICOMMENT
LOW.github/scripts/release_guard.sh1#!/usr/bin/env bashCOMMENT
Modern AI Meta-Vocabulary11 hits · 35 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_langgraph_manager.py490# ensure_langgraph_dev — high-level orchestrationCOMMENT
MEDIUM…erature/SIGIR2026_public_arxiv_systematic_survey_zh.md126## 5. Search Agents、RAG 与推理:从单轮检索到轨迹级策略学习COMMENT
MEDIUM…erature/SIGIR2026_public_arxiv_systematic_survey_zh.md148### 5.4 长视频与时空 grounding 说明 agentic reasoning 已跨出文本COMMENT
MEDIUM…erature/SIGIR2026_public_arxiv_systematic_survey_en.md128## 5. Search Agents, RAG, and Reasoning: From Single-Turn Retrieval to Trajectory-Level Policy LearningCOMMENT
MEDIUMEvoScientist/sessions.py700 # a multi-agent DB where a third-party tool shares the sameCOMMENT
MEDIUMEvoScientist/backends.py45# If the agent hallucinates an absolute system path, we block it.COMMENT
MEDIUM⚡EvoScientist/ccproxy_manager.py315# High-level orchestrationCOMMENT
MEDIUMEvoScientist/middleware/code_interpreter.py122# Multi-agent orchestration is the killer use case: ``Promise.all`` overCOMMENT
MEDIUMEvoScientist/middleware/summarization.py231 # Keyed by the resolved context window, not the model object: realCOMMENT
MEDIUMEvoScientist/middleware/context_editing.py75 # Keyed by the resolved context window, not the model object: realCOMMENT
MEDIUM⚡EvoScientist/langgraph_dev/manager.py1304# High-level orchestrationCOMMENT
Self-Referential Comments7 hits · 24 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_skills_manager.py864 # Create a fake repo structureCOMMENT
MEDIUMtests/test_sessions.py2835 # Create a valid but empty SQLite DB (no checkpoints table).COMMENT
MEDIUM⚡tests/test_mcp_client.py1930 # Create a fake executable in a temp bin dirCOMMENT
MEDIUMtests/test_mcp_client.py131 # Create a fake executable next to sys.executableCOMMENT
MEDIUMtests/test_channel_debug.py178 # Create a minimal concrete channelCOMMENT
MEDIUMEvoScientist/utils.py113 # Create a formatted display of the promptCOMMENT
MEDIUMEvoScientist/channels/standalone.py110 # Create a lightweight manager for the consumer to useCOMMENT
AI Structural Patterns26 hits · 19 pts
SeverityFileLineSnippetContext
LOWtests/test_serve_agent_holder.py58CODE
LOWtests/test_cli_serve.py15CODE
LOWtests/test_cli_serve.py50CODE
LOWtests/fakes.py213CODE
LOWtests/fakes.py302CODE
LOWtests/test_cli_deploy.py24CODE
LOWtests/test_cli_deploy.py70CODE
LOWEvoScientist/backends.py1729CODE
LOWEvoScientist/middleware/memory.py994CODE
LOWEvoScientist/middleware/memory.py506CODE
LOWEvoScientist/tools/skills_manager.py469CODE
LOWEvoScientist/stream/display.py656CODE
LOWEvoScientist/stream/display.py1438CODE
LOWEvoScientist/cli/tui_runtime.py108CODE
LOWEvoScientist/cli/tui_interactive.py1641CODE
LOWEvoScientist/cli/tui_backends.py22CODE
LOWEvoScientist/cli/tui_backends.py54CODE
LOWEvoScientist/cli/interactive.py428CODE
LOWEvoScientist/cli/commands.py121CODE
LOWEvoScientist/cli/commands.py1788CODE
LOWEvoScientist/cli/commands.py2527CODE
LOWEvoScientist/cli/commands.py552CODE
LOWEvoScientist/langgraph_dev/manager.py895CODE
LOWEvoScientist/channels/mixins.py141CODE
LOWEvoScientist/channels/consumer.py214CODE
LOWEvoScientist/channels/dingtalk/channel.py323CODE
Redundant / Tautological Comments12 hits · 16 pts
SeverityFileLineSnippetContext
LOWEvoScientist/tools/skills_manager.py840 # Check if local path existsCOMMENT
LOWEvoScientist/tools/skills_manager.py1339 # Check if it's a built-in skill (read-only, cannot be uninstalled)COMMENT
LOWEvoScientist/config/settings.py224 # Set False to run fully in-process — saves the startup cost in scenariosCOMMENT
LOWEvoScientist/config/onboard/steps.py1382 # Check if any selected servers require npxCOMMENT
LOWEvoScientist/stream/display.py994 # Check if any sub-agent is activeCOMMENT
LOWEvoScientist/mcp/client.py1027 # Check if any pattern contains wildcard charactersCOMMENT
LOWEvoScientist/commands/implementation/mcp_install.py70 # Check if it's a tag — fall through to browserCOMMENT
LOWEvoScientist/skills/skill-creator/scripts/run_eval.py88 # Check if the model called load_skill with the right skill nameCOMMENT
LOWEvoScientist/skills/skill-creator/scripts/init_skill.py207 # Check if directory already existsCOMMENT
LOWEvoScientist/channels/middleware.py276 # Check if already has pending requestCOMMENT
LOWEvoScientist/channels/imessage/targets.py185 # Check if remainder is a chat targetCOMMENT
LOWEvoScientist/channels/imessage/rpc_client.py214 # Check if it's a response (has id)COMMENT
Hallucination Indicators1 hit · 15 pts
SeverityFileLineSnippetContext
CRITICAL⚡tests/test_agent_shell.py499 assert path.parent == portablegit.git.parent.parent.parent.resolve()CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHtests/test_background_middleware.py0cross-platform command that sleeps for *seconds* and exits 0.STRING
HIGHtests/test_background.py0cross-platform command that sleeps for *seconds* and exits 0.STRING
HIGHtests/test_backends.py0cross-platform command that sleeps for *seconds* and exits 0.STRING
Fake / Example Data12 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_dingtalk_channel.py128 channel._access_token = "fake-token"CODE
LOW⚡tests/test_dingtalk_channel.py250 channel._access_token = "fake-token"CODE
LOW⚡tests/test_feishu_channel.py554 channel._access_token = "fake-token"CODE
LOW⚡tests/test_feishu_channel.py670 channel._access_token = "fake-token"CODE
LOW⚡tests/test_feishu_channel.py680 channel._access_token = "fake-token"CODE
LOWtests/test_feishu_channel.py199 channel._access_token = "fake-token"CODE
LOWtests/test_feishu_channel.py343 channel._access_token = "fake-token"CODE
LOWtests/test_feishu_channel.py361 channel._access_token = "fake-token"CODE
LOWtests/test_feishu_channel.py618 channel._access_token = "fake-token"CODE
LOW⚡tests/test_additional_channel_smoke.py27 chat_id="user@example.com",CODE
LOW⚡tests/test_additional_channel_smoke.py29 metadata={"chat_id": "user@example.com"},CODE
LOWEvoScientist/config/onboard/helpers.py202 kwargs["placeholder"] = placeholderCODE
Verbosity Indicators8 hits · 11 pts
SeverityFileLineSnippetContext
LOW⚡EvoScientist/prompts.py183## Step 5: Write ReportCOMMENT
LOW⚡EvoScientist/prompts.py189## Step 6: VerifyCOMMENT
LOWEvoScientist/prompts.py105## Step 3: Execute & DebugCOMMENT
LOWEvoScientist/prompts.py130## Step 4: Evaluate & IterateCOMMENT
LOW⚡EvoScientist/prompts.py88 return "\n".join(["## Step 1: Intake & Scope", *bullets])STRING
LOW⚡EvoScientist/prompts.py91_EXPERIMENT_WORKFLOW_EXECUTION = """## Step 2: Plan (Recommended Structure)STRING
LOWEvoScientist/config/onboard/helpers.py637 # Step 1: ValidateCOMMENT
LOWEvoScientist/config/onboard/helpers.py653 # Step 2: Offer to installCOMMENT
AI Slop Vocabulary4 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_langgraph_dev_http.py113 # Ollama suffix — robust to future static Ollama entries in the registry.COMMENT
MEDIUM⚡EvoScientist/llm/patches.py936# azure-ignore is not sufficient). The only robust fix is to drop these itemsCOMMENT
MEDIUMEvoScientist/mcp/client.py237 # Forward by keyword: robust against future SDK signature changesCOMMENT
LOWEvoScientist/cli/tui_interactive.py2792 # errors; callers just return so the send is dropped.COMMENT
Dead Code2 hits · 3 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_llm.py2769CODE
MEDIUMtests/test_mcp_client.py582CODE