The agent that grows with you
This report presents the forensic synthetic code analysis of NousResearch/hermes-agent, a Python project with 237,643 GitHub stars. SynthScan v2.0 examined 3,043,853 lines of code across 9318 source files, recording 73153 pattern matches distributed across 28 syntactic categories. The overall adjusted score of 34.4 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 73153 distinct pattern matches across 28 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | hermes_constants.py | 21 | # ── TUI busy-indicator styles ───────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 1646 | # ─── Well-Known Paths ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 1669 | # ─── Network Preferences ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 1714 | # ─── Streaming Response Constants ──────────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 1728 | # ─── Venv layout ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 1781 | # ─── Partial-update diagnostics ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | setup-hermes.sh | 2 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | setup-hermes.sh | 4 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | setup-hermes.sh | 18 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | setup-hermes.sh | 269 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | setup-hermes.sh | 270 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | setup-hermes.sh | 272 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 62 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 64 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 129 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 131 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 165 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 167 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 187 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 189 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 325 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 327 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 344 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 346 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 398 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 400 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 417 | # ============================================================================ | COMMENT |
| MEDIUM | setup-hermes.sh | 419 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | run_agent.py | 298 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 300 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 303 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 307 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 1861 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | run_agent.py | 1863 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | run_agent.py | 1144 | # ── Buffered retry/fallback status ──────────────────────────────────── | COMMENT |
| MEDIUM | run_agent.py | 6575 | # ── Unified streaming API call ───────────────────────────────────────── | COMMENT |
| MEDIUM | run_agent.py | 7084 | # ── Per-turn primary restoration ───────────────────────────────────── | COMMENT |
| MEDIUM | toolsets.py | 409 | # ========================================================================== | COMMENT |
| MEDIUM | toolsets.py | 416 | # ========================================================================== | COMMENT |
| MEDIUM | pyproject.toml | 526 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 530 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hermes_logging.py | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hermes_logging.py | 163 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hermes_logging.py | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hermes_logging.py | 181 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 215 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 217 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 257 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 411 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 413 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 550 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | hermes_logging.py | 560 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | mini_swe_runner.py | 64 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | mini_swe_runner.py | 66 | # ============================================================================ | COMMENT |
| MEDIUM | mini_swe_runner.py | 626 | # ============================================================================ | COMMENT |
| MEDIUM | mini_swe_runner.py | 628 | # ============================================================================ | COMMENT |
| MEDIUM | mini_swe_runner.py | 113 | # ============================================================================ | STRING |
| MEDIUM | mini_swe_runner.py | 115 | # ============================================================================ | STRING |
| MEDIUM | mini_swe_runner.py | 153 | # ============================================================================ | STRING |
| 13787 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 101 | def _normalize_tool_error_counts(tool_error_counts: Dict[str, int]) -> Dict[str, int]: | CODE |
| LOW | batch_runner.py | 774 | def _scan_completed_prompts_by_content(self) -> set: | CODE |
| LOW | batch_runner.py | 816 | def _filter_dataset_by_completed(self, completed_prompts: set) -> Tuple[List[Dict], List[int]]: | CODE |
| LOW⚡ | hermes_constants.py | 305 | def mark_named_profile_deleted(profile_home: str | Path) -> None: | CODE |
| LOW⚡ | hermes_constants.py | 311 | def clear_named_profile_deleted(profile_home: str | Path) -> None: | CODE |
| LOW⚡ | hermes_constants.py | 315 | def assert_named_profile_home_live(path: str | Path) -> None: | CODE |
| LOW | hermes_constants.py | 40 | def reset_hermes_home_override(token: Token) -> None: | CODE |
| LOW | hermes_constants.py | 53 | def _get_platform_default_hermes_home() -> Path: | CODE |
| LOW | hermes_constants.py | 77 | def _warn_profile_fallback_once() -> None: | CODE |
| LOW | hermes_constants.py | 442 | def _candidate_node_command_names(command: str) -> list[str]: | CODE |
| LOW | hermes_constants.py | 506 | def hermes_managed_node_tree_present(home: Path | None = None) -> bool: | CODE |
| LOW | hermes_constants.py | 594 | def _print_managed_node_in_use_notice() -> None: | CODE |
| LOW | hermes_constants.py | 607 | def _heal_managed_node_windows(home: Path | None = None) -> bool | None: | CODE |
| LOW | hermes_constants.py | 757 | def _bootstrap_managed_node_posix() -> bool: | CODE |
| LOW | hermes_constants.py | 795 | def bootstrap_hermes_managed_node() -> str | None: | CODE |
| LOW | hermes_constants.py | 880 | def _managed_node_tree_outdated(home: Path | None = None) -> bool: | CODE |
| LOW | hermes_constants.py | 915 | def find_hermes_node_executable(command: str) -> str | None: | CODE |
| LOW | hermes_constants.py | 951 | def find_node_executable_on_path(command: str) -> str | None: | CODE |
| LOW | hermes_constants.py | 1201 | def _iter_real_home_candidates(env: dict[str, str] | None = None) -> list[str]: | CODE |
| LOW | hermes_constants.py | 1288 | def apply_subprocess_home_env(env: dict[str, str]) -> None: | CODE |
| LOW | hermes_constants.py | 1330 | def _canonical_model_variants(model: str) -> list[str]: | CODE |
| LOW | hermes_constants.py | 1420 | def resolve_per_model_reasoning_effort(model: str, overrides: dict | None) -> dict | None: | CODE |
| LOW | hermes_constants.py | 1572 | def translate_cwd_for_wsl_backend(cwd: str) -> str: | CODE |
| LOW | toolset_distributions.py | 241 | def sample_toolsets_from_distribution(distribution_name: str) -> List[str]: | CODE |
| LOW | hermes_bootstrap.py | 125 | def suppress_platform_ver_console() -> None: | CODE |
| LOW | hermes_bootstrap.py | 204 | def activate_durable_lazy_target() -> None: | CODE |
| LOW⚡ | run_agent.py | 1030 | def _warn_context_overflow_blocked( | CODE |
| LOW⚡ | run_agent.py | 1195 | def _emit_pending_fallback_notice(self) -> None: | CODE |
| LOW⚡ | run_agent.py | 1255 | def _disable_codex_reasoning_replay( | CODE |
| LOW⚡ | run_agent.py | 1871 | def _summarize_background_review_actions( | CODE |
| LOW⚡ | run_agent.py | 3035 | def _api_request_payload_for_hook(self, api_kwargs: Optional[Dict[str, Any]]) -> Dict[str, Any]: | CODE |
| LOW⚡ | run_agent.py | 3884 | def _format_turn_completion_explanation( | CODE |
| LOW⚡ | run_agent.py | 5560 | def _request_anthropic_client_cache_ref(self) -> dict: | CODE |
| LOW⚡ | run_agent.py | 5568 | def _request_anthropic_client_key(self) -> tuple: | CODE |
| LOW⚡ | run_agent.py | 6729 | def _interim_text_was_delivered(self, text: str) -> bool: | CODE |
| LOW⚡ | run_agent.py | 6735 | def _record_delivered_interim_text(self, text: str) -> None: | CODE |
| LOW⚡ | run_agent.py | 6744 | def _fire_streamed_codex_commentary(self, text: str) -> None: | CODE |
| LOW⚡ | run_agent.py | 7060 | def _interruptible_streaming_api_call( | CODE |
| LOW⚡ | run_agent.py | 7874 | def _read_reasoning_echo_from_config() -> bool: | CODE |
| LOW⚡ | run_agent.py | 7884 | def _needs_kimi_tool_reasoning(self) -> bool: | CODE |
| LOW⚡ | run_agent.py | 7932 | def _copy_reasoning_content_for_api(self, source_msg: dict, api_msg: dict) -> None: | CODE |
| LOW⚡ | run_agent.py | 7937 | def _reapply_reasoning_echo_for_provider(self, api_messages: list) -> int: | CODE |
| LOW⚡ | run_agent.py | 7943 | def _sanitize_tool_calls_for_strict_api(api_msg: dict, model: "str | None" = None) -> dict: | CODE |
| LOW⚡ | run_agent.py | 8353 | def _toolguard_controlled_halt_response(self, decision: ToolGuardrailDecision) -> str: | CODE |
| LOW⚡ | run_agent.py | 8362 | def _append_guardrail_observation( | CODE |
| LOW | run_agent.py | 93 | def _session_source_for_agent(platform: Optional[str]) -> str: | CODE |
| LOW | run_agent.py | 258 | def _is_ephemeral_scaffolding(msg: Any) -> bool: | CODE |
| LOW | run_agent.py | 320 | def _pool_may_recover_from_rate_limit(pool) -> bool: | CODE |
| LOW | run_agent.py | 358 | def _safe_session_filename_component(session_id: str) -> str: | CODE |
| LOW | run_agent.py | 618 | def _get_session_db_for_recall(self): | CODE |
| LOW | run_agent.py | 693 | def _transition_context_engine_session( | CODE |
| LOW | run_agent.py | 842 | def _effective_lmstudio_context_length( | CODE |
| LOW | run_agent.py | 872 | def _lmstudio_load_was_unverified(load_result: Any) -> bool: | CODE |
| LOW | run_agent.py | 879 | def _ensure_lmstudio_runtime_loaded( | CODE |
| LOW | run_agent.py | 952 | def _should_start_quiet_spinner(self) -> bool: | CODE |
| LOW | run_agent.py | 971 | def _should_emit_quiet_tool_messages(self) -> bool: | CODE |
| LOW | run_agent.py | 1070 | def _warn_uncompressed_context_overflow( | CODE |
| LOW | run_agent.py | 1090 | def _clear_context_overflow_warn(self) -> None: | CODE |
| LOW | run_agent.py | 1298 | def _stream_diag_capture_response( | CODE |
| LOW | run_agent.py | 1311 | def _is_provider_stream_parse_error(self, error: BaseException) -> bool: | CODE |
| 37708 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 299 | except Exception as img_err: | CODE |
| LOW | batch_runner.py | 381 | except Exception as e: | CODE |
| LOW | batch_runner.py | 748 | except Exception as e: | CODE |
| LOW | batch_runner.py | 811 | except Exception as e: | CODE |
| LOW | batch_runner.py | 1018 | except Exception as ckpt_err: | CODE |
| LOW | batch_runner.py | 1026 | except Exception as e: | CODE |
| LOW | batch_runner.py | 1059 | except Exception as ckpt_err: | CODE |
| LOW | batch_runner.py | 1340 | except Exception as e: | CODE |
| LOW | batch_runner.py | 1371 | except Exception as e: | CODE |
| LOW | hermes_constants.py | 110 | except Exception: | CODE |
| LOW | hermes_constants.py | 558 | except Exception: | CODE |
| LOW | hermes_constants.py | 570 | except Exception: | CODE |
| LOW | hermes_constants.py | 575 | except Exception: | CODE |
| LOW | hermes_constants.py | 1182 | except Exception: | CODE |
| LOW | hermes_constants.py | 1217 | except Exception: | CODE |
| LOW | hermes_constants.py | 1542 | except Exception: | CODE |
| LOW | hermes_bootstrap.py | 163 | except Exception: | CODE |
| LOW | hermes_bootstrap.py | 223 | except Exception: | CODE |
| MEDIUM | run_agent.py | 6914 | def _emit_stream_start(self) -> None: | CODE |
| LOW⚡ | run_agent.py | 1022 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1027 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1183 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1192 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1250 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1252 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3008 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3018 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3025 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3870 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3879 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4438 | except Exception as e: | CODE |
| LOW⚡ | run_agent.py | 4442 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4451 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4575 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4579 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4581 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4595 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4602 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4606 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4631 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4640 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4646 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4652 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4675 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4677 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4686 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4693 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4697 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 5552 | except Exception as exc: | CODE |
| LOW⚡ | run_agent.py | 7043 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 7053 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 7881 | except Exception: | CODE |
| LOW | run_agent.py | 98 | except Exception: | CODE |
| LOW | run_agent.py | 642 | except Exception: | CODE |
| LOW | run_agent.py | 659 | except Exception: | CODE |
| LOW | run_agent.py | 672 | except Exception: | CODE |
| LOW | run_agent.py | 686 | except Exception as e: | CODE |
| LOW | run_agent.py | 719 | except Exception as exc: | CODE |
| LOW | run_agent.py | 725 | except Exception as exc: | CODE |
| LOW | run_agent.py | 748 | except Exception as exc: | CODE |
| 9538 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 26 | CODE | |
| LOW | hermes_bootstrap.py | 50 | CODE | |
| LOW | run_agent.py | 112 | CODE | |
| LOW | run_agent.py | 112 | CODE | |
| LOW | run_agent.py | 112 | CODE | |
| LOW | run_agent.py | 117 | CODE | |
| LOW | run_agent.py | 138 | CODE | |
| LOW | run_agent.py | 138 | CODE | |
| LOW | run_agent.py | 138 | CODE | |
| LOW | run_agent.py | 156 | CODE | |
| LOW | run_agent.py | 167 | CODE | |
| LOW | run_agent.py | 168 | CODE | |
| LOW | run_agent.py | 168 | CODE | |
| LOW | run_agent.py | 168 | CODE | |
| LOW | run_agent.py | 168 | CODE | |
| LOW | run_agent.py | 168 | CODE | |
| LOW | run_agent.py | 175 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 176 | CODE | |
| LOW | run_agent.py | 211 | CODE | |
| LOW | run_agent.py | 211 | CODE | |
| LOW | run_agent.py | 211 | CODE | |
| LOW | run_agent.py | 211 | CODE | |
| LOW | run_agent.py | 211 | CODE | |
| LOW | run_agent.py | 211 | CODE | |
| LOW | run_agent.py | 26 | CODE | |
| LOW | run_agent.py | 1290 | CODE | |
| LOW | run_agent.py | 1864 | CODE | |
| LOW | run_agent.py | 1864 | CODE | |
| LOW | run_agent.py | 1864 | CODE | |
| LOW | registration_lifecycle.py | 8 | CODE | |
| LOW | hermes_state.py | 49 | CODE | |
| LOW | hermes_state.py | 49 | CODE | |
| LOW | hermes_state.py | 49 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| LOW | hermes_state.py | 60 | CODE | |
| 3996 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.windows.yml | 1 | # | COMMENT |
| LOW | setup-hermes.sh | 1 | #!/bin/bash | COMMENT |
| LOW | setup-hermes.sh | 241 | # (the direct deps in pyproject.toml are exact-pinned, but | COMMENT |
| LOW | .hadolint.yaml | 1 | # hadolint configuration for the Hermes Agent Dockerfile. | COMMENT |
| LOW | .hadolint.yaml | 21 | - DL3003 | COMMENT |
| LOW | hermes_bootstrap.py | 81 | os.environ.setdefault("PYTHONIOENCODING", "utf-8") | COMMENT |
| LOW | run_agent.py | 41 | import os | COMMENT |
| LOW | run_agent.py | 261 | return isinstance(msg, dict) and any( | COMMENT |
| LOW | run_agent.py | 281 | # CONTRACT (#92231): the marker asserts "this dict's CONTENT is durable as | COMMENT |
| LOW | run_agent.py | 1901 | skill". The automatic post-turn triggers never set it. | COMMENT |
| LOW | run_agent.py | 2161 | if not self._session_db: | COMMENT |
| LOW | run_agent.py | 2181 | # assumes the live `messages` list is the original history plus a | COMMENT |
| LOW | run_agent.py | 2241 | if not isinstance(msg, dict): | COMMENT |
| LOW | run_agent.py | 2261 | continue | COMMENT |
| LOW | run_agent.py | 2421 | ) | COMMENT |
| LOW | run_agent.py | 2441 | from hermes_state import ( | COMMENT |
| LOW | run_agent.py | 4701 | # it on turn crash / retirement (agent/codex_runtime.py), but hard | COMMENT |
| LOW | run_agent.py | 4741 | # 'cron_complete' / 'cli_close' reason set by an earlier terminal path. | COMMENT |
| LOW | run_agent.py | 5401 | # Per-request OpenAI-wire clients (used by both the non-streaming | COMMENT |
| LOW | run_agent.py | 6941 | self._note_dropped_stream_writer("_fire_stream_delta") | COMMENT |
| LOW | run_agent.py | 8041 | # conversation tag and no Portal sticky key, so it routes independently | COMMENT |
| LOW | run_agent.py | 8101 | # allowed to mutate their input list in place; after a host | COMMENT |
| LOW | run_agent.py | 8221 | on_commit_overrun=_on_commit_overrun, | COMMENT |
| LOW | run_agent.py | 8941 | # LLM call made inside this turn — main loop, compression, vision, | COMMENT |
| LOW | toolsets.py | 61 | # deliberately NOT here. They only make sense where a GUI can follow the | COMMENT |
| LOW | toolsets.py | 401 | ], | COMMENT |
| LOW | pyproject.toml | 21 | # Rationale: ranges allow PyPI to ship a fresh version of a transitive | COMMENT |
| LOW | pyproject.toml | 61 | # official Snowball project package, pure Python, zero transitive deps. | COMMENT |
| LOW | pyproject.toml | 81 | # (~108KB, no compiled extensions, no platform constraints), so unlike the | COMMENT |
| LOW | pyproject.toml | 101 | "cryptography==50.0.0", # CVE-2026-69247, GHSA-m2h6-j472-rp4c, GHSA-jwv3-5hgf-82ww, CVE-2026-39892, CVE-2026-34073, G | COMMENT |
| LOW | pyproject.toml | 121 | "uvicorn[standard]>=0.31.0,<1", | COMMENT |
| LOW | pyproject.toml | 141 | # Windows log rotation. Stdlib ``RotatingFileHandler.doRollover()`` uses | COMMENT |
| LOW | pyproject.toml | 161 | # instead of falling back to the no-op Relay host (#76469, Termux). | COMMENT |
| LOW | pyproject.toml | 221 | "numpy==2.4.3", | COMMENT |
| LOW | pyproject.toml | 241 | vision = [] | COMMENT |
| LOW | pyproject.toml | 261 | # module names. | COMMENT |
| LOW | pyproject.toml | 321 | "google-auth-oauthlib==1.3.1", | COMMENT |
| LOW | pyproject.toml | 341 | all = [ | COMMENT |
| LOW | pyproject.toml | 381 | hermes-acp = "acp_adapter.entry:main" | COMMENT |
| LOW | pyproject.toml | 401 | # aiohttp, cryptography: same shape — the advisory fixes are newer than the | COMMENT |
| LOW | pyproject.toml | 501 | # ASYNC210/220/221/251: blocking calls inside `async def` freeze the whole | COMMENT |
| LOW | pyproject.toml | 521 | "skills/**" = ["PLW1514"] | COMMENT |
| LOW | hermes_logging.py | 41 | COMMENT | |
| LOW | hermes_logging.py | 541 | COMMENT | |
| LOW | utils.py | 101 | # 33 ERROR_LOCK_VIOLATION — byte-range lock on the target | COMMENT |
| LOW | hermes_state.py | 361 | COMMENT | |
| LOW | hermes_state.py | 421 | # FTS write corruption"). The hermetic conftest redirects HERMES_HOME per | COMMENT |
| LOW | hermes_state.py | 641 | f"child process, export {_STATE_DB_GUARD_BYPASS_ENV}=1 in " | COMMENT |
| LOW | hermes_state.py | 661 | # | COMMENT |
| LOW | hermes_state.py | 681 | # which lets state.db-wal keep the high-water mark of the largest-ever | COMMENT |
| LOW | hermes_state.py | 1761 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | hermes_state.py | 1961 | return True | COMMENT |
| LOW | hermes_state.py | 2081 | try: | COMMENT |
| LOW | hermes_state.py | 2101 | # successful repair or replacement changes it and resets the count); | COMMENT |
| LOW | hermes_state.py | 2121 | COMMENT | |
| LOW | hermes_state.py | 2141 | for start, end in _FINGERPRINT_VOLATILE_HEADER_RANGES: | COMMENT |
| LOW | hermes_state.py | 2581 | # sorts NEWEST and survives prune forever. | COMMENT |
| LOW | hermes_state.py | 2601 | # | COMMENT |
| LOW | hermes_state.py | 2661 | ) | COMMENT |
| LOW | hermes_state.py | 3041 | # index corruption — bad shadow-table segments where reads still | COMMENT |
| 2499 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | hermes_state.py | 5835 | undefined, so every attribute access remains guarded. | STRING |
| HIGH | tools/schema_sanitizer.py | 29 | {"$ref": "#/$defs/Foo", "default": null} | STRING |
| HIGH | tools/schema_sanitizer.py | 249 | {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null} | STRING |
| HIGH⚡ | tools/voice_mode.py | 126 | return "pkg install python-numpy portaudio && python -m pip install sounddevice" | CODE |
| HIGH | tools/voice_mode.py | 350 | " 3. Verify with: arecord -d 3 /tmp/test.wav && aplay /tmp/test.wav" | CODE |
| HIGH | tools/voice_mode.py | 357 | " Then verify: arecord -d 3 /tmp/test.wav && aplay /tmp/test.wav" | CODE |
| HIGH | tools/process_registry.py | 1538 | f"kill -0 \"$(cat {quoted_pid_path} 2>/dev/null)\" 2>/dev/null; echo $?", | CODE |
| HIGH | tools/tts_tool.py | 1958 | # tts.deepinfra block in DEFAULT_CONFIG to deep-merge over the null). | COMMENT |
| HIGH | tools/transcription_tools.py | 2734 | # deep-merge over the null). | COMMENT |
| HIGH | tools/transcription_tools.py | 3111 | di_config = stt_config.get("deepinfra") # may be None (YAML null) | CODE |
| HIGH⚡ | tools/code_kernel_remote.py | 174 | f"kill -0 {shlex.quote(kernel.pid)} 2>/dev/null && echo ALIVE", | STRING |
| HIGH⚡ | tools/code_kernel_remote.py | 188 | f"pkill -TERM -P {shlex.quote(kernel.pid)} 2>/dev/null; " | STRING |
| HIGH⚡ | tools/code_kernel_remote.py | 189 | f"kill {shlex.quote(kernel.pid)} 2>/dev/null; true", | STRING |
| HIGH | tools/browser_tool.py | 946 | return "npm install -g agent-browser && agent-browser install" | CODE |
| HIGH | tools/browser_tool.py | 947 | return "npm install -g agent-browser && agent-browser install --with-deps" | CODE |
| HIGH⚡ | tools/terminal_tool.py | 861 | """Wrap `A && B &` (or `A || B &`) to `A && { B & }` at depth 0. | STRING |
| HIGH⚡ | tools/terminal_tool.py | 861 | """Wrap `A && B &` (or `A || B &`) to `A && { B & }` at depth 0. | STRING |
| HIGH⚡ | tools/terminal_tool.py | 863 | Bash parses ``A && B &`` with `&&` tighter than `&`, so it forks a | STRING |
| HIGH⚡ | tools/terminal_tool.py | 864 | subshell for the whole `A && B` compound and backgrounds it. Inside | STRING |
| HIGH⚡ | tools/browser_supervisor.py | 118 | xhr.open("GET", ENDPOINT + "?" + params.toString(), false); // sync | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 119 | xhr.send(null); | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 120 | if (xhr.status !== 200) return null; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 123 | try { parsed = JSON.parse(body); } catch (e) { return null; } | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 124 | if (kind === "alert") return undefined; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 125 | if (kind === "confirm") return Boolean(parsed && parsed.accept); | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 127 | if (!parsed || !parsed.accept) return null; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 130 | return null; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 134 | return null; | CODE |
| HIGH | tools/browser_camofox.py | 14 | git clone https://github.com/jo-inc/camofox-browser && cd camofox-browser | STRING |
| HIGH | tools/browser_camofox.py | 15 | npm install && npm start # downloads Camoufox (~300MB) on first run | STRING |
| HIGH⚡ | tools/file_operations.py | 1298 | 'm="$(stat -c%a "$t" 2>/dev/null || stat -f%Lp "$t" 2>/dev/null || true)"; ' | CODE |
| HIGH⚡ | tools/file_operations.py | 1299 | '[ -n "$m" ] && chmod "$m" "$tmp" 2>/dev/null || true; ' | CODE |
| HIGH⚡ | tools/file_operations.py | 1305 | 'if [ ! -e "$t" ]; then chmod "=rw" "$tmp" 2>/dev/null || true; fi; ' | CODE |
| HIGH | tools/file_operations.py | 1011 | result = self._exec(f"command -v {cmd} >/dev/null 2>&1 && echo 'yes'") | CODE |
| HIGH | tools/file_operations.py | 1283 | 'rt="$(readlink -f "$t" 2>/dev/null || realpath "$t" 2>/dev/null || true)"; ' | CODE |
| HIGH | tools/file_operations.py | 1386 | f"if [ -f {arg} ]; then wc -c < {arg} 2>/dev/null; " | CODE |
| HIGH | tools/file_operations.py | 2835 | check = self._exec(f"test -e {self._escape_shell_arg(path)} && echo exists || echo not_found") | CODE |
| HIGH | tools/file_operations.py | 2852 | f"test -d {self._escape_shell_arg(parent)} && echo yes || echo no" | CODE |
| HIGH | tools/file_operations.py | 2930 | f"test -e {self._escape_shell_arg(expanded)} && echo exists || echo not_found" | CODE |
| HIGH | tools/code_execution_tool.py | 1030 | f"ls -1 {quoted_rpc_dir}/req_* 2>/dev/null || true", | STRING |
| HIGH | tools/code_execution_tool.py | 1253 | "command -v python3 >/dev/null 2>&1 && echo OK", | STRING |
| HIGH | tools/environments/local.py | 1834 | prelude_parts.append(f"[ -r '{safe}' ] && . '{safe}' 2>/dev/null || true") | CODE |
| HIGH | tools/environments/docker.py | 1657 | cmd_string = f"unset {quoted_names} 2>/dev/null || true\n{cmd_string}" | CODE |
| HIGH⚡ | tools/environments/modal.py | 113 | "RUN rm -rf /usr/local/lib/python*/site-packages/pip* 2>/dev/null; " | CODE |
| HIGH⚡ | tools/environments/modal.py | 114 | "python -m ensurepip --upgrade --default-pip 2>/dev/null || true", | CODE |
| HIGH⚡ | tools/environments/modal.py | 118 | "RUN apt-get update -qq && apt-get install -y -qq python3 python3-venv > /dev/null 2>&1 || true" | CODE |
| HIGH⚡ | tools/environments/modal.py | 118 | "RUN apt-get update -qq && apt-get install -y -qq python3 python3-venv > /dev/null 2>&1 || true" | CODE |
| HIGH⚡ | tools/environments/base.py | 638 | f"HERMES_UI_SESSION_ID{extra_unset} 2>/dev/null; " | CODE |
| HIGH | tools/environments/base.py | 829 | f">> {_snap_tmp} 2>/dev/null || true\n" | CODE |
| HIGH | tools/environments/base.py | 837 | f"builtin cd -- {_quoted_cwd} 2>/dev/null || true\n" | CODE |
| HIGH | tools/environments/base.py | 955 | f"source {_quoted_snap} >/dev/null 2>&1 || true" | CODE |
| HIGH | tools/environments/base.py | 1018 | f"2>/dev/null || rm -f {_snap_tmp} 2>/dev/null || true" | CODE |
| HIGH⚡ | hermes_cli/cli_billing_mixin.py | 740 | upgradeResult(null) — the CLI can't persist the key across a command re-run, | STRING |
| HIGH | hermes_cli/gateway.py | 5393 | f"launchctl bootout {shlex.quote(target)} 2>/dev/null; " | CODE |
| HIGH | hermes_cli/gateway.py | 5400 | f"while kill -0 {gateway_pid} 2>/dev/null; do " | CODE |
| HIGH | hermes_cli/gateway.py | 5411 | f" launchctl bootstrap {shlex.quote(domain)} {shlex.quote(str(plist_path))} 2>/dev/null; " | CODE |
| HIGH | hermes_cli/skills_config.py | 30 | Mirrors ``agent.skill_utils._normalize_string_set``: ``None`` (YAML null) | STRING |
| HIGH⚡ | hermes_cli/models.py | 985 | # "paidRecommendedCompactionModel": {modelName, ...} | null, | COMMENT |
| HIGH⚡ | hermes_cli/models.py | 986 | # "paidRecommendedVisionModel": {modelName, ...} | null, | COMMENT |
| HIGH⚡ | hermes_cli/models.py | 987 | # "freeRecommendedCompactionModel": {modelName, ...} | null, | COMMENT |
| 225 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 125 | CODE | |
| LOW | batch_runner.py | 244 | CODE | |
| LOW | batch_runner.py | 400 | CODE | |
| LOW | batch_runner.py | 544 | CODE | |
| LOW | batch_runner.py | 684 | CODE | |
| LOW | batch_runner.py | 774 | CODE | |
| LOW | batch_runner.py | 816 | CODE | |
| LOW | batch_runner.py | 850 | CODE | |
| LOW | hermes_constants.py | 795 | CODE | |
| LOW | hermes_constants.py | 915 | CODE | |
| LOW | hermes_constants.py | 926 | CODE | |
| LOW | run_agent.py | 9099 | CODE | |
| LOW | run_agent.py | 1195 | CODE | |
| LOW | run_agent.py | 1225 | CODE | |
| LOW | run_agent.py | 2130 | CODE | |
| LOW | run_agent.py | 2684 | CODE | |
| LOW | run_agent.py | 2713 | CODE | |
| LOW | run_agent.py | 2901 | CODE | |
| LOW | run_agent.py | 3153 | CODE | |
| LOW | run_agent.py | 3182 | CODE | |
| LOW | run_agent.py | 3552 | CODE | |
| LOW | run_agent.py | 3680 | CODE | |
| LOW | run_agent.py | 4545 | CODE | |
| LOW | run_agent.py | 4930 | CODE | |
| LOW | run_agent.py | 6328 | CODE | |
| LOW | run_agent.py | 6577 | CODE | |
| LOW | run_agent.py | 7437 | CODE | |
| LOW | run_agent.py | 7564 | CODE | |
| LOW | run_agent.py | 7597 | CODE | |
| LOW | run_agent.py | 7783 | CODE | |
| LOW | run_agent.py | 8006 | CODE | |
| LOW | run_agent.py | 8592 | CODE | |
| LOW | run_agent.py | 8245 | CODE | |
| LOW | run_agent.py | 8862 | CODE | |
| LOW | toolsets.py | 742 | CODE | |
| LOW | registration_lifecycle.py | 88 | CODE | |
| LOW | mini_swe_runner.py | 630 | CODE | |
| LOW | mini_swe_runner.py | 298 | CODE | |
| LOW | mini_swe_runner.py | 408 | CODE | |
| LOW | hermes_time.py | 37 | CODE | |
| LOW | hermes_state_portability.py | 309 | CODE | |
| LOW | hermes_state_portability.py | 507 | CODE | |
| LOW | utils.py | 194 | CODE | |
| LOW | trajectory_compressor.py | 1380 | CODE | |
| LOW | trajectory_compressor.py | 477 | CODE | |
| LOW | trajectory_compressor.py | 605 | CODE | |
| LOW | trajectory_compressor.py | 674 | CODE | |
| LOW | trajectory_compressor.py | 1076 | CODE | |
| LOW | hermes_state.py | 537 | CODE | |
| LOW | hermes_state.py | 1106 | CODE | |
| LOW | hermes_state.py | 1988 | CODE | |
| LOW | hermes_state.py | 2261 | CODE | |
| LOW | hermes_state.py | 2333 | CODE | |
| LOW | hermes_state.py | 2530 | CODE | |
| LOW | hermes_state.py | 3010 | CODE | |
| LOW | hermes_state.py | 3190 | CODE | |
| LOW | hermes_state.py | 3383 | CODE | |
| LOW | hermes_state.py | 3550 | CODE | |
| LOW | hermes_state.py | 3576 | CODE | |
| LOW | hermes_state.py | 3967 | CODE | |
| 2089 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | hermes_cli/subcommands/update.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/prompt_size.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/auth.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/logout.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/backup.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/hooks.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/config.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/whatsapp.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/webhook.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/profile.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/security.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/model.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/dump.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/setup.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/logs.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/debug.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/uninstall.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/login.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/import_cmd.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/doctor.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/gui.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/slack.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/status.py | 0 | ``hermes status`` subcommand parser. extracted verbatim from ``hermes_cli/main.py:main()`` (god-file phase 2). handler i | STRING |
| HIGH | hermes_cli/subcommands/plugins.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/skills.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/memory.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/tools.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/acp.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/mcp.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/insights.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/pairing.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | hermes_cli/subcommands/claw.py | 0 | ``hermes claw`` subcommand parser. extracted from ``hermes_cli/main.py:main()`` (god-file phase 2 follow-up). handler in | STRING |
| HIGH | plugins/platforms/dingtalk/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/homeassistant/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/sms/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/feishu/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/wecom/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/irc/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/ntfy/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/line/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/teams/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/mattermost/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/photon/auth.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/photon/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/buzz/adapter.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | gateway/platforms/api_server.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | gateway/platforms/bluebubbles.py | 0 | scope-aware credential read with the default-profile startup fallback. secondary profiles construct their adapters under | STRING |
| HIGH | plugins/platforms/dingtalk/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/discord/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/homeassistant/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/sms/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/feishu/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/a2a/__init__.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/telegram/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/raft/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/teams/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/slack/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/mattermost/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/matrix/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/email/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| 188 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | batch_runner.py | 1110 | # Check for invalid tool names (model hallucinations) | COMMENT |
| MEDIUM | run_agent.py | 228 | # recovery scaffolding: the synthetic assistant "(empty)" turn and user nudge | COMMENT |
| MEDIUM | run_agent.py | 272 | # list (e.g. by scaffolding rewind or in-place compaction) and garbage- | COMMENT |
| MEDIUM | run_agent.py | 2070 | # Pass 1: strip the flagged scaffolding messages themselves. | COMMENT |
| MEDIUM | run_agent.py | 2083 | # Pass 2: if we stripped scaffolding, rewind through any trailing | COMMENT |
| MEDIUM | run_agent.py | 2087 | # result. Only runs when scaffolding was actually present — normal | COMMENT |
| MEDIUM | run_agent.py | 2220 | # skipped as ephemeral scaffolding / non-dict), and no code path | COMMENT |
| MEDIUM | run_agent.py | 2243 | # Never write ephemeral recovery scaffolding to the session | COMMENT |
| MEDIUM | run_agent.py | 3218 | # Mirror the SQLite flush: ephemeral recovery scaffolding is | COMMENT |
| MEDIUM | run_agent.py | 4228 | # each turn for repeatable testing, bypassing real headers. Throwaway scaffolding. | COMMENT |
| MEDIUM | toolsets.py | 75 | # Kanban multi-agent coordination — only in schema when the agent is | COMMENT |
| MEDIUM | pyproject.toml | 222 | # openWakeWord's onnx embedding model scores near-zero on macOS ARM64 | COMMENT |
| MEDIUM | CONTRIBUTING.md | 221 | ├── model_tools.py # Tool orchestration (thin layer over tools/registry.py) | CODE |
| MEDIUM | CONTRIBUTING.md | 250 | │ ├── terminal_tool.py # Terminal orchestration (sudo, env lifecycle, backends) | CODE |
| MEDIUM⚡ | hermes_state.py | 12513 | # scaffold. Keep the child carrier (and its durable row | COMMENT |
| MEDIUM⚡ | hermes_state.py | 100 | try: # Hard dependency, but tolerate scaffold-phase imports before pip install. | CODE |
| MEDIUM⚡ | hermes_state.py | 102 | except ImportError: # pragma: no cover - stripped/scaffold installs only | CODE |
| MEDIUM | model_tools.py | 515 | # descriptions that don't actually exist, and hallucinates calls to them. | COMMENT |
| MEDIUM | model_tools.py | 562 | # "prefer web_search or web_extract" which causes the model to hallucinate | COMMENT |
| MEDIUM | model_tools.py | 1290 | # downstream hook (pre/post, edit approval, guardrails) sees the real | COMMENT |
| MEDIUM | AGENTS.md | 272 | ├── model_tools.py # Tool orchestration, discover_builtin_tools(), handle_function_call() | CODE |
| MEDIUM | AGENTS.md | 1226 | ## Kanban (multi-agent work queue) | COMMENT |
| MEDIUM | tools/wake_word.py | 556 | # embedding model is broken, so the listener would arm and never fire. | COMMENT |
| MEDIUM⚡ | tools/voice_mode.py | 1209 | # Whisper hallucination filter | COMMENT |
| MEDIUM⚡ | tools/voice_mode.py | 1211 | # Whisper commonly hallucinates these phrases on silent/near-silent audio. | COMMENT |
| MEDIUM | tools/voice_mode.py | 1230 | # Non-English hallucinations (common on silence) | COMMENT |
| MEDIUM | tools/voice_mode.py | 1242 | # Regex patterns for repetitive hallucinations (e.g. "Thank you. Thank you. Thank you.") | COMMENT |
| MEDIUM | tools/voice_mode.py | 1425 | # Filter out Whisper hallucinations (common on silent/near-silent audio). | COMMENT |
| MEDIUM | tools/voice_mode.py | 1427 | # phrases like "bye" or "okay" overlap the hallucination blocklist/repeat | COMMENT |
| MEDIUM⚡ | tools/tool_search.py | 94 | # Listing budget as a percentage of the model's context window. Under | COMMENT |
| MEDIUM | tools/lazy_deps.py | 158 | # openWakeWord's ONNX embedding model returns near-zero scores on macOS | COMMENT |
| MEDIUM⚡ | tools/tts_tool.py | 274 | # context window. Users can override any of these via | COMMENT |
| MEDIUM⚡ | tools/tts_tool.py | 283 | "gemini": 32000, # Gemini TTS has a 32k-token context window; char cap is conservative | CODE |
| MEDIUM⚡ | tools/transcription_tools.py | 2774 | # Whisper hallucinates junk tokens on silent stretches exactly like local | COMMENT |
| MEDIUM | tools/transcription_tools.py | 1807 | # Silence-hallucination hardening defaults for local faster-whisper. | COMMENT |
| MEDIUM | tools/budget_config.py | 25 | # threshold and silently bloat context — in agentic evals this measurably | COMMENT |
| MEDIUM | tools/budget_config.py | 125 | # Fraction of a model's context window we allow a SINGLE tool result to occupy | COMMENT |
| MEDIUM⚡ | tools/approval.py | 3173 | # Approval prompting + orchestration | COMMENT |
| MEDIUM | tools/subagent_worktree.py | 8 | (https://dev.meta.ai/docs/muse-code/extending#multi-agent); no Muse Code | STRING |
| MEDIUM | docker/tini-shim.sh | 3 | # /usr/bin/tini — compatibility shim for legacy orchestration templates. | COMMENT |
| MEDIUM | docker/entrypoint.sh | 9 | # orchestration script that invokes it inside the container), forward to | COMMENT |
| MEDIUM | hermes_cli/auth.py | 6043 | # Skip Hermes models — they're not reliable for agentic tool-calling | COMMENT |
| MEDIUM | hermes_cli/gateway.py | 6357 | # is diagnostic scaffolding; cheap to keep on, costs nothing during | COMMENT |
| MEDIUM | hermes_cli/models.py | 394 | # Third-party agentic models hosted on build.nvidia.com | COMMENT |
| MEDIUM | hermes_cli/models.py | 656 | # Curated HF model list — only agentic models that map to OpenRouter defaults. | COMMENT |
| MEDIUM | hermes_cli/models.py | 3764 | # - "openrouter": curated list is already a hand-picked agentic subset of | COMMENT |
| MEDIUM | hermes_cli/models.py | 4037 | # with our curated agentic catalog so ``/model`` matches what | COMMENT |
| MEDIUM | hermes_cli/models.py | 4141 | # agentic picks lead the picker instead of whatever the live | COMMENT |
| MEDIUM⚡ | hermes_cli/goals.py | 1405 | # GoalManager — the orchestration surface CLI + gateway talk to | COMMENT |
| MEDIUM | hermes_cli/default_soul.py | 15 | # These templates contain no persona text -- they are pure comment scaffolding, | COMMENT |
| MEDIUM | hermes_cli/default_soul.py | 42 | # block / trailing newline in some historical revisions; the bare scaffold | COMMENT |
| MEDIUM | hermes_cli/agent_import.py | 463 | # -- orchestration ----------------------------------------------------- | COMMENT |
| MEDIUM⚡ | hermes_cli/model_switch.py | 355 | # Non-agentic model warning | COMMENT |
| MEDIUM | hermes_cli/model_switch.py | 3065 | # `hermes model` picker deliberately shows ONLY the curated agentic | COMMENT |
| MEDIUM | hermes_cli/update_lock.py | 69 | # Set by an orchestrating updater (the Tauri `hermes-setup --update` flow) to | COMMENT |
| MEDIUM | hermes_cli/web_server.py | 5326 | # hallucinations and maps provider "empty transcript" errors to a | COMMENT |
| MEDIUM⚡ | hermes_cli/model_setup_flows.py | 453 | # shows only agentic models users recognize from OpenRouter. | COMMENT |
| MEDIUM | hermes_cli/model_setup_flows.py | 2947 | # 1. models.dev registry (cached, filtered for agentic/tool-capable models) | COMMENT |
| MEDIUM⚡ | hermes_cli/loops.py | 524 | # LoopManager — the orchestration surface CLI + gateway + TUI talk to | COMMENT |
| MEDIUM⚡ | hermes_cli/config_defaults.py | 1061 | # See: https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html | COMMENT |
| 297 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hermes_state_search.py | 1248 | # Step 3: Collapse repeated * (e.g. "***") into a single one, | COMMENT |
| LOW⚡ | hermes_state_search.py | 1253 | # Step 4: Remove dangling boolean operators at start/end that would | COMMENT |
| LOW⚡ | hermes_state_search.py | 1258 | # Step 5: Wrap unquoted dotted and/or hyphenated terms in double | COMMENT |
| LOW⚡ | hermes_state_search.py | 1266 | # Step 6: Restore preserved quoted phrases | COMMENT |
| LOW | hermes_state_search.py | 1201 | # Step 1: Extract balanced double-quoted phrases and protect them | COMMENT |
| LOW | hermes_state_search.py | 1227 | # Step 2: Strip remaining (unmatched) FTS5-special characters. ``:`` is | COMMENT |
| LOW | tools/skills_hub.py | 1746 | # Step 1: fetch the sitemap index → list of skill-sitemap URLs. | COMMENT |
| LOW | tools/skills_hub.py | 1768 | # Step 2: fetch each skill sitemap and collect canonical "owner/repo/skill" IDs. | COMMENT |
| LOW⚡ | tools/skills_sync.py | 1136 | # Step 2: drop the manifest entry so next sync treats it as new | COMMENT |
| LOW⚡ | tools/skills_sync.py | 1141 | # Step 3: run sync to re-baseline (or re-copy if we deleted) | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 837 | # Step 1: Did disk change? Picks up external refresh. | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 846 | # Step 2: No disk change — if the SDK can refresh | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 340 | # Step 1: PRM discovery to learn the authorization_server URL. | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 362 | # Step 2: ASM discovery against the auth_server_url (or | COMMENT |
| LOW⚡ | tools/yuanbao_tools.py | 372 | # Step 2: Send text DM + media | COMMENT |
| LOW⚡ | tools/yuanbao_tools.py | 382 | # Step 3: Send media files | COMMENT |
| LOW | tools/yuanbao_tools.py | 324 | # Step 1: Resolve user_id from group member list if not provided | COMMENT |
| LOW | tools/send_message_tool.py | 2261 | # Step 1: Get access token | COMMENT |
| LOW | tools/send_message_tool.py | 2273 | # Step 2: Send message via REST | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 3173 | # Step 1: enumerate on-screen windows to find target pid/window_id. | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 3188 | # Step 0: explicit full-screen capture — a composited grab of | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 3311 | # Step 2: capture. | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 8431 | # Step 2: Show user the code | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 8439 | # Step 3: Poll for authorization code | COMMENT |
| LOW | hermes_cli/auth.py | 8362 | # Step 1: Request device code. OpenAI's auth endpoint rate-limits this | COMMENT |
| LOW | hermes_cli/auth.py | 8474 | # Step 4: Exchange authorization code for tokens | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 170 | # Step 1: Select platform | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 174 | # Step 2: Select mode — individual or by category | COMMENT |
| LOW⚡ | hermes_cli/dingtalk_auth.py | 66 | # Step 1: init → nonce | COMMENT |
| LOW⚡ | hermes_cli/dingtalk_auth.py | 72 | # Step 2: begin → device_code, verification_uri_complete | COMMENT |
| LOW⚡ | hermes_cli/send_cmd.py | 251 | # Step 1: dotenv | COMMENT |
| LOW⚡ | hermes_cli/send_cmd.py | 287 | # Step 2: bridge top-level config.yaml values into the environment so | COMMENT |
| LOW | hermes_cli/web_server.py | 12099 | # Step 1: request device code | COMMENT |
| LOW | hermes_cli/web_server.py | 12130 | # Step 2: poll until authorized | COMMENT |
| LOW | hermes_cli/web_server.py | 12164 | # Step 3: exchange authorization_code for tokens | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 2144 | # Step 1: Check / prompt for API key | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 2156 | # Step 2: Auto-detect endpoint from key prefix | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 2169 | # Step 3: Model selection — show appropriate models for the endpoint | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 3393 | # Step 2: Terminal Backend — where commands run is a core decision | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 3396 | # Step 3: Apply defaults for everything else | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 3401 | # Step 4: Offer messaging gateway setup | COMMENT |
| LOW | hermes_cli/setup.py | 3365 | # Step 1: Nous Portal — OAuth login + model selection. | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 2069 | # Step 1: only the local browser provider actually needs Chromium on | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 2075 | # Step 2: ensure the Chromium / headless-shell build agent-browser | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 278 | # Step 2: Show instructions | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 285 | # Step 3: Poll for completion | COMMENT |
| LOW | hermes_cli/copilot_auth.py | 245 | # Step 1: Request device code | COMMENT |
| LOW | hermes_cli/main.py | 4021 | # Step 1: Provider selection. | COMMENT |
| LOW | hermes_cli/main.py | 4143 | # Step 2: Provider-specific setup + model selection | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1245 | # Step 1: Create card with STREAM callback type | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1273 | # Step 2: Deliver card to the conversation | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1313 | # Step 3: Stream initial content. finalize=True closes the | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 178 | # Step 1: Receive auth_required | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 185 | # Step 2: Send auth | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 191 | # Step 3: Wait for auth_ok | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 198 | # Step 4: Subscribe to state_changed events | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1197 | # Step 2: Parallel fetch -- doc meta + comment details | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1216 | # Step 3: Build timeline based on comment type | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1349 | # Step 4: Run agent in a thread (run_conversation is synchronous) | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1362 | # Step 5: Deliver reply | COMMENT |
| 554 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | run_agent.py | 8348 | def _set_tool_guardrail_halt(self, decision: ToolGuardrailDecision) -> None: | CODE |
| LOW | run_agent.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | hermes_logging.py | 165 | def set_session_context(session_id: str) -> None: | CODE |
| LOW | hermes_time.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | utils.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | hermes_state.py | 105 | logger = logging.getLogger(__name__) | CODE |
| LOW | hermes_state.py | 709 | def _set_last_init_error(msg: Optional[str]) -> None: | CODE |
| LOW | hermes_state.py | 6245 | def set_expiry_finalized(self, session_id: str, finalized: bool = True) -> None: | CODE |
| LOW | hermes_state.py | 7622 | def set_compression_fallback_streak(self, session_id: str, streak: int) -> None: | CODE |
| LOW | hermes_state.py | 7703 | def set_compression_ineffective_count(self, session_id: str, count: int) -> None: | CODE |
| LOW | hermes_state.py | 8461 | def set_session_yolo(self, session_id: str, enabled: bool) -> None: | CODE |
| LOW | model_tools.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/wake_word.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/schema_sanitizer.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/voice_mode.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/tool_search.py | 1294 | __all__ = [ | CODE |
| LOW | tools/vision_tools.py | 71 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/bot_mode_dm.py | 57 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/process_registry.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/web_tools.py | 103 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/lazy_deps.py | 84 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/daemon_pool.py | 34 | __all__ = ["DaemonThreadPoolExecutor"] | CODE |
| LOW | tools/skill_ledger.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/tts_tool.py | 63 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/voice_client_config.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/tirith_security.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/browser_dialog_tool.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/path_security.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/url_safety.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/skills_hub.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/write_approval.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/browser_use_cli.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/clarify_gateway.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/delegation_live_log.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/registry.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/mcp_oauth.py | 65 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/mcp_oauth.py | 527 | async def set_tokens(self, tokens: "OAuthToken") -> None: | CODE |
| LOW | tools/mcp_oauth.py | 572 | async def set_client_info(self, client_info: "OAuthClientInformationFull") -> None: | CODE |
| LOW | tools/transcription_tools.py | 54 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/env_probe.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/browser_extension_router.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/interrupt.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/async_delegation.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/plugin_guard.py | 338 | __all__ = [ | CODE |
| LOW | tools/thread_context.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/spill_safety.py | 40 | __all__ = [ | CODE |
| LOW | tools/osv_check.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/memory_tool.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/__init__.py | 25 | __all__ = ["check_file_requirements"] | CODE |
| LOW | tools/code_kernel_remote.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/skill_usage.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/skill_usage.py | 993 | def set_state(skill_name: str, state: str) -> None: | CODE |
| LOW | tools/skill_usage.py | 1037 | def set_sync(skill_name: str, sync: bool) -> None: | CODE |
| LOW | tools/code_kernel.py | 66 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/credential_files.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/cronjob_tools.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/file_tools.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/file_tools.py | 2087 | def _update_read_timestamp(filepath: str, task_id: str) -> None: | CODE |
| LOW | tools/blueprints.py | 39 | logger = logging.getLogger(__name__) | CODE |
| 600 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | trajectory_compressor.py | 1493 | # Create a temporary directory for processing | COMMENT |
| MEDIUM | trajectory_compressor.py | 1540 | # Create a temp directory with sampled files | COMMENT |
| MEDIUM | hermes_state_search.py | 730 | # Create the empty v23 schema outside the write transaction — | COMMENT |
| MEDIUM | tools/skill_manager_tool.py | 969 | # Create the skill directory | COMMENT |
| MEDIUM | tools/file_operations.py | 1286 | # Create the parent dir in the SAME subprocess that writes the | COMMENT |
| MEDIUM | tools/discord_tool.py | 601 | # Create a standalone thread | COMMENT |
| MEDIUM | docker/stage2-hook.sh | 77 | # Create the directory (and any missing parents) while we still have root | COMMENT |
| MEDIUM | docker/stage2-hook.sh | 488 | # Create an empty, owner-only .env so the append below (and any | COMMENT |
| MEDIUM | hermes_cli/backup.py | 890 | # Create the zip | COMMENT |
| MEDIUM | hermes_cli/service_manager.py | 794 | # Create the leaf and clear a stale s6-log lock as hermes when | COMMENT |
| MEDIUM⚡ | hermes_cli/config_defaults.py | 1060 | # Create a guardrail in the Bedrock console, then set the ID and version here. | COMMENT |
| MEDIUM⚡ | hermes_cli/cli_commands_mixin.py | 1439 | # Create the new session with parent link. | COMMENT |
| MEDIUM | hermes_cli/main.py | 7915 | # Create a self-signed code-signing cert (valid 10 years) and import it | COMMENT |
| MEDIUM | plugins/platforms/matrix/adapter.py | 1734 | # Create the HTTP API layer. | COMMENT |
| MEDIUM | plugins/platforms/matrix/adapter.py | 1742 | # Create the client. | COMMENT |
| MEDIUM | plugins/platforms/whatsapp/adapter.py | 817 | # Create a persistent HTTP session for all bridge communication | COMMENT |
| MEDIUM | plugins/memory/honcho/__init__.py | 520 | # Create the remote session before running startup-only migration and | COMMENT |
| MEDIUM | tests/test_tui_gateway_server.py | 11213 | # Create a minimal PNG file with a space in its name | COMMENT |
| MEDIUM | tests/test_toolsets.py | 73 | # Create a cycle: A includes B, B includes A | COMMENT |
| MEDIUM | tests/test_mcp_serve.py | 186 | # Create a mock SessionDB that reads from our test DB | COMMENT |
| MEDIUM | tests/test_mcp_serve.py | 1133 | # Create a mock SessionDB that reads our test DB | COMMENT |
| MEDIUM | tests/test_hermes_state.py | 1113 | # Create a recent session | COMMENT |
| MEDIUM | tests/test_timezone.py | 210 | # Create a naive datetime — will be interpreted as system-local time | COMMENT |
| MEDIUM | tests/test_hermes_logging.py | 629 | # Create a stderr-like stream with ASCII encoding | COMMENT |
| MEDIUM | tests/test_hermes_constants.py | 627 | # Create a symlink with fewer path components | COMMENT |
| MEDIUM⚡ | tests/honcho_plugin/test_session.py | 465 | # Create a cached session so dialectic_query doesn't bail early | COMMENT |
| MEDIUM⚡ | tests/tools/test_transcription_tools.py | 486 | # Create a directory with a valid audio extension | COMMENT |
| MEDIUM⚡ | tests/tools/test_docker_find.py | 26 | # Create a fake docker binary at a known path | COMMENT |
| MEDIUM⚡ | tests/tools/test_browser_hardening.py | 205 | # Create a snapshot that exceeds the summarize threshold | COMMENT |
| MEDIUM | tests/tools/test_send_message_tool.py | 871 | # Create a test file | COMMENT |
| MEDIUM⚡ | tests/tools/test_skill_view_traversal.py | 24 | # Create a legitimate file inside the skill | COMMENT |
| MEDIUM⚡ | tests/tools/test_skill_view_traversal.py | 29 | # Create a sensitive file outside skills dir (simulating .env) | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 96 | # Create a symlink pointing outside the skills tree | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 174 | # Create a sensitive file one level above hermes_home | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 189 | # Create a fake sensitive file outside hermes_home | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 205 | # Create a file at an absolute path | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 234 | # Create a sensitive file outside hermes_home | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 238 | # Create a symlink inside hermes_home pointing outside | COMMENT |
| MEDIUM | tests/tools/test_docker_environment.py | 1398 | # Create a directory that looks like a corrupted credential file path | COMMENT |
| MEDIUM⚡ | tests/tools/test_mcp_stability.py | 445 | # Create a mock HermesCLI-like object with the needed attributes | COMMENT |
| MEDIUM | tests/tools/test_skill_size_limits.py | 77 | # Create a small skill first | COMMENT |
| MEDIUM | tests/tools/test_skill_size_limits.py | 94 | # Create a skill near the limit | COMMENT |
| MEDIUM | tests/tools/test_skill_size_limits.py | 113 | # Create a supporting file | COMMENT |
| MEDIUM⚡ | tests/tools/test_vision_tools.py | 549 | # Create a fake image file under a fake home directory | COMMENT |
| MEDIUM⚡ | tests/tools/test_vision_tools.py | 731 | # Create a small 10x10 red PNG | COMMENT |
| MEDIUM | tests/tools/test_vision_tools.py | 747 | # Create a dummy file | COMMENT |
| MEDIUM | tests/tools/test_sync_back_backends.py | 192 | # Create a fake control socket so cleanup tries the SSH exit | COMMENT |
| MEDIUM | tests/tools/test_interrupt.py | 84 | # Create a minimal mock agent with _interrupt_requested = True | COMMENT |
| MEDIUM | tests/docker/test_toplevel_chown.py | 78 | # Create a non-allowlisted file as root | COMMENT |
| MEDIUM | tests/hermes_cli/test_copilot_token_exchange.py | 103 | # Create a minimal pconfig mock | COMMENT |
| MEDIUM | tests/hermes_cli/test_mcp_config.py | 160 | # Create a fake token file | COMMENT |
| MEDIUM | tests/hermes_cli/test_setup_openclaw_migration.py | 38 | # Create a fake hermes home with config | COMMENT |
| MEDIUM | tests/hermes_cli/test_web_server_files.py | 271 | # Create a regular file and .env variants including shorthand suffixes. | COMMENT |
| MEDIUM⚡ | tests/hermes_cli/test_profile_export_credentials.py | 39 | # Create a profile with credentials | COMMENT |
| MEDIUM | tests/hermes_cli/test_backup.py | 624 | # Create a file with epoch timestamp (1970-01-01) | COMMENT |
| MEDIUM | tests/hermes_cli/test_doctor_command_install.py | 22 | # Create a fake venv entry point | COMMENT |
| MEDIUM | tests/hermes_cli/test_doctor_command_install.py | 80 | # Create a symlink pointing to wrong target | COMMENT |
| MEDIUM | tests/hermes_cli/test_web_server.py | 1590 | # Create a client WITHOUT the dashboard session header | COMMENT |
| MEDIUM | tests/hermes_cli/test_skin_engine.py | 95 | # Create a user skin YAML | COMMENT |
| MEDIUM | tests/hermes_cli/test_update_check.py | 20 | # Create a fake git repo and fresh cache | COMMENT |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | run_agent.py | 628 | # to write the fork's harness turn into the user's real session. Recall | COMMENT |
| MEDIUM | run_agent.py | 2155 | # here would land its harness turn ("Review the conversation above and | COMMENT |
| MEDIUM | package-lock.json | 16789 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| MEDIUM | trajectory_compressor.py | 1272 | """Print comprehensive compression summary statistics.""" | STRING |
| MEDIUM⚡ | hermes_state.py | 12523 | # fix) shared the parent's session_id wrote its harness turn into this | COMMENT |
| MEDIUM⚡ | hermes_state.py | 12524 | # real session. The harness is a user/system message instructing the | COMMENT |
| MEDIUM⚡ | hermes_state.py | 12528 | # actual task. Strip any such harness message AND the curator-mode | COMMENT |
| MEDIUM | hermes_state.py | 737 | # Distinctive opening shared by both background-review harness prompts | COMMENT |
| MEDIUM | hermes_state.py | 786 | # The curator-mode reply to the harness prompt — drop it. | COMMENT |
| MEDIUM | ui-tui/src/lib/resizeCoalescer.test.ts | 83 | // ~300ms / 30ms ≈ 10 reflows, not 30. Bound it loosely to stay robust. | COMMENT |
| MEDIUM | tools/browser_use_cli.py | 34 | # browsers (local Chrome / CDP override). The harness daemon attaches to the | COMMENT |
| MEDIUM | tools/browser_use_cli.py | 38 | # once per daemon (marker file keyed by BU_NAME under the harness runtime | COMMENT |
| MEDIUM | tools/browser_use_cli.py | 731 | # with the backend: BU_NAME namespaces the harness daemon (its IPC | COMMENT |
| LOW⚡ | tools/browser_use_cli.py | 561 | # provider here would just create a second, redundant session. The | COMMENT |
| MEDIUM | tools/browser_supervisor.py | 1118 | # Parse query string for dialog metadata. Use urllib to be robust. | COMMENT |
| LOW | tools/kanban_tools.py | 788 | # the write txn), so the worker can simply call | COMMENT |
| LOW | tools/kanban_tools.py | 847 | # this, a worker that learns kanban_complete is gated can just call | COMMENT |
| MEDIUM⚡ | tools/environments/base.py | 632 | # (re-exported by every _wrap_command with outer-harness-preserving | COMMENT |
| MEDIUM⚡ | tools/environments/base.py | 635 | # harness value arriving via the process env, exactly like the | COMMENT |
| MEDIUM | tools/environments/base.py | 969 | # agent-harness registry (``hermes-agent`` — see huggingface.js | COMMENT |
| MEDIUM | tools/environments/base.py | 975 | # never clobber an outer harness value that arrived via the inherited | COMMENT |
| MEDIUM | docker/hermes-exec-shim.sh | 69 | # Reference it by absolute path so the drop is robust against PATH | COMMENT |
| MEDIUM | hermes_cli/backup.py | 1173 | # so the two agree: neither step can re-elevate the restored file. | COMMENT |
| MEDIUM | hermes_cli/gateway.py | 6502 | # Absolutely everything else: Exception, asyncio.CancelledError, | COMMENT |
| LOW | hermes_cli/models.py | 3547 | # Already on openrouter, just return the resolved slug | COMMENT |
| LOW | hermes_cli/web_server.py | 8071 | pass # can't read disk config — just use the string form | CODE |
| LOW | hermes_cli/kanban.py | 1482 | # dispatcher doesn't need to enumerate — we just pass the name | COMMENT |
| MEDIUM⚡ | hermes_cli/main.py | 13110 | # under an AI agent harness. | COMMENT |
| MEDIUM | hermes_cli/main.py | 7376 | # robust even if the hook is somehow skipped.) | COMMENT |
| MEDIUM | plugins/platforms/discord/voice_mixer.py | 107 | # Pad to a whole number of frames so looping is seamless and the final | COMMENT |
| MEDIUM | plugins/platforms/telegram/adapter.py | 10107 | # Normalize mime_type for robust comparisons (some clients send | COMMENT |
| MEDIUM⚡ | plugins/kanban/dashboard/plugin_api.py | 2612 | # the simplest and most robust approach; it adds a fraction of a percent | COMMENT |
| MEDIUM | optional-skills/security/unbroker/scripts/autopilot.py | 235 | # broker (the whole CA Data Broker Registry) -- the highest-leverage removal there is. | COMMENT |
| MEDIUM | optional-skills/security/unbroker/scripts/registry.py | 74 | # Field label -> substring to locate its column on the header row (robust to | COMMENT |
| MEDIUM | web/src/components/ChatSessionList.tsx | 131 | // "New chat" prefers ChatPage's robust handler (clears resume + forces a | COMMENT |
| MEDIUM | web/src/pages/SkillsPage.tsx | 149 | // call signature supports it (clearer, and robust if a caller bypasses | COMMENT |
| MEDIUM | website/package-lock.json | 17200 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| MEDIUM⚡ | tests/test_background_review_session_isolation.py | 36 | # An assistant message that quotes the harness text is not itself a harness prompt. | COMMENT |
| MEDIUM | tests/tools/test_delegate.py | 1230 | # Use tiny thresholds so the assertion is scheduler-robust in CI: | COMMENT |
| LOW | tests/tools/test_env_probe.py | 142 | # Should not raise, should just return "" | COMMENT |
| MEDIUM | tests/docker/test_gateway_run_supervised.py | 141 | # harness profile has a configured model, but the want-intent | COMMENT |
| LOW⚡ | tests/hermes_cli/test_codex_runtime_plugin_migration.py | 402 | # We can't easily create one in the test, so just use a stable path | COMMENT |
| MEDIUM | tests/hermes_cli/test_agent_env_advertisement.py | 3 | Port of earendil-works/pi#7493: entry points advertise the agent harness to | STRING |
| MEDIUM⚡ | tests/hermes_cli/test_model_switch_parsing.py | 92 | # api_server._clean_request_string equivalent for the parity harness. | COMMENT |
| MEDIUM | tests/hermes_cli/test_kanban_notify.py | 618 | # dispatcher owner, which this focused watcher harness represents. | COMMENT |
| MEDIUM | …sts/hermes_cli/test_model_picker_excluded_providers.py | 81 | # alias from _PROVIDER_ALIASES to stay robust to renames. | COMMENT |
| LOW | tests/hermes_cli/test_commands.py | 1057 | # Both calls should succeed and just return the built-in set. | COMMENT |
| LOW | tests/hermes_cli/test_voice_wrapper.py | 174 | # Should simply return None without raising. | COMMENT |
| MEDIUM | tests/plugins/test_hindsight_root_guard.py | 57 | # sys.stderr write under the isolation harness, so assert on the log. | COMMENT |
| LOW | tests/plugins/test_langfuse_plugin.py | 160 | # Each hook should just return; no exceptions. | COMMENT |
| MEDIUM | tests/plugins/transcription/check_parity_vs_main.py | 192 | # so the harness can distinguish command-provider dispatch from a | COMMENT |
| MEDIUM | tests/plugins/tts/check_parity_vs_main.py | 198 | # This is the ONLY acceptable diff in the harness. | STRING |
| MEDIUM | tests/agent/test_moa_cold_start_cache_66793.py | 221 | # ─── test harness helpers ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/agent/test_rotation_flush_persisted_boundary_68196.py | 107 | # which is then ended. Read it back verbatim (include_inactive to be robust | COMMENT |
| MEDIUM | tests/agent/test_codex_ttfb_watchdog.py | 49 | # the test is robust to detection-logic changes elsewhere. | COMMENT |
| MEDIUM | tests/agent/test_org_skill_namespace.py | 206 | # highest-leverage ones in the system. | COMMENT |
| LOW | tests/agent/test_context_engine.py | 48 | # Trivial: just return as-is | COMMENT |
| MEDIUM | tests/agent/test_pre_compress_checkpoint_contract.py | 413 | # this harness genuinely exercises the call site (the finalizer swallows | COMMENT |
| MEDIUM⚡ | tests/agent/test_coding_context.py | 257 | # ── edit-format steering (per-model harness tuning) ────────────────────────── | COMMENT |
| MEDIUM | …ts/agent/test_context_engine_on_turn_complete_usage.py | 26 | # Reuse the minimal agent harness that exercises the real finalize_turn path. | COMMENT |
| 39 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui-tui/scripts/billing-fixtures.tsx | 62 | org_name: 'Acme Inc', | CODE |
| LOW | ui-tui/scripts/billing-fixtures.tsx | 119 | org_name: 'Acme Inc', | CODE |
| LOW⚡ | hermes_cli/auth.py | 667 | "placeholder", | CODE |
| LOW | hermes_cli/web_server.py | 5997 | "placeholder": field.placeholder, | CODE |
| LOW | hermes_cli/web_server.py | 6183 | entry["placeholder"] = host | CODE |
| LOW | hermes_cli/web_server.py | 6770 | "placeholder": str(raw.get("placeholder") or ""), | CODE |
| LOW | hermes_cli/web_server.py | 6915 | "placeholder": field["placeholder"], | CODE |
| LOW | hermes_cli/skin_engine.py | 1031 | "placeholder": f"{dim} italic", | CODE |
| LOW | plugins/platforms/feishu/adapter.py | 328 | "placeholder", | CODE |
| LOW | plugins/platforms/slack/adapter.py | 786 | "placeholder", | CODE |
| LOW⚡ | plugins/memory/holographic/store.py | 452 | 1. Capitalized multi-word phrases e.g. "John Doe" | CODE |
| LOW | optional-skills/mlops/research/dspy/SKILL.md | 358 | print(result.person.name) # "John Doe" | CODE |
| LOW | …ional-skills/mlops/research/dspy/references/modules.md | 236 | print(result.person.name) # "John Doe" | CODE |
| LOW | optional-skills/mlops/inference/outlines/SKILL.md | 96 | print(user.name) # "John Doe" | CODE |
| LOW | optional-skills/mlops/instructor/SKILL.md | 70 | print(user.name) # "John Doe" | CODE |
| LOW | optional-skills/mlops/instructor/SKILL.md | 636 | "name": "John Doe", | STRING |
| LOW | optional-skills/mlops/instructor/SKILL.md | 678 | "name": "John Doe", | CODE |
| LOW | optional-skills/productivity/here-now/SKILL.md | 140 | -d '{"email": "user@example.com"}' | CODE |
| LOW | optional-skills/productivity/here-now/SKILL.md | 149 | -d '{"email":"user@example.com","code":"ABCD-2345"}' | CODE |
| LOW | …/user-guide/skills/bundled/creative/creative-sketch.md | 105 | - Realistic fake content — actual sentences, actual names, not "Lorem ipsum" | CODE |
| LOW | …user-guide/skills/bundled/creative/creative-pretext.md | 67 | - **Real source/text, not lorem ipsum.** The corpus should mean something. Short manifestos, poetry, real source code, a | CODE |
| LOW | …user-guide/skills/bundled/creative/creative-pretext.md | 217 | - [ ] Corpus is real prose, not lorem ipsum, and matches the demo's concept | CODE |
| LOW | …ide/skills/bundled/productivity/productivity-notion.md | 332 | - **Email:** `{"email": "user@example.com"}` | CODE |
| LOW | …e/skills/bundled/productivity/productivity-nano-pdf.md | 62 | nano-pdf edit contract.pdf 2 "Change the client name from 'Acme Corp' to 'Acme Industries'" | CODE |
| LOW | …e/skills/bundled/productivity/productivity-airtable.md | 122 | - Exact match: `{Email}='user@example.com'` | CODE |
| LOW | …e/skills/bundled/productivity/productivity-airtable.md | 184 | {"fields": {"Email": "user@example.com", "Status": "Active"}} | CODE |
| LOW | …s/user-guide/skills/optional/mlops/mlops-instructor.md | 87 | print(user.name) # "John Doe" | CODE |
| LOW | …s/user-guide/skills/optional/mlops/mlops-instructor.md | 653 | "name": "John Doe", | STRING |
| LOW | …s/user-guide/skills/optional/mlops/mlops-instructor.md | 695 | "name": "John Doe", | CODE |
| LOW | …ser-guide/skills/optional/mlops/mlops-research-dspy.md | 375 | print(result.person.name) # "John Doe" | CODE |
| LOW | …uide/skills/optional/mlops/mlops-inference-outlines.md | 113 | print(user.name) # "John Doe" | CODE |
| LOW | …/skills/optional/productivity/productivity-here-now.md | 154 | -d '{"email": "user@example.com"}' | CODE |
| LOW | …/skills/optional/productivity/productivity-here-now.md | 163 | -d '{"email":"user@example.com","code":"ABCD-2345"}' | CODE |
| LOW | …/user-guide/skills/bundled/creative/creative-sketch.md | 103 | - 真实的虚假内容——实际句子、实际姓名,而非"Lorem ipsum" | CODE |
| LOW | …user-guide/skills/bundled/creative/creative-pretext.md | 67 | - **使用真实语料,而非 lorem ipsum。** 语料库应有意义。短篇宣言、诗歌、真实源代码、发现的文本、库自身的 README —— 绝不用 `lorem ipsum`。 | CODE |
| LOW | …user-guide/skills/bundled/creative/creative-pretext.md | 217 | - [ ] 语料库为真实散文,非 lorem ipsum,且与演示概念匹配 | CODE |
| LOW | …ide/skills/bundled/productivity/productivity-notion.md | 332 | - **邮箱(Email):** `{"email": "user@example.com"}` | CODE |
| LOW | …e/skills/bundled/productivity/productivity-nano-pdf.md | 61 | nano-pdf edit contract.pdf 2 "Change the client name from 'Acme Corp' to 'Acme Industries'" | CODE |
| LOW | …e/skills/bundled/productivity/productivity-airtable.md | 122 | - 精确匹配:`{Email}='user@example.com'` | CODE |
| LOW | …e/skills/bundled/productivity/productivity-airtable.md | 184 | {"fields": {"Email": "user@example.com", "Status": "Active"}} | CODE |
| LOW | …t/user-guide/skills/optional/mlops/mlops-instructor.md | 87 | print(user.name) # "John Doe" | CODE |
| LOW | …t/user-guide/skills/optional/mlops/mlops-instructor.md | 653 | "name": "John Doe", | STRING |
| LOW | …t/user-guide/skills/optional/mlops/mlops-instructor.md | 695 | "name": "John Doe", | CODE |
| LOW | …uide/skills/optional/mlops/mlops-inference-outlines.md | 95 | print(user.name) # "John Doe" | CODE |
| LOW | …/skills/optional/productivity/productivity-here-now.md | 154 | -d '{"email": "user@example.com"}' | CODE |
| LOW | …/skills/optional/productivity/productivity-here-now.md | 163 | -d '{"email":"user@example.com","code":"ABCD-2345"}' | CODE |
| LOW | tests/test_iron_proxy.py | 637 | (state / "ca.key").write_text("fake-key") | CODE |
| LOW⚡ | tests/test_tui_gateway_server.py | 15550 | fake_key = "replacement-" + "value" | CODE |
| LOW⚡ | tests/test_tui_gateway_server.py | 15556 | "api_key": fake_key, | CODE |
| LOW⚡ | tests/test_tui_gateway_server.py | 15563 | save_credential.assert_called_once_with(env_var, fake_key) | CODE |
| LOW | tests/test_mcp_serve.py | 1297 | db_path.write_text("placeholder") | CODE |
| LOW | tests/test_mcp_serve.py | 1344 | db_path.write_text("placeholder") | CODE |
| LOW | tests/test_mcp_serve.py | 1390 | db_path.write_text("placeholder") | CODE |
| LOW | tests/tools/test_subprocess_utf8_encoding.py | 49 | returncode=0, stdout="user@example.com", stderr="" | CODE |
| LOW⚡ | tests/tools/test_local_env_blocklist.py | 79 | "OPENAI_API_KEY": "sk-fake-key", | CODE |
| LOW⚡ | tests/tools/test_local_env_blocklist.py | 80 | "OPENROUTER_API_KEY": "or-fake-key", | CODE |
| LOW⚡ | tests/tools/test_local_env_blocklist.py | 81 | "ANTHROPIC_API_KEY": "ant-fake-key", | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 215 | fake_key = "sk-" + "FAKESECRETVALUE1234567890ABCDEF" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 218 | f"text: API Key: {fake_key}\n" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 244 | fake_token = "ghp_" + "FAKEGITHUBTOKEN12345678901234" | CODE |
| 208 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 303 | print('CLEAR');raise SystemExit | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 305 | print('UNCERTAIN');raise SystemExit | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 307 | print('UNCERTAIN');raise SystemExit | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 310 | print('UNCERTAIN');raise SystemExit | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 315 | print('UNCERTAIN');raise SystemExit | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 319 | print('CLEAR') | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 321 | print('LIVE:'+str(owner)) | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 324 | elif error.errno==errno.EPERM:print('LIVE:'+str(owner)) | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 327 | print('LIVE:'+str(owner)) | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 851 | except (ValueError,IndexError):return False | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 856 | print("UNAVAILABLE");sys.exit(2) | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 864 | print("REFUSED");sys.exit(3) | CODE |
| HIGH⚡ | apps/desktop/electron/remote-lifecycle.ts | 869 | print("DARWIN_UNAVAILABLE");sys.exit(2) | CODE |
| HIGH | apps/desktop/electron/remote-lifecycle.ts | 885 | print("TERMINATED") | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 334 | os.kill(pid,0);return True | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 335 | except ProcessLookupError:return False | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 336 | except PermissionError:return True | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 337 | except OSError:return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 348 | return False if ctypes.get_last_error()==87 else None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 351 | if not kernel.GetExitCodeProcess(handle,ctypes.byref(code)):return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 354 | except Exception:return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 362 | except (OSError,UnicodeError,IndexError):return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 368 | except (OSError,subprocess.CalledProcessError):return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 369 | return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 379 | if not handle:return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 382 | if not kernel.GetProcessTimes(handle,ctypes.byref(created),ctypes.byref(exited),ctypes.byref(kernel_time),ct | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 386 | except Exception:return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 428 | return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 432 | except (FileNotFoundError,OSError,UnicodeError,ValueError):return None | CODE |
| HIGH⚡ | apps/desktop/electron/managed-ssh-update.ts | 433 | if not isinstance(payload,dict) or payload.get('correlation_id')!=correlation:return None | CODE |
| HIGH | apps/desktop/electron/managed-ssh-update.ts | 404 | except FileNotFoundError:return None | CODE |
| HIGH | apps/desktop/electron/managed-ssh-update.ts | 413 | except OSError:return None | CODE |
| HIGH | apps/desktop/electron/managed-ssh-update.ts | 453 | print(json.dumps({'marker':state['state'],'markerPid':state.get('pid'),'launchIntent':launch_intent(),'exitCode':termina | CODE |
| HIGH | apps/desktop/src/app/settings/helpers.ts | 216 | // `if key in BUILTIN_*_PROVIDERS: return None`), so a ``providers.edge`` block | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hermes_state_search.py | 1248 | # Step 3: Collapse repeated * (e.g. "***") into a single one, | COMMENT |
| LOW⚡ | hermes_state_search.py | 1253 | # Step 4: Remove dangling boolean operators at start/end that would | COMMENT |
| LOW⚡ | hermes_state_search.py | 1258 | # Step 5: Wrap unquoted dotted and/or hyphenated terms in double | COMMENT |
| LOW⚡ | hermes_state_search.py | 1266 | # Step 6: Restore preserved quoted phrases | COMMENT |
| LOW | hermes_state_search.py | 1201 | # Step 1: Extract balanced double-quoted phrases and protect them | COMMENT |
| LOW | hermes_state_search.py | 1227 | # Step 2: Strip remaining (unmatched) FTS5-special characters. ``:`` is | COMMENT |
| LOW | tools/skills_hub.py | 1746 | # Step 1: fetch the sitemap index → list of skill-sitemap URLs. | COMMENT |
| LOW | tools/skills_hub.py | 1768 | # Step 2: fetch each skill sitemap and collect canonical "owner/repo/skill" IDs. | COMMENT |
| LOW⚡ | tools/skills_sync.py | 1136 | # Step 2: drop the manifest entry so next sync treats it as new | COMMENT |
| LOW⚡ | tools/skills_sync.py | 1141 | # Step 3: run sync to re-baseline (or re-copy if we deleted) | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 837 | # Step 1: Did disk change? Picks up external refresh. | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 846 | # Step 2: No disk change — if the SDK can refresh | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 340 | # Step 1: PRM discovery to learn the authorization_server URL. | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 362 | # Step 2: ASM discovery against the auth_server_url (or | COMMENT |
| LOW⚡ | tools/yuanbao_tools.py | 372 | # Step 2: Send text DM + media | COMMENT |
| LOW⚡ | tools/yuanbao_tools.py | 382 | # Step 3: Send media files | COMMENT |
| LOW | tools/yuanbao_tools.py | 324 | # Step 1: Resolve user_id from group member list if not provided | COMMENT |
| LOW | tools/send_message_tool.py | 2261 | # Step 1: Get access token | COMMENT |
| LOW | tools/send_message_tool.py | 2273 | # Step 2: Send message via REST | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 3173 | # Step 1: enumerate on-screen windows to find target pid/window_id. | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 3188 | # Step 0: explicit full-screen capture — a composited grab of | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 3311 | # Step 2: capture. | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 8431 | # Step 2: Show user the code | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 8439 | # Step 3: Poll for authorization code | COMMENT |
| LOW | hermes_cli/auth.py | 8362 | # Step 1: Request device code. OpenAI's auth endpoint rate-limits this | COMMENT |
| LOW | hermes_cli/auth.py | 8474 | # Step 4: Exchange authorization code for tokens | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 170 | # Step 1: Select platform | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 174 | # Step 2: Select mode — individual or by category | COMMENT |
| LOW⚡ | hermes_cli/dingtalk_auth.py | 66 | # Step 1: init → nonce | COMMENT |
| LOW⚡ | hermes_cli/dingtalk_auth.py | 72 | # Step 2: begin → device_code, verification_uri_complete | COMMENT |
| LOW⚡ | hermes_cli/send_cmd.py | 251 | # Step 1: dotenv | COMMENT |
| LOW⚡ | hermes_cli/send_cmd.py | 287 | # Step 2: bridge top-level config.yaml values into the environment so | COMMENT |
| LOW | hermes_cli/web_server.py | 12099 | # Step 1: request device code | COMMENT |
| LOW | hermes_cli/web_server.py | 12130 | # Step 2: poll until authorized | COMMENT |
| LOW | hermes_cli/web_server.py | 12164 | # Step 3: exchange authorization_code for tokens | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 2144 | # Step 1: Check / prompt for API key | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 2156 | # Step 2: Auto-detect endpoint from key prefix | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 2169 | # Step 3: Model selection — show appropriate models for the endpoint | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 3393 | # Step 2: Terminal Backend — where commands run is a core decision | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 3396 | # Step 3: Apply defaults for everything else | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 3401 | # Step 4: Offer messaging gateway setup | COMMENT |
| LOW | hermes_cli/setup.py | 3365 | # Step 1: Nous Portal — OAuth login + model selection. | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 2069 | # Step 1: only the local browser provider actually needs Chromium on | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 2075 | # Step 2: ensure the Chromium / headless-shell build agent-browser | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 278 | # Step 2: Show instructions | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 285 | # Step 3: Poll for completion | COMMENT |
| LOW | hermes_cli/copilot_auth.py | 245 | # Step 1: Request device code | COMMENT |
| LOW | hermes_cli/main.py | 4021 | # Step 1: Provider selection. | COMMENT |
| LOW | hermes_cli/main.py | 4143 | # Step 2: Provider-specific setup + model selection | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1245 | # Step 1: Create card with STREAM callback type | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1273 | # Step 2: Deliver card to the conversation | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1313 | # Step 3: Stream initial content. finalize=True closes the | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 178 | # Step 1: Receive auth_required | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 185 | # Step 2: Send auth | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 191 | # Step 3: Wait for auth_ok | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 198 | # Step 4: Subscribe to state_changed events | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1197 | # Step 2: Parallel fetch -- doc meta + comment details | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1216 | # Step 3: Build timeline based on comment type | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1349 | # Step 4: Run agent in a thread (run_conversation is synchronous) | COMMENT |
| LOW | plugins/platforms/feishu/feishu_comment.py | 1362 | # Step 5: Deliver reply | COMMENT |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | hermes_cli/auth.py | 664 | "your_api_key", | CODE |
| HIGH⚡ | hermes_cli/auth.py | 666 | "your-api-key", | CODE |
| HIGH | optional-skills/research/pinecone-research/SKILL.md | 43 | export PINECONE_API_KEY="your-api-key" | CODE |
| HIGH | …s/devops/inference-sh-cli/references/authentication.md | 30 | export INFSH_API_KEY=your-api-key | CODE |
| HIGH | optional-skills/mlops/research/dspy/SKILL.md | 296 | api_key="your-api-key", # Or set ANTHROPIC_API_KEY env var | CODE |
| HIGH | optional-skills/mlops/research/dspy/SKILL.md | 308 | api_key="your-api-key", | CODE |
| HIGH | optional-skills/mlops/guidance/SKILL.md | 289 | api_key="your-api-key" # Or set OPENAI_API_KEY env var | CODE |
| HIGH | optional-skills/mlops/guidance/references/backends.md | 28 | api_key="your-api-key-here" | CODE |
| HIGH | optional-skills/mlops/guidance/references/backends.md | 53 | api_key="your-api-key", | CODE |
| HIGH | optional-skills/mlops/guidance/references/backends.md | 95 | api_key="your-api-key-here" | CODE |
| HIGH | optional-skills/mlops/guidance/references/backends.md | 120 | api_key="your-api-key", | CODE |
| HIGH | optional-skills/mlops/pinecone/SKILL.md | 56 | pc = Pinecone(api_key="your-api-key") | CODE |
| HIGH | optional-skills/mlops/qdrant/SKILL.md | 430 | api_key="your-api-key" | CODE |
| HIGH | …onal-skills/mlops/qdrant/references/troubleshooting.md | 117 | api_key="your-api-key" | CODE |
| HIGH | …skills/mlops/inference/outlines/references/backends.md | 381 | model = outlines.models.openai("gpt-4o-mini", api_key="your-api-key") | CODE |
| HIGH | …skills/mlops/inference/outlines/references/backends.md | 393 | api_key="your-api-key", # Or set OPENAI_API_KEY env var | CODE |
| HIGH | optional-skills/mlops/instructor/SKILL.md | 345 | Anthropic(api_key="your-api-key") | CODE |
| HIGH | optional-skills/mlops/instructor/SKILL.md | 363 | OpenAI(api_key="your-api-key") | CODE |
| HIGH | …tional-skills/mlops/instructor/references/providers.md | 16 | Anthropic(api_key="your-api-key") | CODE |
| HIGH | …skills/optional/research/research-pinecone-research.md | 60 | export PINECONE_API_KEY="your-api-key" | CODE |
| HIGH | …/docs/user-guide/skills/optional/mlops/mlops-qdrant.md | 447 | api_key="your-api-key" | CODE |
| HIGH | …s/user-guide/skills/optional/mlops/mlops-instructor.md | 362 | Anthropic(api_key="your-api-key") | CODE |
| HIGH | …s/user-guide/skills/optional/mlops/mlops-instructor.md | 380 | OpenAI(api_key="your-api-key") | CODE |
| HIGH | …ocs/user-guide/skills/optional/mlops/mlops-pinecone.md | 73 | pc = Pinecone(api_key="your-api-key") | CODE |
| HIGH | …ser-guide/skills/optional/mlops/mlops-research-dspy.md | 313 | api_key="your-api-key", # Or set ANTHROPIC_API_KEY env var | CODE |
| HIGH | …ser-guide/skills/optional/mlops/mlops-research-dspy.md | 325 | api_key="your-api-key", | CODE |
| HIGH | …ocs/user-guide/skills/optional/mlops/mlops-guidance.md | 306 | api_key="your-api-key" # Or set OPENAI_API_KEY env var | CODE |
| HIGH | …rrent/user-guide/skills/optional/mlops/mlops-qdrant.md | 439 | api_key="your-api-key" | CODE |
| HIGH | …t/user-guide/skills/optional/mlops/mlops-instructor.md | 362 | Anthropic(api_key="your-api-key") | CODE |
| HIGH | …t/user-guide/skills/optional/mlops/mlops-instructor.md | 380 | OpenAI(api_key="your-api-key") | CODE |
| HIGH | …ent/user-guide/skills/optional/mlops/mlops-pinecone.md | 71 | pc = Pinecone(api_key="your-api-key") | CODE |
| HIGH | …ent/user-guide/skills/optional/mlops/mlops-guidance.md | 293 | api_key="your-api-key" # 或设置 ANTHROPIC_API_KEY 环境变量 | CODE |
| HIGH | …ent/user-guide/skills/optional/mlops/mlops-guidance.md | 302 | api_key="your-api-key" # 或设置 OPENAI_API_KEY 环境变量 | CODE |
| HIGH | …uide/skills/optional/mlops/mlops-inference-outlines.md | 245 | api_key="your-api-key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 171 | # Check if error field exists AND has a non-null value | COMMENT |
| LOW | hermes_constants.py | 218 | # Check if this is a profile path: <root>/profiles/<name> | COMMENT |
| LOW | setup-hermes.sh | 288 | # Check if sudo is available | COMMENT |
| LOW | run_agent.py | 1757 | # Check if there's any non-whitespace content remaining | COMMENT |
| LOW | trajectory_compressor.py | 773 | # Check if compression needed | COMMENT |
| LOW | trajectory_compressor.py | 788 | # Check if there's anything to compress | COMMENT |
| LOW | trajectory_compressor.py | 813 | # Check if we have enough savings | COMMENT |
| LOW | trajectory_compressor.py | 908 | # Check if compression needed | COMMENT |
| LOW | trajectory_compressor.py | 923 | # Check if there's anything to compress | COMMENT |
| LOW | hermes_state.py | 12254 | # Check if the current node has messages. | COMMENT |
| LOW | tools/vision_tools.py | 1758 | # Check if vision model is available | COMMENT |
| LOW | tools/process_registry.py | 1536 | # Check if process is still running | COMMENT |
| LOW | tools/web_tools.py | 1577 | # Check if API keys are available | COMMENT |
| LOW | tools/skills_hub.py | 982 | # Check if ANY entry lives under the target path | COMMENT |
| LOW | tools/fuzzy_match.py | 983 | # Check if this block matches | COMMENT |
| LOW | tools/browser_tool.py | 2426 | # Check if the daemon is still alive. ``os.kill(pid, 0)`` on Windows | COMMENT |
| LOW | tools/browser_tool.py | 2779 | # Check if we already have a session for this task | COMMENT |
| LOW | tools/browser_tool.py | 2962 | # Check if it's in PATH (global install) | COMMENT |
| LOW | tools/browser_tool.py | 5288 | # Check if screenshot file was created | COMMENT |
| LOW | tools/browser_tool.py | 5575 | # Check if session exists (under lock), but don't remove yet - | COMMENT |
| LOW | tools/terminal_tool.py | 3247 | # Check if this is an approval_required (gateway ask mode) | COMMENT |
| LOW | tools/skills_tool.py | 1445 | # Read the file once — reused for platform check and main content below | COMMENT |
| LOW | tools/skills_tool.py | 1503 | # Check if the skill is disabled by the user | COMMENT |
| LOW | tools/skills_tool.py | 1591 | # Read the file content | COMMENT |
| LOW | tools/skills_guard.py | 1320 | # Check if source matches any trusted repo exactly, or a skill path inside | COMMENT |
| LOW | tools/mcp_tool.py | 4255 | # Check if shutdown was requested during the sleep | COMMENT |
| LOW | tools/mcp_tool.py | 6375 | # Check if the MCP tool itself returned an error | COMMENT |
| LOW | tools/file_operations.py | 1524 | # Check if file exists and get size (POSIX, works on Linux + macOS) | COMMENT |
| LOW | tools/file_operations.py | 1555 | # Check if file is too large | COMMENT |
| LOW | tools/file_operations.py | 1652 | # Check if truncated | COMMENT |
| LOW | tools/file_operations.py | 2850 | # Check if parent directory exists and list similar entries | COMMENT |
| LOW | hermes_cli/backup.py | 1049 | # Check if all entries share a common first directory | COMMENT |
| LOW | hermes_cli/gateway.py | 7513 | # Check if signal-cli is available | COMMENT |
| LOW | hermes_cli/config.py | 2172 | # Check if dict keys look like they should be list-entry fields | COMMENT |
| LOW | hermes_cli/config.py | 5618 | # Check if it's an API key (goes to .env) | COMMENT |
| LOW | hermes_cli/models.py | 2764 | # Check if this provider has credentials available | COMMENT |
| LOW | hermes_cli/skills_hub.py | 594 | # Check if any source hit GitHub API rate limit | COMMENT |
| LOW | hermes_cli/skills_hub.py | 673 | # Check if already installed | COMMENT |
| LOW | hermes_cli/model_switch.py | 2106 | # Check if the requested model matches the entry's model | COMMENT |
| LOW | hermes_cli/model_switch.py | 2876 | # Check if any env var is set | COMMENT |
| LOW | hermes_cli/model_switch.py | 2957 | # Check if credentials exist | COMMENT |
| LOW | hermes_cli/web_server.py | 6248 | # Write the file reads resolve, or a save shadows it with a sparse copy. | COMMENT |
| LOW | hermes_cli/config_defaults.py | 185 | # Set False to disable both. | COMMENT |
| LOW | hermes_cli/config_defaults.py | 245 | # Set false to keep the evidence nudge terse. | COMMENT |
| LOW | hermes_cli/config_defaults.py | 1390 | # Set false to restore the legacy c-j submit fallback on unusual POSIX | COMMENT |
| LOW | hermes_cli/config_defaults.py | 1500 | # Set 0 to disable the background refresh if it fights terminal | COMMENT |
| LOW | hermes_cli/config_defaults.py | 1646 | # Set this to True to re-enable the surfaces with the understanding | COMMENT |
| LOW | hermes_cli/config_defaults.py | 1776 | # Set explicitly to pin a backend: | COMMENT |
| LOW | hermes_cli/config_defaults.py | 1858 | # Set false to keep STT for the agent while suppressing that user-facing echo. | COMMENT |
| LOW | hermes_cli/config_defaults.py | 3688 | # Set 0 to disable. | COMMENT |
| LOW | hermes_cli/cli_commands_mixin.py | 2293 | # Display result in the CLI (thread-safe via patch_stdout). | COMMENT |
| LOW | hermes_cli/cli_commands_mixin.py | 2493 | # Check if a Chromium-family browser is already serving CDP on the debug port. | COMMENT |
| LOW | hermes_cli/setup.py | 1216 | # Check if already installed | COMMENT |
| LOW | hermes_cli/setup.py | 1362 | # Check if already installed | COMMENT |
| LOW | hermes_cli/setup.py | 1479 | # Check if Docker is available | COMMENT |
| LOW | hermes_cli/setup.py | 1517 | # Check if singularity/apptainer is available | COMMENT |
| LOW | hermes_cli/setup.py | 1576 | # Check if modal SDK is installed | COMMENT |
| LOW | hermes_cli/setup.py | 1617 | # Check if daytona SDK is installed | COMMENT |
| LOW | hermes_cli/setup.py | 2312 | # Check if any home channels are missing | COMMENT |
| LOW | hermes_cli/setup.py | 3129 | # Check if a specific section was requested | COMMENT |
| 81 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | toolset_distributions.py | 242 | Sample toolsets based on a distribution's probabilities. Each toolset in the distribution has a % chance o | STRING |
| HIGH | tools/vision_tools.py | 554 | Download an image from a URL to a local destination (async) with retry logic. Args: image_url (str | STRING |
| HIGH | tools/vision_tools.py | 1401 | Analyze an image from a URL or local file path using vision AI. This tool accepts either an HTTP/HTTPS URL | STRING |
| HIGH | tools/web_tools.py | 839 | Search the web for information using available search API backend. This function provides a generic interface | STRING |
| HIGH | tools/web_tools.py | 1053 | Extract content from specific web pages using available extraction API backend. Returns clean page content (ma | STRING |
| HIGH | tools/terminal_tool.py | 2832 | Execute a command in the configured terminal environment. Args: command: The command to execute | STRING |
| HIGH | hermes_cli/plugins.py | 1896 | Call a tool on a configured MCP server (#64204, capability-gated). Synchronous; safe to call from plugin hooks | STRING |
| HIGH | hermes_cli/plugins.py | 3087 | Register a native-client handler factory for a gateway platform. The generic surface for plugins that need to r | STRING |
| HIGH | hermes_cli/plugins.py | 3164 | Register a python-telegram-bot handler factory from a plugin. Hermes' Telegram adapter invokes registered facto | STRING |
| HIGH | hermes_cli/model_normalize.py | 291 | Detect the vendor slug from a bare model name. Uses the first hyphen-delimited token of the model name to look up | STRING |
| HIGH | hermes_cli/model_normalize.py | 428 | Translate a model name into the format the target provider's API expects. This is the primary entry point for model | STRING |
| HIGH | plugins/memory/honcho/session.py | 874 | Query Honcho's dialectic endpoint about a peer. Runs an LLM on Honcho's backend against the target pee | STRING |
| HIGH | plugins/memory/honcho/session.py | 1472 | Search raw messages across every session visible from the target peer's perspective. Results include al | STRING |
| HIGH | agent/auxiliary_client.py | 9722 | Centralized synchronous LLM call. Resolves provider + model (from task config, explicit args, or auto-detect), | STRING |
| HIGH | gateway/platforms/base.py | 855 | Save raw image bytes to the cache and return the absolute file path. Args: data: Raw image bytes. | STRING |
| HIGH | gateway/platforms/base.py | 884 | Download an image from a URL and save it to the local cache. Retries on transient failures (timeouts, 429, 5xx | STRING |
| HIGH | gateway/platforms/base.py | 1026 | Download an audio file from a URL and save it to the local cache. Retries on transient failures (timeouts, 429 | STRING |
| HIGH | gateway/platforms/base.py | 2207 | Save raw document bytes to the cache and return the absolute file path. The cached filename preserves the orig | STRING |
| HIGH | gateway/platforms/yuanbao_media.py | 206 | 下载 URL 内容,返回 (bytes, content_type)。 Args: url: HTTP(S) URL max_size_mb: 最大允许大小(MB),超 | STRING |
| HIGH | gateway/platforms/yuanbao_media.py | 368 | 调用 genUploadInfo 接口获取 COS 临时密钥及上传配置。 Args: app_key: 应用 Key(用于 X-ID 头) api_domain: A | STRING |
| HIGH | gateway/platforms/yuanbao_media.py | 445 | 通过 httpx PUT 请求将文件上传到 COS。 使用临时凭证(tmpSecretId/tmpSecretKey/sessionToken)构建 HMAC-SHA1 签名。 Args: fil | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 1206 | CODE | |
| LOW | batch_runner.py | 574 | CODE | |
| LOW | run_agent.py | 9099 | CODE | |
| LOW | run_agent.py | 445 | CODE | |
| LOW | run_agent.py | 8592 | CODE | |
| LOW | mini_swe_runner.py | 630 | CODE | |
| LOW | mini_swe_runner.py | 163 | CODE | |
| LOW | hermes_state.py | 5918 | CODE | |
| LOW | hermes_state.py | 6115 | CODE | |
| LOW | hermes_state.py | 7034 | CODE | |
| LOW | hermes_state.py | 8869 | CODE | |
| LOW | hermes_state.py | 9151 | CODE | |
| LOW | hermes_state.py | 10389 | CODE | |
| LOW | hermes_state.py | 11061 | CODE | |
| LOW | hermes_state.py | 13193 | CODE | |
| LOW | hermes_state.py | 13785 | CODE | |
| LOW | model_tools.py | 1184 | CODE | |
| LOW | model_tools.py | 1240 | CODE | |
| LOW | hermes_state_search.py | 1415 | CODE | |
| LOW | hermes_state_search.py | 1709 | CODE | |
| LOW | tools/voice_mode.py | 1807 | CODE | |
| LOW | tools/voice_mode.py | 2021 | CODE | |
| LOW | tools/web_tools.py | 690 | CODE | |
| LOW | tools/session_search_tool.py | 953 | CODE | |
| LOW | tools/session_search_tool.py | 1082 | CODE | |
| LOW | tools/registry.py | 763 | CODE | |
| LOW | tools/tour_tool.py | 35 | CODE | |
| LOW | tools/cronjob_tools.py | 1460 | CODE | |
| LOW | tools/file_tools.py | 2312 | CODE | |
| LOW | tools/file_tools.py | 2532 | CODE | |
| LOW | tools/drive_preview_tool.py | 54 | CODE | |
| LOW | tools/terminal_tool.py | 2687 | CODE | |
| LOW | tools/terminal_tool.py | 2819 | CODE | |
| LOW | tools/skill_manager_tool.py | 1576 | CODE | |
| LOW | tools/image_generation_tool.py | 1200 | CODE | |
| LOW | tools/file_operations.py | 2411 | CODE | |
| LOW | tools/delegate_tool.py | 1606 | CODE | |
| LOW | tools/delegate_tool.py | 3626 | CODE | |
| LOW | tools/discord_tool.py | 986 | CODE | |
| LOW | tools/environments/vercel_sandbox.py | 248 | CODE | |
| LOW | tools/environments/docker.py | 901 | CODE | |
| LOW | tools/computer_use/backend.py | 143 | CODE | |
| LOW | tools/computer_use/backend.py | 157 | CODE | |
| LOW | tools/computer_use/cua_backend.py | 3610 | CODE | |
| LOW | tools/computer_use/cua_backend.py | 3663 | CODE | |
| LOW | hermes_cli/plugins.py | 6922 | CODE | |
| LOW | hermes_cli/auth.py | 6233 | CODE | |
| LOW | hermes_cli/auth.py | 7705 | CODE | |
| LOW | hermes_cli/auth.py | 9062 | CODE | |
| LOW | hermes_cli/model_switch.py | 1227 | CODE | |
| LOW | hermes_cli/model_switch.py | 1293 | CODE | |
| LOW | hermes_cli/model_switch.py | 2571 | CODE | |
| LOW | hermes_cli/model_switch.py | 3934 | CODE | |
| LOW | hermes_cli/web_server.py | 19628 | CODE | |
| LOW | hermes_cli/update_receipt.py | 92 | CODE | |
| LOW | hermes_cli/kanban_swarm.py | 128 | CODE | |
| LOW | hermes_cli/kanban_swarm.py | 199 | CODE | |
| LOW | hermes_cli/kanban_db.py | 3169 | CODE | |
| LOW | hermes_cli/kanban_db.py | 3661 | CODE | |
| LOW | hermes_cli/kanban_db.py | 9819 | CODE | |
| 84 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …tional-skills/mlops/training/axolotl/references/api.md | 658 | core.trainers.grpo.sampler.SequenceParallelRepeatRandomSampler.set_epoch(epoch) | CODE |
| CRITICAL | …tional-skills/mlops/training/axolotl/references/api.md | 1795 | core.trainers.grpo.trainer.AxolotlGRPOSequenceParallelTrainer.get_train_dataloader( | CODE |
| CRITICAL | …tional-skills/mlops/training/axolotl/references/api.md | 4690 | core.trainers.dpo.trainer.AxolotlDPOTrainer.push_to_hub(*args, **kwargs) | CODE |
| CRITICAL | …tional-skills/mlops/training/axolotl/references/api.md | 4892 | core.trainers.mixins.scheduler.SchedulerMixin.create_scheduler( | CODE |
| CRITICAL | tests/cli/test_manual_compress.py | 195 | assert shell.agent._compress_context.call_args.kwargs.get("force") is True | CODE |
| CRITICAL⚡ | tests/run_agent/test_stream_stale_breaker_reset.py | 174 | agent.client.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/run_agent/test_run_agent.py | 2800 | sent_msgs = agent.client.chat.completions.create.call_args.kwargs.get("messages", []) | CODE |
| CRITICAL | tests/gateway/test_stream_consumer_thread_routing.py | 152 | mock_client.im.v1.message.create.assert_called_once() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ve/kanban-video-orchestrator/references/tool-matrix.md | 165 | # - comfyui (AI-generated visuals) | COMMENT |
| HIGH | …er-guide/skills/bundled/creative/creative-humanizer.md | 659 | This skill is ported from [blader/humanizer](https://github.com/blader/humanizer) (MIT licensed), which is itself based | CODE |
| HIGH⚡ | skills/index-cache/lobehub_index.json | 1 | {"schemaVersion": 1, "agents": [{"author": "CSY2022", "createdAt": "2025-06-19", "homepage": "https://github.com/CSY2022 | CODE |
| HIGH | …ls/creative/popular-web-designs/templates/replicate.md | 266 | - "Create a manifesto section on Replicate Dark (#202020) with 'Imagine what you can build.' at 128px rb-freigeist-neue | CODE |
| HIGH | skills/creative/humanizer/SKILL.md | 643 | This skill is ported from [blader/humanizer](https://github.com/blader/humanizer) (MIT licensed), which is itself based | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.windows.yml | 9 | # Usage: | COMMENT |
| LOW⚡ | setup-hermes.sh | 8 | # Usage: | COMMENT |
| LOW | docker-compose.yml | 4 | # Usage: | COMMENT |
| LOW⚡ | tools/registry.py | 1299 | # Usage: | COMMENT |
| LOW | tests/install/install-update-e2e.sh | 22 | # Usage: | COMMENT |
| LOW | scripts/kill_modal.sh | 4 | # Usage: | COMMENT |
| LOW⚡ | scripts/install.sh | 8 | # Usage: | COMMENT |
| LOW | scripts/run_tests.sh | 16 | # Usage: | COMMENT |
| LOW | scripts/sandbox/pick-release-tags.sh | 15 | # Usage: | COMMENT |
| LOW⚡ | scripts/lib/node-bootstrap.sh | 15 | # Usage: | COMMENT |
| LOW | scripts/toolperf_abeval/run_all.sh | 4 | # Usage: | COMMENT |
| LOW | skills/creative/comfyui/scripts/comfyui_setup.sh | 14 | # Usage: | COMMENT |
| LOW | skills/creative/p5js/scripts/render.sh | 5 | # Usage: | COMMENT |
| LOW | skills/creative/p5js/scripts/serve.sh | 5 | # Usage: | COMMENT |
| LOW | datagen-config-examples/web_research.yaml | 6 | # Usage: | COMMENT |
| LOW | datagen-config-examples/run_browser_tasks.sh | 17 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/hermes_cli/test_config.py | 924 | CODE | |
| MEDIUM | tests/hermes_cli/test_config.py | 928 | CODE | |
| MEDIUM | tests/hermes_cli/test_config.py | 936 | CODE | |
| MEDIUM | …ts/run_agent/test_70773_shared_client_fd_corruption.py | 82 | CODE | |
| MEDIUM | …ts/run_agent/test_70773_shared_client_fd_corruption.py | 132 | CODE | |
| MEDIUM | tests/run_agent/test_stream_stale_circuit_breaker.py | 133 | CODE | |
| MEDIUM | tests/gateway/test_discord_double_dispatch.py | 60 | CODE | |
| MEDIUM | tests/gateway/test_discord_double_dispatch.py | 81 | CODE | |
| MEDIUM | tests/gateway/test_discord_free_response.py | 70 | CODE | |
| MEDIUM | tests/gateway/test_discord_free_response.py | 95 | CODE | |
| MEDIUM | tests/gateway/test_discord_slash_commands.py | 472 | CODE | |
| MEDIUM | tests/gateway/test_discord_slash_commands.py | 491 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …kills/mlops/pytorch-fsdp/references/common-patterns.md | 11 | **Pattern 2:** Distributed communication package - torch.distributed# Created On: Jul 12, 2017 | Last Updated On: Sep 04 | CODE |
| HIGH⚡ | skills/index-cache/lobehub_index.json | 1 | {"schemaVersion": 1, "agents": [{"author": "CSY2022", "createdAt": "2025-06-19", "homepage": "https://github.com/CSY2022 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | mcp-research-data/ue_hard_haiku_rows.json | 1352 | "final_response": "I'm unable to capture the Unreal Editor window. The computer_use tool isn't finding any windows at | CODE |
| MEDIUM | apps/desktop/e2e/mock-server.ts | 288 | { text: 'I cannot provide fresh verification evidence for that edit.' }, | CODE |
| MEDIUM | apps/desktop/e2e/mock-server.ts | 293 | export const VERIFICATION_STOP_TEXT = 'I cannot provide fresh verification evidence for that edit.' | CODE |
| MEDIUM⚡ | datagen-config-examples/run_browser_tasks.sh | 57 | # Common options you can add: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mini_swe_runner.py | 408 | def run_task(self, task: str) -> Dict[str, Any]: | CODE |
| LOW | evals/readtool/runner.py | 74 | def run_task(task, model: str, provider: str, timeout_mult: float, | CODE |
| LOW | tools/url_safety.py | 745 | def handle_request(self, request: Any) -> Any: | CODE |
| LOW | tests/tools/test_patch_parser.py | 244 | +def helper(): | CODE |
| LOW | tests/tools/test_patch_parser.py | 271 | assert "def helper():" in file_ops.written | CODE |
| LOW⚡ | tests/hermes_cli/test_gateway_restart_loop.py | 1487 | def helper(self, tmp_path): | CODE |
| LOW⚡ | tests/hermes_cli/test_gateway_restart_loop.py | 1543 | def helper(self, tmp_path): | CODE |
| LOW | tui_gateway/server.py | 2926 | def handle_request(req: dict) -> dict | None: | CODE |
| LOW | scripts/sandbox/proxy.py | 200 | def handle_request(conn): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …darwinian-evolver/templates/custom_problem_template.py | 80 | # TODO: implement. For prompt evolution this typically calls _prompt_llm | COMMENT |