The agent that grows with you
This report presents the forensic synthetic code analysis of NousResearch/hermes-agent, a Python project with 214,387 GitHub stars. SynthScan v2.0 examined 2,180,829 lines of code across 6000 source files, recording 61039 pattern matches distributed across 28 syntactic categories. The overall adjusted score of 38.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 61039 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 | 956 | # ─── Well-Known Paths ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 979 | # ─── Network Preferences ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | hermes_constants.py | 1024 | # ─── Streaming Response Constants ──────────────────────────────────────────── | 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 | 269 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 271 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 274 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 278 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | run_agent.py | 935 | # ── Buffered retry/fallback status ──────────────────────────────────── | COMMENT |
| MEDIUM⚡ | run_agent.py | 1577 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | run_agent.py | 1579 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | run_agent.py | 4610 | # ── Unified streaming API call ───────────────────────────────────────── | COMMENT |
| MEDIUM | run_agent.py | 4800 | # ── Per-turn primary restoration ───────────────────────────────────── | COMMENT |
| MEDIUM | toolsets.py | 369 | # ========================================================================== | COMMENT |
| MEDIUM | toolsets.py | 376 | # ========================================================================== | 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 |
| MEDIUM | mini_swe_runner.py | 155 | # ============================================================================ | STRING |
| MEDIUM⚡ | cli.py | 1283 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | cli.py | 1285 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | cli.py | 2027 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | cli.py | 2029 | # ============================================================================ | COMMENT |
| 10491 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 | 732 | def _scan_completed_prompts_by_content(self) -> set: | CODE |
| LOW | batch_runner.py | 776 | def _filter_dataset_by_completed(self, completed_prompts: set) -> Tuple[List[Dict], List[int]]: | CODE |
| LOW | hermes_constants.py | 33 | def reset_hermes_home_override(token: Token) -> None: | CODE |
| LOW | hermes_constants.py | 46 | def _get_platform_default_hermes_home() -> Path: | CODE |
| LOW | hermes_constants.py | 275 | def _candidate_node_command_names(command: str) -> list[str]: | CODE |
| LOW | hermes_constants.py | 334 | def hermes_managed_node_tree_present(home: Path | None = None) -> bool: | CODE |
| LOW | hermes_constants.py | 349 | def _heal_managed_node_windows() -> bool: | CODE |
| LOW | hermes_constants.py | 450 | def find_hermes_node_executable(command: str) -> str | None: | CODE |
| LOW | hermes_constants.py | 477 | def find_node_executable_on_path(command: str) -> str | None: | CODE |
| LOW | hermes_constants.py | 697 | def _iter_real_home_candidates(env: dict[str, str] | None = None) -> list[str]: | CODE |
| LOW | hermes_constants.py | 784 | def apply_subprocess_home_env(env: dict[str, str]) -> None: | CODE |
| LOW | hermes_constants.py | 882 | 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 | 161 | def activate_durable_lazy_target() -> None: | CODE |
| LOW⚡ | run_agent.py | 986 | def _emit_pending_fallback_notice(self) -> None: | CODE |
| LOW⚡ | run_agent.py | 1039 | def _disable_codex_reasoning_replay( | CODE |
| LOW⚡ | run_agent.py | 1587 | def _summarize_background_review_actions( | CODE |
| LOW⚡ | run_agent.py | 2409 | def _api_request_payload_for_hook(self, api_kwargs: Optional[Dict[str, Any]]) -> Dict[str, Any]: | CODE |
| LOW⚡ | run_agent.py | 2982 | def _format_turn_completion_explanation(turn_exit_reason: str) -> str: | CODE |
| LOW⚡ | run_agent.py | 4034 | def _replace_primary_openai_client(self, *, reason: str) -> bool: | CODE |
| LOW⚡ | run_agent.py | 4653 | def _record_streamed_assistant_text(self, text: str) -> None: | CODE |
| LOW⚡ | run_agent.py | 4661 | def _normalize_interim_visible_text(text: str) -> str: | CODE |
| LOW⚡ | run_agent.py | 4666 | def _interim_content_was_streamed(self, content: str) -> bool: | CODE |
| LOW⚡ | run_agent.py | 5549 | def _copy_reasoning_content_for_api(self, source_msg: dict, api_msg: dict) -> None: | CODE |
| LOW⚡ | run_agent.py | 5554 | def _reapply_reasoning_echo_for_provider(self, api_messages: list) -> int: | CODE |
| LOW⚡ | run_agent.py | 5560 | def _sanitize_tool_calls_for_strict_api(api_msg: dict, model: "str | None" = None) -> dict: | CODE |
| LOW⚡ | run_agent.py | 5640 | def _toolguard_controlled_halt_response(self, decision: ToolGuardrailDecision) -> str: | CODE |
| LOW⚡ | run_agent.py | 5649 | def _append_guardrail_observation( | CODE |
| LOW | run_agent.py | 92 | def _session_source_for_agent(platform: Optional[str]) -> str: | CODE |
| LOW | run_agent.py | 238 | def _is_ephemeral_scaffolding(msg: Any) -> bool: | CODE |
| LOW | run_agent.py | 291 | def _pool_may_recover_from_rate_limit(pool) -> bool: | CODE |
| LOW | run_agent.py | 329 | def _safe_session_filename_component(session_id: str) -> str: | CODE |
| LOW | run_agent.py | 567 | def _get_session_db_for_recall(self): | CODE |
| LOW | run_agent.py | 618 | def _transition_context_engine_session( | CODE |
| LOW | run_agent.py | 761 | def _ensure_lmstudio_runtime_loaded(self, config_context_length: Optional[int] = None) -> None: | CODE |
| LOW | run_agent.py | 844 | def _should_start_quiet_spinner(self) -> bool: | CODE |
| LOW | run_agent.py | 863 | def _should_emit_quiet_tool_messages(self) -> bool: | CODE |
| LOW | run_agent.py | 1082 | def _stream_diag_capture_response( | CODE |
| LOW | run_agent.py | 1095 | def _is_provider_stream_parse_error(self, error: BaseException) -> bool: | CODE |
| LOW | run_agent.py | 1167 | def _check_compression_model_feasibility(self) -> None: | CODE |
| LOW | run_agent.py | 1172 | def _replay_compression_warning(self) -> None: | CODE |
| LOW | run_agent.py | 1215 | def _resolved_api_call_timeout(self) -> float: | CODE |
| LOW | run_agent.py | 1235 | def _resolved_api_call_stale_timeout_base(self) -> tuple[float, bool]: | CODE |
| LOW | run_agent.py | 1276 | def _compute_non_stream_stale_timeout(self, api_payload: Any) -> float: | CODE |
| LOW | run_agent.py | 1360 | def _anthropic_prompt_cache_policy( | CODE |
| LOW | run_agent.py | 1373 | def _model_requires_responses_api(model: str) -> bool: | CODE |
| LOW | run_agent.py | 1388 | def _provider_model_requires_responses_api( | CODE |
| LOW | run_agent.py | 1439 | def _requested_output_cap_from_api_kwargs(api_kwargs: Any) -> Optional[int]: | CODE |
| LOW | run_agent.py | 1453 | def _has_content_after_think_block(self, content: str) -> bool: | CODE |
| LOW | run_agent.py | 1482 | def _has_natural_response_ending(content: str) -> bool: | CODE |
| LOW | run_agent.py | 1523 | def _should_treat_stop_as_truncated( | CODE |
| LOW | run_agent.py | 1554 | def _looks_like_codex_intermediate_ack( | CODE |
| LOW | run_agent.py | 1629 | def _build_memory_write_metadata( | CODE |
| LOW | run_agent.py | 1647 | def _apply_persist_user_message_override(self, messages: List[Dict]) -> None: | CODE |
| LOW | run_agent.py | 1697 | def _drop_trailing_empty_response_scaffolding(self, messages: List[Dict]) -> None: | CODE |
| LOW | run_agent.py | 1755 | def _flush_messages_to_session_db(self, messages: List[Dict], conversation_history: List[Dict] = None): | CODE |
| LOW | run_agent.py | 1916 | def _get_messages_up_to_last_assistant(self, messages: List[Dict]) -> List[Dict]: | CODE |
| LOW | run_agent.py | 1947 | def _format_tools_for_system_message(self) -> str: | CODE |
| LOW | run_agent.py | 1952 | def _convert_to_trajectory_format(self, messages: List[Dict[str, Any]], user_query: str, completed: bool) -> List[Di | CODE |
| 36257 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 | 706 | except Exception as e: | CODE |
| LOW | batch_runner.py | 771 | except Exception as e: | CODE |
| LOW | batch_runner.py | 978 | except Exception as ckpt_err: | CODE |
| LOW | batch_runner.py | 981 | except Exception as e: | CODE |
| LOW | batch_runner.py | 1012 | except Exception as ckpt_err: | CODE |
| LOW | batch_runner.py | 1281 | except Exception as e: | CODE |
| LOW | batch_runner.py | 1312 | except Exception as e: | CODE |
| LOW | hermes_constants.py | 107 | except Exception: | CODE |
| LOW | hermes_constants.py | 678 | except Exception: | CODE |
| LOW | hermes_constants.py | 713 | except Exception: | CODE |
| LOW | hermes_constants.py | 852 | except Exception: | CODE |
| LOW | hermes_bootstrap.py | 180 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 924 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 932 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 974 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 983 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1034 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 1036 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 2382 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 2392 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 2399 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 2972 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 2977 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3326 | except Exception as e: | CODE |
| LOW⚡ | run_agent.py | 3330 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3339 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3457 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3461 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3463 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3472 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3494 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3500 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3506 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3517 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3519 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 3528 | except Exception: | CODE |
| LOW⚡ | run_agent.py | 4025 | except Exception as exc: | CODE |
| LOW⚡ | run_agent.py | 4039 | except Exception as exc: | CODE |
| LOW⚡ | run_agent.py | 4648 | except Exception: | CODE |
| LOW | run_agent.py | 97 | except Exception: | CODE |
| LOW | run_agent.py | 588 | except Exception as exc: | CODE |
| LOW | run_agent.py | 611 | except Exception as e: | CODE |
| LOW | run_agent.py | 644 | except Exception as exc: | CODE |
| LOW | run_agent.py | 650 | except Exception as exc: | CODE |
| LOW | run_agent.py | 673 | except Exception as exc: | CODE |
| LOW | run_agent.py | 684 | except Exception as exc: | CODE |
| LOW | run_agent.py | 758 | except Exception as exc: | CODE |
| LOW | run_agent.py | 791 | except Exception as err: | CODE |
| LOW | run_agent.py | 889 | except Exception: | CODE |
| LOW | run_agent.py | 894 | except Exception: | CODE |
| LOW | run_agent.py | 906 | except Exception: | CODE |
| LOW | run_agent.py | 911 | except Exception: | CODE |
| LOW | run_agent.py | 962 | except Exception: | CODE |
| LOW | run_agent.py | 1005 | except Exception: | CODE |
| LOW | run_agent.py | 1150 | except Exception: | CODE |
| LOW | run_agent.py | 1408 | except Exception: | CODE |
| LOW | run_agent.py | 1913 | except Exception as e: | CODE |
| LOW | run_agent.py | 2177 | except Exception: | CODE |
| 6678 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cli.py | 11135 | "Fallback: pkg install python-numpy portaudio && python -m pip install sounddevice" | CODE |
| HIGH | cli.py | 11140 | "Option 2: pkg install python-numpy portaudio && python -m pip install sounddevice" | CODE |
| HIGH | cli.py | 11454 | _cprint(f" {_BOLD}Option 2: pkg install python-numpy portaudio && python -m pip install sounddevice | CODE |
| HIGH | tools/schema_sanitizer.py | 29 | {"$ref": "#/$defs/Foo", "default": null} | STRING |
| HIGH | tools/schema_sanitizer.py | 175 | {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null} | STRING |
| HIGH⚡ | tools/voice_mode.py | 57 | return "pkg install python-numpy portaudio && python -m pip install sounddevice" | CODE |
| HIGH | tools/voice_mode.py | 205 | " 3. Verify with: arecord -d 3 /tmp/test.wav && aplay /tmp/test.wav" | CODE |
| HIGH | tools/process_registry.py | 1009 | f"kill -0 \"$(cat {quoted_pid_path} 2>/dev/null)\" 2>/dev/null; echo $?", | CODE |
| HIGH | tools/tts_tool.py | 1167 | # tts.deepinfra block in DEFAULT_CONFIG to deep-merge over the null). | COMMENT |
| HIGH | tools/transcription_tools.py | 1677 | # deep-merge over the null). | COMMENT |
| HIGH | tools/transcription_tools.py | 1786 | di_config = stt_config.get("deepinfra") # may be None (YAML null) | CODE |
| HIGH⚡ | tools/browser_tool.py | 766 | return "npm install -g agent-browser && agent-browser install" | CODE |
| HIGH⚡ | tools/browser_tool.py | 767 | return "npm install -g agent-browser && agent-browser install --with-deps" | CODE |
| HIGH⚡ | tools/terminal_tool.py | 707 | """Wrap `A && B &` (or `A || B &`) to `A && { B & }` at depth 0. | STRING |
| HIGH⚡ | tools/terminal_tool.py | 707 | """Wrap `A && B &` (or `A || B &`) to `A && { B & }` at depth 0. | STRING |
| HIGH⚡ | tools/terminal_tool.py | 709 | Bash parses ``A && B &`` with `&&` tighter than `&`, so it forks a | STRING |
| HIGH⚡ | tools/terminal_tool.py | 710 | subshell for the whole `A && B` compound and backgrounds it. Inside | STRING |
| HIGH⚡ | tools/browser_supervisor.py | 114 | xhr.open("GET", ENDPOINT + "?" + params.toString(), false); // sync | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 115 | xhr.send(null); | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 116 | if (xhr.status !== 200) return null; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 119 | try { parsed = JSON.parse(body); } catch (e) { return null; } | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 120 | if (kind === "alert") return undefined; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 121 | if (kind === "confirm") return Boolean(parsed && parsed.accept); | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 123 | if (!parsed || !parsed.accept) return null; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 126 | return null; | CODE |
| HIGH⚡ | tools/browser_supervisor.py | 130 | 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 | 2073 | check = self._exec(f"test -e {self._escape_shell_arg(path)} && echo exists || echo not_found") | CODE |
| HIGH⚡ | tools/file_operations.py | 2081 | f"test -d {self._escape_shell_arg(parent)} && echo yes || echo no" | CODE |
| HIGH | tools/file_operations.py | 870 | result = self._exec(f"command -v {cmd} >/dev/null 2>&1 && echo 'yes'") | CODE |
| HIGH | tools/file_operations.py | 1022 | 'm="$(stat -c%a "$t" 2>/dev/null || stat -f%Lp "$t" 2>/dev/null || true)"; ' | CODE |
| HIGH | tools/file_operations.py | 1023 | '[ -n "$m" ] && chmod "$m" "$tmp" 2>/dev/null || true; ' | CODE |
| HIGH | tools/code_execution_tool.py | 789 | f"ls -1 {quoted_rpc_dir}/req_* 2>/dev/null || true", | STRING |
| HIGH | tools/code_execution_tool.py | 952 | "command -v python3 >/dev/null 2>&1 && echo OK", | STRING |
| HIGH | tools/environments/local.py | 1091 | prelude_parts.append(f"[ -r '{safe}' ] && . '{safe}' 2>/dev/null || true") | 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 | 417 | f">> {_snap_tmp} 2>/dev/null || true\n" | CODE |
| HIGH⚡ | tools/environments/base.py | 425 | f"builtin cd -- {_quoted_cwd} 2>/dev/null || true\n" | CODE |
| HIGH⚡ | tools/environments/base.py | 426 | f"pwd -P > {_quoted_cwd_file} 2>/dev/null || true\n" | CODE |
| HIGH | tools/environments/base.py | 528 | f"source {_quoted_snap} >/dev/null 2>&1 || true" | CODE |
| HIGH | tools/environments/base.py | 551 | f"2>/dev/null || rm -f {_snap_tmp} 2>/dev/null || true" | CODE |
| HIGH | tools/environments/base.py | 555 | parts.append(f"pwd -P > {_quoted_cwd_file} 2>/dev/null || true") | CODE |
| HIGH | hermes_cli/gateway.py | 4052 | f"launchctl bootout {shlex.quote(target)} 2>/dev/null; " | CODE |
| HIGH | hermes_cli/gateway.py | 4056 | 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 | 821 | # "paidRecommendedCompactionModel": {modelName, ...} | null, | COMMENT |
| HIGH⚡ | hermes_cli/models.py | 822 | # "paidRecommendedVisionModel": {modelName, ...} | null, | COMMENT |
| HIGH⚡ | hermes_cli/models.py | 823 | # "freeRecommendedCompactionModel": {modelName, ...} | null, | COMMENT |
| HIGH⚡ | hermes_cli/models.py | 824 | # "freeRecommendedVisionModel": {modelName, ...} | null, | COMMENT |
| HIGH⚡ | hermes_cli/models.py | 1028 | # paid tier → paid, then free (if paid field is null) | COMMENT |
| HIGH | hermes_cli/models.py | 1004 | Returns ``None`` when every candidate is missing, null, or the fetch | STRING |
| HIGH | hermes_cli/cron.py | 124 | # job persisted with "repeat": null), so coalesce to {} rather than | COMMENT |
| HIGH | hermes_cli/service_manager.py | 795 | f'chown hermes:hermes "$HERMES_HOME/logs/gateways" 2>/dev/null || true\n' | CODE |
| HIGH | hermes_cli/service_manager.py | 796 | f'chown -R hermes:hermes "$log_dir" 2>/dev/null || true\n' | CODE |
| HIGH | hermes_cli/web_server.py | 14621 | # Non-web origin (packaged Electron: file://, null, app://). The | COMMENT |
| HIGH | hermes_cli/web_server.py | 8490 | return f'security delete-generic-password -s "Claude Code-credentials" 2>/dev/null; {rm_file}' | CODE |
| 230 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 | 111 | CODE | |
| LOW | run_agent.py | 111 | CODE | |
| LOW | run_agent.py | 116 | CODE | |
| LOW | run_agent.py | 136 | CODE | |
| LOW | run_agent.py | 136 | CODE | |
| LOW | run_agent.py | 136 | CODE | |
| LOW | run_agent.py | 151 | CODE | |
| LOW | run_agent.py | 157 | CODE | |
| LOW | run_agent.py | 158 | CODE | |
| LOW | run_agent.py | 159 | CODE | |
| LOW | run_agent.py | 159 | CODE | |
| LOW | run_agent.py | 159 | CODE | |
| LOW | run_agent.py | 159 | CODE | |
| LOW | run_agent.py | 159 | CODE | |
| LOW | run_agent.py | 159 | 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 | 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 | 168 | CODE | |
| LOW | run_agent.py | 200 | CODE | |
| LOW | run_agent.py | 200 | CODE | |
| LOW | run_agent.py | 200 | CODE | |
| LOW | run_agent.py | 200 | CODE | |
| LOW | run_agent.py | 200 | CODE | |
| LOW | run_agent.py | 26 | CODE | |
| LOW | run_agent.py | 1074 | CODE | |
| LOW | run_agent.py | 1580 | CODE | |
| LOW | run_agent.py | 1580 | CODE | |
| LOW | run_agent.py | 1580 | CODE | |
| LOW | setup.py | 1 | CODE | |
| LOW | cli.py | 52 | CODE | |
| LOW | cli.py | 171 | CODE | |
| LOW | cli.py | 171 | CODE | |
| LOW | cli.py | 171 | CODE | |
| LOW | cli.py | 18 | CODE | |
| LOW | cli.py | 13207 | CODE | |
| LOW | mcp_serve.py | 30 | CODE | |
| LOW | tools/schema_sanitizer.py | 37 | CODE | |
| LOW | tools/tool_search.py | 28 | CODE | |
| LOW | tools/vision_tools.py | 109 | CODE | |
| LOW | tools/web_tools.py | 45 | CODE | |
| LOW | tools/web_tools.py | 53 | CODE | |
| LOW | tools/web_tools.py | 53 | CODE | |
| LOW | tools/web_tools.py | 63 | CODE | |
| LOW | tools/web_tools.py | 63 | CODE | |
| LOW | tools/web_tools.py | 63 | CODE | |
| LOW | tools/web_tools.py | 71 | CODE | |
| LOW | tools/web_tools.py | 71 | CODE | |
| LOW | tools/web_tools.py | 75 | CODE | |
| LOW | tools/web_tools.py | 89 | CODE | |
| 1806 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 | 642 | CODE | |
| LOW | batch_runner.py | 732 | CODE | |
| LOW | batch_runner.py | 776 | CODE | |
| LOW | batch_runner.py | 810 | CODE | |
| LOW | hermes_constants.py | 450 | CODE | |
| LOW | run_agent.py | 5839 | CODE | |
| LOW | run_agent.py | 1009 | CODE | |
| LOW | run_agent.py | 1755 | CODE | |
| LOW | run_agent.py | 2098 | CODE | |
| LOW | run_agent.py | 2127 | CODE | |
| LOW | run_agent.py | 2528 | CODE | |
| LOW | run_agent.py | 2557 | CODE | |
| LOW | run_agent.py | 3428 | CODE | |
| LOW | run_agent.py | 3717 | CODE | |
| LOW | run_agent.py | 4425 | CODE | |
| LOW | run_agent.py | 4612 | CODE | |
| LOW | run_agent.py | 5153 | CODE | |
| LOW | run_agent.py | 5279 | CODE | |
| LOW | run_agent.py | 5312 | CODE | |
| LOW | run_agent.py | 5434 | CODE | |
| LOW | toolsets.py | 687 | 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 | cli.py | 120 | CODE | |
| LOW | cli.py | 360 | CODE | |
| LOW | cli.py | 1059 | CODE | |
| LOW | cli.py | 1350 | CODE | |
| LOW | cli.py | 1425 | CODE | |
| LOW | cli.py | 1645 | CODE | |
| LOW | cli.py | 1770 | CODE | |
| LOW | cli.py | 2173 | CODE | |
| LOW | cli.py | 2560 | CODE | |
| LOW | cli.py | 2823 | CODE | |
| LOW | cli.py | 3023 | CODE | |
| LOW | cli.py | 3136 | CODE | |
| LOW | cli.py | 15789 | CODE | |
| LOW | cli.py | 3685 | CODE | |
| LOW | cli.py | 4428 | CODE | |
| LOW | cli.py | 4933 | CODE | |
| LOW | cli.py | 5131 | CODE | |
| LOW | cli.py | 5253 | CODE | |
| LOW | cli.py | 5455 | CODE | |
| LOW | cli.py | 5622 | CODE | |
| LOW | cli.py | 6040 | CODE | |
| LOW | cli.py | 6410 | CODE | |
| LOW | cli.py | 6476 | CODE | |
| LOW | cli.py | 7025 | CODE | |
| LOW | cli.py | 7268 | CODE | |
| LOW | cli.py | 7504 | CODE | |
| LOW | cli.py | 7961 | CODE | |
| LOW | cli.py | 8433 | CODE | |
| LOW | cli.py | 9175 | CODE | |
| LOW | cli.py | 9441 | CODE | |
| LOW | cli.py | 9875 | CODE | |
| LOW | cli.py | 10188 | CODE | |
| LOW | cli.py | 10454 | CODE | |
| 1493 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/postinstall.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/version.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 | 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/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 |
| HIGH | plugins/platforms/whatsapp/adapter.py | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | …bsite/docs/developer-guide/adding-platform-adapters.md | 0 | plugin entry point — called by the hermes plugin system. | STRING |
| HIGH | plugins/platforms/discord/adapter.py | 0 | check if message reactions are enabled via config/env. | STRING |
| HIGH | plugins/platforms/telegram/adapter.py | 0 | check if message reactions are enabled via config/env. | STRING |
| HIGH | plugins/platforms/slack/adapter.py | 0 | check if message reactions are enabled via config/env. | STRING |
| HIGH | plugins/platforms/discord/adapter.py | 0 | wait for the quiet period then dispatch the aggregated text. uses a longer delay when the latest chunk is near telegram' | STRING |
| HIGH | plugins/platforms/wecom/adapter.py | 0 | wait for the quiet period then dispatch the aggregated text. uses a longer delay when the latest chunk is near telegram' | STRING |
| HIGH | plugins/platforms/telegram/adapter.py | 0 | wait for the quiet period then dispatch the aggregated text. uses a longer delay when the latest chunk is near telegram' | STRING |
| HIGH | plugins/platforms/ntfy/adapter.py | 0 | plugin entry point — called by the hermes plugin system at startup. | STRING |
| HIGH | plugins/platforms/simplex/adapter.py | 0 | plugin entry point — called by the hermes plugin system at startup. | STRING |
| HIGH | plugins/platforms/line/adapter.py | 0 | plugin entry point — called by the hermes plugin system at startup. | STRING |
| HIGH | plugins/platforms/simplex/adapter.py | 0 | wait for quiet period then dispatch aggregated text. | STRING |
| HIGH | plugins/platforms/matrix/adapter.py | 0 | wait for quiet period then dispatch aggregated text. | STRING |
| HIGH | plugins/platforms/whatsapp/adapter.py | 0 | wait for quiet period then dispatch aggregated text. | STRING |
| 133 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hermes_state.py | 4768 | # Step 2: Strip remaining (unmatched) FTS5-special characters. ``:`` is | COMMENT |
| LOW⚡ | hermes_state.py | 4775 | # Step 3: Collapse repeated * (e.g. "***") into a single one, | COMMENT |
| LOW⚡ | hermes_state.py | 4780 | # Step 4: Remove dangling boolean operators at start/end that would | COMMENT |
| LOW⚡ | hermes_state.py | 4785 | # Step 5: Wrap unquoted dotted and/or hyphenated terms in double | COMMENT |
| LOW⚡ | hermes_state.py | 4793 | # Step 6: Restore preserved quoted phrases | COMMENT |
| LOW | hermes_state.py | 4742 | # Step 1: Extract balanced double-quoted phrases and protect them | COMMENT |
| LOW | tools/skills_hub.py | 1727 | # Step 1: fetch the sitemap index → list of skill-sitemap URLs. | COMMENT |
| LOW | tools/skills_hub.py | 1749 | # Step 2: fetch each skill sitemap and collect canonical "owner/repo/skill" IDs. | COMMENT |
| LOW⚡ | tools/skills_sync.py | 846 | # Step 2: drop the manifest entry so next sync treats it as new | COMMENT |
| LOW⚡ | tools/skills_sync.py | 851 | # Step 3: run sync to re-baseline (or re-copy if we deleted) | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 650 | # Step 1: Did disk change? Picks up external refresh. | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 659 | # Step 2: No disk change — if the SDK can refresh | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 245 | # Step 1: PRM discovery to learn the authorization_server URL. | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 267 | # 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 | 1872 | # Step 1: Get access token | COMMENT |
| LOW | tools/send_message_tool.py | 1884 | # Step 2: Send message via REST | COMMENT |
| LOW⚡ | tools/computer_use/cua_backend.py | 1253 | # Step 1: enumerate on-screen windows to find target pid/window_id. | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 1366 | # Step 2: capture. | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 7344 | # Step 2: Show user the code | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 7352 | # Step 3: Poll for authorization code | COMMENT |
| LOW | hermes_cli/auth.py | 7275 | # Step 1: Request device code. OpenAI's auth endpoint rate-limits this | COMMENT |
| LOW | hermes_cli/auth.py | 7387 | # Step 4: Exchange authorization code for tokens | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 161 | # Step 1: Select platform | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 165 | # 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 | 230 | # Step 1: dotenv | COMMENT |
| LOW⚡ | hermes_cli/send_cmd.py | 254 | # Step 2: bridge top-level config.yaml values into the environment so | COMMENT |
| LOW | hermes_cli/web_server.py | 9442 | # Step 1: request device code | COMMENT |
| LOW | hermes_cli/web_server.py | 9469 | # Step 2: poll until authorized | COMMENT |
| LOW | hermes_cli/web_server.py | 9493 | # Step 3: exchange authorization_code for tokens | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 1909 | # Step 1: Check / prompt for API key | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 1922 | # Step 2: Auto-detect endpoint from key prefix | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 1935 | # Step 3: Model selection — show appropriate models for the endpoint | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 2971 | # Step 2: Terminal Backend — where commands run is a core decision | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 2974 | # Step 3: Apply defaults for everything else | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 2979 | # Step 4: Offer messaging gateway setup | COMMENT |
| LOW | hermes_cli/setup.py | 2943 | # Step 1: Nous Portal — OAuth login + model selection. | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 1184 | # Step 2: only the local browser provider actually needs Chromium on | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 1190 | # Step 3: ensure the Chromium / headless-shell build agent-browser | COMMENT |
| LOW | hermes_cli/tools_config.py | 1158 | # Step 1: install the agent-browser npm package into node_modules/ | COMMENT |
| LOW | hermes_cli/copilot_auth.py | 184 | # Step 1: Request device code | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 217 | # Step 2: Show instructions | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 224 | # Step 3: Poll for completion | COMMENT |
| LOW | hermes_cli/main.py | 3021 | # Step 1: Provider selection. | COMMENT |
| LOW | hermes_cli/main.py | 3120 | # Step 2: Provider-specific setup + model selection | COMMENT |
| LOW | hermes_cli/main.py | 8151 | # Step 1: root install (no workspace recursion). | COMMENT |
| LOW | hermes_cli/main.py | 8172 | # Step 2: install only the workspaces update needs (ui-tui, web). | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1054 | # Step 1: Create card with STREAM callback type | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1082 | # Step 2: Deliver card to the conversation | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1122 | # Step 3: Stream initial content. finalize=True closes the | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 150 | # Step 1: Receive auth_required | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 157 | # Step 2: Send auth | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 163 | # Step 3: Wait for auth_ok | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 170 | # 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 |
| 536 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 | hermes_bootstrap.py | 181 | # Bootstrap must never crash an entry point. If activation fails the | COMMENT |
| LOW | run_agent.py | 41 | import os | COMMENT |
| LOW | run_agent.py | 241 | return isinstance(msg, dict) and any( | COMMENT |
| LOW | run_agent.py | 261 | COMMENT | |
| LOW | run_agent.py | 1781 | if not self._session_db: | COMMENT |
| LOW | run_agent.py | 1801 | # assumes the live `messages` list is the original history plus a | COMMENT |
| LOW | run_agent.py | 4701 | prepended_break = True | COMMENT |
| LOW | run_agent.py | 5701 | """ | COMMENT |
| LOW | toolsets.py | 41 | "read_file", "write_file", "patch", "search_files", | COMMENT |
| LOW | toolsets.py | 361 | ], | COMMENT |
| LOW | pyproject.toml | 21 | authors = [{ name = "Nous Research" }] | COMMENT |
| LOW | pyproject.toml | 61 | # Interactive CLI (prompt_toolkit is used directly by cli.py) | COMMENT |
| LOW | pyproject.toml | 81 | # (~108KB, no compiled extensions, no platform constraints), so unlike the | COMMENT |
| LOW | pyproject.toml | 101 | # macOS and Windows. It replaces POSIX-only idioms like `os.kill(pid, 0)` | COMMENT |
| LOW | pyproject.toml | 121 | # shrink paths no-op, so an oversized image bakes into immutable history and | COMMENT |
| LOW | pyproject.toml | 181 | # Kept as a no-op back-compat alias — `ptyprocess` and `pywinpty` are now | COMMENT |
| LOW | pyproject.toml | 201 | # sse-starlette / HTTP-SSE stack (and by fastapi in the `web` extra). Before | COMMENT |
| LOW | pyproject.toml | 261 | ] | COMMENT |
| LOW | pyproject.toml | 281 | # otherwise one quarantined PyPI release breaks every fresh install. | COMMENT |
| LOW | pyproject.toml | 321 | # `gateway.reset.header_default` (#27632, #35374, #23943). | COMMENT |
| LOW | hermes_logging.py | 41 | COMMENT | |
| LOW | hermes_logging.py | 541 | COMMENT | |
| LOW | cli.py | 761 | pass | COMMENT |
| LOW | cli.py | 2061 | COMMENT | |
| LOW | cli.py | 2661 | return | COMMENT |
| LOW | cli.py | 2861 | resolved = path.resolve() | COMMENT |
| LOW | cli.py | 4041 | self._interrupt_queue = queue.Queue() | COMMENT |
| LOW | cli.py | 4781 | _m, _s = int(elapsed // 60), int(elapsed % 60) | COMMENT |
| LOW | cli.py | 7121 | elif title is not None: | COMMENT |
| LOW | cli.py | 9201 | # Slash commands don't count as "real user messages" for this | COMMENT |
| LOW | cli.py | 9581 | # (the head's compressed output ends on assistant/tool). | COMMENT |
| LOW | cli.py | 10781 | # Refresh the agent's tool list so the model can call new tools. | COMMENT |
| LOW | cli.py | 11001 | self._tool_start_time = 0.0 | COMMENT |
| LOW | cli.py | 13021 | """ | COMMENT |
| LOW | cli.py | 13181 | _welcome_color = "#FFF8DC" | COMMENT |
| LOW | cli.py | 13481 | if self._should_handle_model_command_inline(text, has_images=has_images): | COMMENT |
| LOW | cli.py | 15021 | 'approval-selected': '#FFD700 bold', | COMMENT |
| LOW | cli.py | 15061 | # iTerm2, Windows Terminal). See #48309. | COMMENT |
| LOW | cli.py | 15081 | # to suppress the deliberate "reserve vertical space" scroll-up. | COMMENT |
| LOW | cli.py | 15321 | # while the agent was running and were never claimed by | COMMENT |
| LOW | cli.py | 15421 | except (TypeError, ValueError): | COMMENT |
| LOW | cli.py | 15461 | # KeyboardInterrupt in MainThread. Windows Terminal / Win32 | COMMENT |
| LOW | cli.py | 15481 | # background thread spawns a .cmd subprocess, and | COMMENT |
| LOW | cli.py | 16001 | atexit.register(_run_cleanup) | COMMENT |
| LOW | cli.py | 16241 | COMMENT | |
| LOW | hermes_state.py | 141 | DEFAULT_DB_PATH = get_hermes_home() / "state.db" | COMMENT |
| LOW | hermes_state.py | 161 | # silently — /resume, /title, /history, /branch, kanban dispatcher, etc. | COMMENT |
| LOW | hermes_state.py | 441 | # before it runs — including ``PRAGMA journal_mode`` (which is why this trips | COMMENT |
| LOW | hermes_state.py | 941 | Thread-safe for the common gateway pattern (multiple reader threads, | COMMENT |
| LOW | hermes_state.py | 961 | # into tens of thousands of segments, so every MATCH must scan them all | COMMENT |
| LOW | hermes_state.py | 1501 | # backfills, index changes tied to a specific version step) stay | COMMENT |
| LOW | hermes_state.py | 1621 | # sessions.json so pre-migration gateway sessions are | COMMENT |
| LOW | hermes_state.py | 2341 | # Atomic per-session locks that prevent two compression paths from | COMMENT |
| LOW | hermes_state.py | 2661 | model if has_accounted_usage else None, | COMMENT |
| 1204 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | batch_runner.py | 1054 | # Check for invalid tool names (model hallucinations) | COMMENT |
| MEDIUM | run_agent.py | 217 | # recovery scaffolding: the synthetic assistant "(empty)" turn and user nudge | COMMENT |
| MEDIUM | run_agent.py | 252 | # list (e.g. by scaffolding rewind or in-place compaction) and garbage- | COMMENT |
| MEDIUM | run_agent.py | 1707 | # Pass 1: strip the flagged scaffolding messages themselves. | COMMENT |
| MEDIUM | run_agent.py | 1720 | # Pass 2: if we stripped scaffolding, rewind through any trailing | COMMENT |
| MEDIUM | run_agent.py | 1724 | # result. Only runs when scaffolding was actually present — normal | COMMENT |
| MEDIUM | run_agent.py | 1839 | # Never write ephemeral recovery scaffolding to the session | COMMENT |
| MEDIUM | run_agent.py | 2593 | # Mirror the SQLite flush: ephemeral recovery scaffolding is | COMMENT |
| MEDIUM | run_agent.py | 3133 | # each turn for repeatable testing, bypassing real headers. Throwaway scaffolding. | COMMENT |
| MEDIUM | toolsets.py | 70 | # Kanban multi-agent coordination — only in schema when the agent is | COMMENT |
| MEDIUM | cli.py | 3801 | # authoritative. This avoids conflicts in multi-agent setups where | COMMENT |
| MEDIUM | cli.py | 3914 | # Ephemeral prefill messages (few-shot priming, never persisted) | COMMENT |
| MEDIUM | cli.py | 6231 | # Warn if the configured model is a Nous Hermes LLM (not agentic) | COMMENT |
| MEDIUM | CONTRIBUTING.md | 220 | ├── model_tools.py # Tool orchestration (thin layer over tools/registry.py) | CODE |
| MEDIUM | CONTRIBUTING.md | 249 | │ ├── terminal_tool.py # Terminal orchestration (sudo, env lifecycle, backends) | CODE |
| MEDIUM⚡ | model_tools.py | 1074 | # downstream hook (pre/post, edit approval, guardrails) sees the real | COMMENT |
| MEDIUM | model_tools.py | 450 | # descriptions that don't actually exist, and hallucinates calls to them. | COMMENT |
| MEDIUM | model_tools.py | 497 | # "prefer web_search or web_extract" which causes the model to hallucinate | COMMENT |
| MEDIUM | AGENTS.md | 233 | ├── model_tools.py # Tool orchestration, discover_builtin_tools(), handle_function_call() | CODE |
| MEDIUM | AGENTS.md | 1087 | ## Kanban (multi-agent work queue) | COMMENT |
| MEDIUM⚡ | tools/voice_mode.py | 821 | # Whisper hallucination filter | COMMENT |
| MEDIUM⚡ | tools/voice_mode.py | 823 | # Whisper commonly hallucinates these phrases on silent/near-silent audio. | COMMENT |
| MEDIUM⚡ | tools/voice_mode.py | 898 | # Filter out Whisper hallucinations (common on silent/near-silent audio) | COMMENT |
| MEDIUM | tools/voice_mode.py | 842 | # Non-English hallucinations (common on silence) | COMMENT |
| MEDIUM | tools/voice_mode.py | 854 | # Regex patterns for repetitive hallucinations (e.g. "Thank you. Thank you. Thank you.") | COMMENT |
| MEDIUM⚡ | tools/tts_tool.py | 225 | # context window. Users can override any of these via | COMMENT |
| MEDIUM⚡ | tools/tts_tool.py | 234 | "gemini": 32000, # Gemini TTS has a 32k-token context window; char cap is conservative | CODE |
| MEDIUM | tools/budget_config.py | 70 | # Fraction of a model's context window we allow a SINGLE tool result to occupy | COMMENT |
| MEDIUM⚡ | tools/approval.py | 1732 | # Approval prompting + orchestration | COMMENT |
| MEDIUM | docker/entrypoint.sh | 9 | # orchestration script that invokes it inside the container), forward to | COMMENT |
| MEDIUM | hermes_cli/auth.py | 5202 | # Skip Hermes models — they're not reliable for agentic tool-calling | COMMENT |
| MEDIUM | hermes_cli/gateway.py | 4798 | # is diagnostic scaffolding; cheap to keep on, costs nothing during | COMMENT |
| MEDIUM⚡ | hermes_cli/config.py | 1535 | # See: https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html | COMMENT |
| MEDIUM⚡ | hermes_cli/config.py | 1535 | # See: https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html | COMMENT |
| MEDIUM | hermes_cli/config.py | 1349 | # model's context window (floor 20K, ceiling 500K) so large-context models | COMMENT |
| MEDIUM | hermes_cli/config.py | 1394 | # Tool loop guardrails nudge models when they repeat failed or | COMMENT |
| MEDIUM | hermes_cli/config.py | 2176 | # Context engine -- controls how the context window is managed when | COMMENT |
| MEDIUM | hermes_cli/config.py | 2235 | # the parent's context window and trigger a compression/429 death | COMMENT |
| MEDIUM | hermes_cli/config.py | 2278 | # injected at the start of every API call for few-shot priming. | COMMENT |
| MEDIUM | hermes_cli/config.py | 2716 | # Kanban multi-agent coordination — controls the dispatcher loop that | COMMENT |
| MEDIUM | hermes_cli/config.py | 2741 | # Profile assigned to the root/orchestration task after Triage | COMMENT |
| MEDIUM | hermes_cli/config.py | 2794 | # context window on every turn. When enabled, those tools are replaced | COMMENT |
| MEDIUM | hermes_cli/models.py | 316 | # Third-party agentic models hosted on build.nvidia.com | COMMENT |
| MEDIUM | hermes_cli/models.py | 520 | # Curated HF model list — only agentic models that map to OpenRouter defaults. | COMMENT |
| MEDIUM | hermes_cli/models.py | 2229 | # - "openrouter": curated list is already a hand-picked agentic subset of | COMMENT |
| MEDIUM | hermes_cli/models.py | 2411 | # agentic catalog so ``/model`` matches what ``hermes model`` shows. | COMMENT |
| MEDIUM | hermes_cli/models.py | 2508 | # agentic picks lead the picker instead of whatever the live | COMMENT |
| MEDIUM⚡ | hermes_cli/goals.py | 1073 | # 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/model_switch.py | 121 | # Non-agentic model warning | COMMENT |
| MEDIUM | hermes_cli/model_switch.py | 1875 | # `hermes model` picker deliberately shows ONLY the curated agentic | COMMENT |
| MEDIUM⚡ | hermes_cli/model_setup_flows.py | 338 | # shows only agentic models users recognize from OpenRouter. | COMMENT |
| MEDIUM | hermes_cli/model_setup_flows.py | 2672 | # 1. models.dev registry (cached, filtered for agentic/tool-capable models) | COMMENT |
| MEDIUM | hermes_cli/kanban_diagnostics.py | 184 | # which hallucination events are still "active" (no clean event | COMMENT |
| MEDIUM | plugins/platforms/matrix/adapter.py | 2659 | # Prevents infinite reply loops in multi-agent shared rooms | COMMENT |
| MEDIUM | plugins/memory/honcho/client.py | 331 | # honcho_reasoning tool param (agentic). When false, always uses | COMMENT |
| MEDIUM | plugins/google_meet/meet_bot.py | 447 | def run_bot() -> int: # noqa: C901 — orchestration, explicit branches | STRING |
| MEDIUM | plugins/web/parallel/provider.py | 20 | # Optional: search mode (default "agentic"; also "fast" or "one-shot") | STRING |
| MEDIUM | plugins/web/parallel/provider.py | 26 | PARALLEL_SEARCH_MODE=agentic # optional: agentic|fast|one-shot | STRING |
| 190 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | batch_runner.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | run_agent.py | 5635 | 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⚡ | cli.py | 5032 | def set_voice_record_key_cache(self, raw_key: object) -> None: | CODE |
| LOW | cli.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | cli.py | 7569 | def _setup_modal() -> None: | CODE |
| LOW | utils.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | hermes_state.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | hermes_state.py | 197 | def _set_last_init_error(msg: Optional[str]) -> None: | CODE |
| LOW | hermes_state.py | 1837 | def set_expiry_finalized(self, session_id: str, finalized: bool = True) -> None: | CODE |
| LOW | hermes_state.py | 2324 | def set_compression_fallback_streak(self, session_id: str, streak: int) -> None: | CODE |
| LOW | hermes_state.py | 2512 | def update_system_prompt(self, session_id: str, system_prompt: str) -> None: | CODE |
| LOW | hermes_state.py | 2521 | def update_session_model(self, session_id: str, model: str) -> None: | CODE |
| LOW | hermes_state.py | 6384 | def set_meta(self, key: str, value: str) -> None: | CODE |
| LOW⚡ | model_tools.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/schema_sanitizer.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/voice_mode.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/tool_search.py | 713 | __all__ = [ | CODE |
| LOW | tools/vision_tools.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/process_registry.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/web_tools.py | 103 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/lazy_deps.py | 82 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/daemon_pool.py | 34 | __all__ = ["DaemonThreadPoolExecutor"] | CODE |
| LOW | tools/tts_tool.py | 58 | 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 | 37 | 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/clarify_gateway.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/registry.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tools/mcp_oauth.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/mcp_oauth.py | 352 | async def set_tokens(self, tokens: "OAuthToken") -> None: | CODE |
| LOW | tools/mcp_oauth.py | 384 | async def set_client_info(self, client_info: "OAuthClientInformationFull") -> None: | CODE |
| LOW | tools/transcription_tools.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/env_probe.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/interrupt.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/interrupt.py | 39 | def set_interrupt(active: bool, thread_id: int | None = None) -> None: | CODE |
| LOW⚡ | tools/async_delegation.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/thread_context.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/osv_check.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/memory_tool.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/__init__.py | 25 | __all__ = ["check_file_requirements"] | CODE |
| LOW | tools/skill_usage.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/skill_usage.py | 657 | def set_state(skill_name: str, state: str) -> None: | CODE |
| LOW | tools/skill_usage.py | 672 | def set_pinned(skill_name: str, pinned: bool) -> None: | CODE |
| LOW | tools/credential_files.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/cronjob_tools.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/file_tools.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/file_tools.py | 1578 | def _update_read_timestamp(filepath: str, task_id: str) -> None: | CODE |
| LOW | tools/blueprints.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/blueprints.py | 41 | __all__ = [ | CODE |
| LOW | tools/read_extract.py | 16 | __all__ = ["EXTRACTABLE_EXTENSIONS", "ExtractionError", "extract_document_text", "is_extractable_document"] | CODE |
| LOW | tools/skills_sync.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/browser_cdp_tool.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/debug_helpers.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | tools/browser_tool.py | 151 | logger = logging.getLogger(__name__) | CODE |
| 444 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cli.py | 1474 | # Create the worktree | COMMENT |
| MEDIUM | cli.py | 14234 | # Create the input area with multiline (Alt+Enter), autocomplete, and paste handling | COMMENT |
| MEDIUM | cli.py | 15048 | # Create the application | COMMENT |
| MEDIUM | cli.py | 15873 | # Create an isolated worktree so this agent instance doesn't collide | COMMENT |
| MEDIUM | trajectory_compressor.py | 1469 | # Create a temporary directory for processing | COMMENT |
| MEDIUM | trajectory_compressor.py | 1516 | # Create a temp directory with sampled files | COMMENT |
| MEDIUM | tools/skill_manager_tool.py | 821 | # Create the skill directory | COMMENT |
| MEDIUM | tools/discord_tool.py | 602 | # 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 | hermes_cli/backup.py | 376 | # Create the zip | COMMENT |
| MEDIUM⚡ | hermes_cli/config.py | 1534 | # Create a guardrail in the Bedrock console, then set the ID and version here. | COMMENT |
| MEDIUM⚡ | hermes_cli/cli_commands_mixin.py | 915 | # Create the new session with parent link. | COMMENT |
| MEDIUM | plugins/platforms/matrix/adapter.py | 1173 | # Create the HTTP API layer. | COMMENT |
| MEDIUM | plugins/platforms/matrix/adapter.py | 1181 | # Create the client. | COMMENT |
| MEDIUM⚡ | plugins/platforms/whatsapp/adapter.py | 722 | # Create a persistent HTTP session for all bridge communication | COMMENT |
| MEDIUM | plugins/memory/honcho/__init__.py | 448 | # Create the remote session before running startup-only migration and | COMMENT |
| MEDIUM | tests/test_tui_gateway_server.py | 4748 | # Create a minimal PNG file with a space in its name | COMMENT |
| MEDIUM | tests/test_toolsets.py | 65 | # 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 | 1094 | # Create a mock SessionDB that reads our test DB | COMMENT |
| MEDIUM | tests/test_hermes_state.py | 2403 | # Create a recent session | COMMENT |
| MEDIUM | tests/test_hermes_state.py | 4364 | # Create a newer standalone session that should sort above the lineage | COMMENT |
| MEDIUM⚡ | tests/test_timezone.py | 248 | # Create a job with a NAIVE past timestamp (simulating pre-tz data) | COMMENT |
| MEDIUM⚡ | tests/test_timezone.py | 297 | # Create an aware datetime in UTC | COMMENT |
| MEDIUM | tests/test_timezone.py | 273 | # Create a naive datetime — will be interpreted as system-local time | COMMENT |
| MEDIUM | tests/test_hermes_logging.py | 1119 | # Create a stderr-like stream with ASCII encoding | COMMENT |
| MEDIUM | tests/test_hermes_constants.py | 568 | # Create a symlink with fewer path components | COMMENT |
| MEDIUM⚡ | tests/honcho_plugin/test_session.py | 875 | # Create a cached session so dialectic_query doesn't bail early | COMMENT |
| MEDIUM⚡ | tests/tools/test_transcription_tools.py | 770 | # Create a directory with a valid audio extension | COMMENT |
| MEDIUM | tests/tools/test_modal_bulk_upload.py | 182 | # Create a minimal env without full __init__ | COMMENT |
| MEDIUM⚡ | tests/tools/test_docker_find.py | 26 | # Create a fake docker binary at a known path | COMMENT |
| MEDIUM | tests/tools/test_kanban_tools.py | 594 | # Create a real child via the tool so it gets the worker-profile | COMMENT |
| MEDIUM⚡ | tests/tools/test_browser_hardening.py | 228 | # Create a snapshot that exceeds 8000 chars | COMMENT |
| MEDIUM | tests/tools/test_browser_homebrew_paths.py | 365 | # Create a mock Popen that captures the env dict | COMMENT |
| MEDIUM | tests/tools/test_send_message_tool.py | 1406 | # Create a test file | COMMENT |
| MEDIUM | tests/tools/test_tirith_security.py | 1021 | # Create a fake executable | COMMENT |
| MEDIUM⚡ | tests/tools/test_browser_orphan_reaper.py | 163 | # Create a dir that doesn't match h_* or cdp_* pattern | 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_browser_lightpanda.py | 187 | # Create a tiny file simulating the Lightpanda placeholder PNG | COMMENT |
| MEDIUM⚡ | tests/tools/test_browser_lightpanda.py | 203 | # Create a larger file simulating a real Chrome screenshot | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 145 | # Create a symlink pointing outside the skills tree | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 223 | # Create a sensitive file one level above hermes_home | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 238 | # Create a fake sensitive file outside hermes_home | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 254 | # Create a file at an absolute path | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 296 | # Create a sensitive file outside hermes_home | COMMENT |
| MEDIUM⚡ | tests/tools/test_credential_files.py | 300 | # Create a symlink inside hermes_home pointing outside | COMMENT |
| MEDIUM | tests/tools/test_docker_environment.py | 1498 | # Create a directory that looks like a corrupted credential file path | COMMENT |
| MEDIUM⚡ | tests/tools/test_mcp_stability.py | 599 | # Create a mock HermesCLI-like object with the needed attributes | COMMENT |
| MEDIUM | tests/tools/test_skill_size_limits.py | 90 | # Create a small skill first | COMMENT |
| MEDIUM | tests/tools/test_skill_size_limits.py | 107 | # Create a skill near the limit | COMMENT |
| MEDIUM | tests/tools/test_skill_size_limits.py | 147 | # Create a supporting file | COMMENT |
| MEDIUM⚡ | tests/tools/test_vision_tools.py | 633 | # Create a fake image file under a fake home directory | COMMENT |
| MEDIUM⚡ | tests/tools/test_vision_tools.py | 847 | # Create a small 10x10 red PNG | COMMENT |
| MEDIUM | tests/tools/test_vision_tools.py | 866 | # Create a large image that will exceed 5 MB in base64 | COMMENT |
| MEDIUM | tests/tools/test_vision_tools.py | 970 | # Create a dummy file | COMMENT |
| MEDIUM⚡ | tests/tools/test_voice_mode.py | 962 | # Create a file that doesn't match the pattern | COMMENT |
| MEDIUM | tests/tools/test_sync_back_backends.py | 216 | # Create a fake control socket so cleanup tries the SSH exit | COMMENT |
| MEDIUM | tests/tools/test_interrupt.py | 120 | # Create a minimal mock agent with _interrupt_requested = True | COMMENT |
| MEDIUM | tests/docker/test_container_restart.py | 81 | # Create the profile + start its gateway. The Phase 4 hooks | COMMENT |
| 73 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli.py | 14981 | 'placeholder': '#888888 italic', | CODE |
| LOW⚡ | hermes_cli/auth.py | 548 | "placeholder", | CODE |
| LOW | hermes_cli/web_server.py | 4830 | "placeholder": str(raw.get("placeholder") or ""), | CODE |
| LOW | hermes_cli/web_server.py | 4972 | "placeholder": field["placeholder"], | CODE |
| LOW | hermes_cli/web_server.py | 5224 | "placeholder": field.placeholder, | CODE |
| LOW | hermes_cli/skin_engine.py | 889 | "placeholder": f"{dim} italic", | CODE |
| LOW | plugins/platforms/feishu/adapter.py | 301 | "placeholder", | CODE |
| LOW | plugins/platforms/slack/adapter.py | 233 | "placeholder", | CODE |
| LOW⚡ | plugins/memory/holographic/store.py | 451 | 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 | 78 | 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 | 103 | - 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 | 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 | - 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 | 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 | …/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_mcp_serve.py | 1258 | db_path.write_text("placeholder") | CODE |
| LOW | tests/tools/test_website_policy.py | 399 | monkeypatch.setenv("FIRECRAWL_API_KEY", "fake-key") | CODE |
| LOW | tests/tools/test_website_policy.py | 445 | monkeypatch.setenv("FIRECRAWL_API_KEY", "fake-key") | CODE |
| LOW | tests/tools/test_website_policy.py | 489 | monkeypatch.setenv("FIRECRAWL_API_KEY", "fake-key") | CODE |
| LOW⚡ | tests/tools/test_local_env_blocklist.py | 68 | "OPENAI_API_KEY": "sk-fake-key", | CODE |
| LOW⚡ | tests/tools/test_local_env_blocklist.py | 69 | "OPENROUTER_API_KEY": "or-fake-key", | CODE |
| LOW⚡ | tests/tools/test_local_env_blocklist.py | 70 | "ANTHROPIC_API_KEY": "ant-fake-key", | CODE |
| LOW | tests/tools/test_delegate.py | 1819 | def fake_key(base_url, provider_name=None): | CODE |
| LOW | tests/tools/test_delegate.py | 1825 | with patch("agent.credential_pool.get_custom_provider_pool_key", side_effect=fake_key), \ | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 209 | fake_key = "sk-" + "FAKESECRETVALUE1234567890ABCDEF" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 212 | f"text: API Key: {fake_key}\n" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 240 | fake_key = "sk-" + "ANOTHERFAKEKEY99887766554433" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 242 | f"text: OPENAI_API_KEY={fake_key}\n" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 297 | fake_token = "ghp_" + "FAKEGITHUBTOKEN12345678901234" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 300 | f"text: Token: {fake_token}\n" | CODE |
| LOW⚡ | tests/tools/test_browser_secret_exfil.py | 333 | fake_key = "sk-" + "SUPERVISORDIALOGSECRET1234567890" | CODE |
| 206 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | hermes_cli/auth.py | 545 | "your_api_key", | CODE |
| HIGH⚡ | hermes_cli/auth.py | 547 | "your-api-key", | CODE |
| HIGH | optional-skills/devops/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 | 276 | api_key="your-api-key" # Or set ANTHROPIC_API_KEY env var | CODE |
| HIGH | optional-skills/mlops/guidance/SKILL.md | 285 | 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 | 54 | pc = Pinecone(api_key="your-api-key") | CODE |
| HIGH | optional-skills/mlops/qdrant/SKILL.md | 422 | api_key="your-api-key" | CODE |
| HIGH | …onal-skills/mlops/qdrant/references/troubleshooting.md | 117 | api_key="your-api-key" | CODE |
| HIGH | optional-skills/mlops/inference/outlines/SKILL.md | 228 | 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 | …/docs/user-guide/skills/optional/mlops/mlops-qdrant.md | 439 | 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 | 71 | 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 | 293 | api_key="your-api-key" # Or set ANTHROPIC_API_KEY env var | CODE |
| HIGH | …ocs/user-guide/skills/optional/mlops/mlops-guidance.md | 302 | api_key="your-api-key" # Or set OPENAI_API_KEY env var | CODE |
| HIGH | …uide/skills/optional/mlops/mlops-inference-outlines.md | 245 | api_key="your-api-key" | 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 |
| HIGH⚡ | tests/gateway/test_weak_credential_guard.py | 59 | config = _make_gateway_config(Platform.SLACK, "your_api_key") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | run_agent.py | 577 | # to write the fork's harness turn into the user's real session. Recall | COMMENT |
| MEDIUM | run_agent.py | 1775 | # here would land its harness turn ("Review the conversation above and | COMMENT |
| LOW | cli.py | 2673 | # • None (some mocks / older PT builds) — just call the inner | COMMENT |
| MEDIUM | package-lock.json | 16838 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| MEDIUM | trajectory_compressor.py | 1248 | """Print comprehensive compression summary statistics.""" | STRING |
| MEDIUM⚡ | hermes_state.py | 4500 | # fix) shared the parent's session_id wrote its harness turn into this | COMMENT |
| MEDIUM⚡ | hermes_state.py | 4501 | # real session. The harness is a user/system message instructing the | COMMENT |
| MEDIUM⚡ | hermes_state.py | 4505 | # actual task. Strip any such harness message AND the curator-mode | COMMENT |
| MEDIUM | hermes_state.py | 225 | # Distinctive opening shared by both background-review harness prompts | COMMENT |
| MEDIUM | hermes_state.py | 274 | # The curator-mode reply to the harness prompt — drop it. | COMMENT |
| MEDIUM | hermes_state.py | 3427 | # children), then recursively joins forward through robust | 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_supervisor.py | 1113 | # Parse query string for dialog metadata. Use urllib to be robust. | COMMENT |
| LOW | tools/kanban_tools.py | 646 | # the write txn), so the worker can simply call | COMMENT |
| LOW | tools/kanban_tools.py | 702 | # this, a worker that learns kanban_complete is gated can just call | COMMENT |
| MEDIUM | docker/hermes-exec-shim.sh | 69 | # Reference it by absolute path so the drop is robust against PATH | COMMENT |
| MEDIUM | hermes_cli/gateway.py | 4864 | # Absolutely everything else: Exception, asyncio.CancelledError, | COMMENT |
| LOW | hermes_cli/models.py | 2019 | # Already on openrouter, just return the resolved slug | COMMENT |
| LOW | hermes_cli/web_server.py | 6086 | pass # can't read disk config — just use the string form | CODE |
| LOW | hermes_cli/kanban.py | 1245 | # dispatcher doesn't need to enumerate — we just pass the name | COMMENT |
| MEDIUM | hermes_cli/main.py | 5250 | # robust even if the hook is somehow skipped.) | COMMENT |
| MEDIUM | plugins/platforms/discord/voice_mixer.py | 99 | # Pad to a whole number of frames so looping is seamless and the final | COMMENT |
| MEDIUM | plugins/platforms/telegram/adapter.py | 7918 | # Normalize mime_type for robust comparisons (some clients send | COMMENT |
| MEDIUM⚡ | plugins/kanban/dashboard/plugin_api.py | 2143 | # 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 | 17671 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", | CODE |
| MEDIUM⚡ | tests/test_background_review_session_isolation.py | 39 | # An assistant message that quotes the harness text is not itself a harness prompt. | COMMENT |
| MEDIUM⚡ | tests/test_background_review_session_isolation.py | 74 | # If the message after the harness is a USER turn (not the curator reply), | COMMENT |
| MEDIUM | tests/tools/test_delegate.py | 2189 | # Use tiny thresholds so the assertion is scheduler-robust in CI: | COMMENT |
| MEDIUM | tests/tools/test_delegate.py | 189 | (regression for issue #43466's 'more robust variant' suggestion). | STRING |
| MEDIUM⚡ | tests/tools/test_computer_use.py | 2806 | # contract that subagent-harness code can rely on. | COMMENT |
| LOW | tests/tools/test_env_probe.py | 154 | # 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 | 842 | # We can't easily create one in the test, so just use a stable path | COMMENT |
| LOW | tests/hermes_cli/test_commands.py | 2217 | # Both calls should succeed and just return the built-in set. | COMMENT |
| LOW | tests/hermes_cli/test_voice_wrapper.py | 289 | # 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 | 166 | # 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_codex_ttfb_watchdog.py | 49 | # the test is robust to detection-logic changes elsewhere. | COMMENT |
| LOW | tests/agent/test_context_engine.py | 48 | # Trivial: just return as-is | COMMENT |
| MEDIUM | tests/agent/test_coding_context.py | 401 | # ── edit-format steering (per-model harness tuning) ────────────────────────── | COMMENT |
| MEDIUM | tests/acp/test_ping_suppression.py | 166 | # Test harness reads agent output via this StreamReader: | COMMENT |
| MEDIUM | tests/gateway/conftest.py | 52 | """Install a comprehensive telegram mock in sys.modules. | STRING |
| MEDIUM | tests/gateway/conftest.py | 102 | """Install a comprehensive discord mock in sys.modules. | STRING |
| MEDIUM | tests/gateway/test_api_server.py | 1453 | # the test robust against preview-formatter tweaks. | COMMENT |
| MEDIUM⚡ | tests/gateway/test_discord_double_dispatch.py | 31 | # The tests/gateway/conftest.py already installs a comprehensive discord | COMMENT |
| LOW | tests/gateway/test_session_env.py | 29 | # Can't use var.reset() without a token; just set back to sentinel. | COMMENT |
| LOW | tests/gateway/test_session_env.py | 241 | # After clearing, the session key must not retain the value we just set. | COMMENT |
| MEDIUM | …sts/gateway/test_first_turn_session_meta_rebaseline.py | 56 | proven #42039 harness but with a live cache + real transcript counter.""" | STRING |
| MEDIUM⚡ | tests/gateway/test_discord_voice_mixer.py | 57 | assert len(amb) % vm.FRAME_SIZE == 0 # frame-aligned for seamless loop | CODE |
| LOW⚡ | tests/gateway/test_slash_access_dispatch.py | 482 | # If /history has aliases, use one. Otherwise just use /history. | COMMENT |
| LOW⚡ | tests/gateway/test_pairing.py | 315 | # Approving with any code must just return None, not crash. | COMMENT |
| MEDIUM | agent/agent_init.py | 1324 | # background skill/memory review fork so its harness turn can't leak into | COMMENT |
| MEDIUM | agent/coding_context.py | 170 | # steer those models toward a format their first-party harness never taught | COMMENT |
| MEDIUM | agent/error_classifier.py | 556 | # Build a comprehensive error message string for pattern matching. | COMMENT |
| 15 more matches not shown… | ||||
| 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 | 143 | # 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 | 1473 | # Check if there's any non-whitespace content remaining | COMMENT |
| LOW | cli.py | 5659 | # Check if we're entering a reasoning block. | COMMENT |
| LOW | cli.py | 5683 | # Check if this is a block boundary position | COMMENT |
| LOW | cli.py | 12490 | # Check if user fired ANOTHER interrupt (Ctrl+C sets | 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 | 896 | # Check if compression needed | COMMENT |
| LOW | trajectory_compressor.py | 911 | # Check if there's anything to compress | COMMENT |
| LOW | hermes_state.py | 4361 | # Check if the current node has messages. | COMMENT |
| LOW | tools/vision_tools.py | 1394 | # Check if vision model is available | COMMENT |
| LOW | tools/process_registry.py | 1007 | # Check if process is still running | COMMENT |
| LOW | tools/web_tools.py | 1095 | # Check if API keys are available | COMMENT |
| LOW | tools/skills_hub.py | 964 | # Check if ANY entry lives under the target path | COMMENT |
| LOW | tools/fuzzy_match.py | 776 | # Check if this block matches | COMMENT |
| LOW | tools/browser_tool.py | 1717 | # Check if the daemon is still alive. ``os.kill(pid, 0)`` on Windows | COMMENT |
| LOW | tools/browser_tool.py | 2028 | # Check if we already have a session for this task | COMMENT |
| LOW | tools/browser_tool.py | 2148 | # Check if it's in PATH (global install) | COMMENT |
| LOW | tools/browser_tool.py | 2985 | # Check if snapshot needs summarization | COMMENT |
| LOW | tools/browser_tool.py | 4046 | # Check if screenshot file was created | COMMENT |
| LOW | tools/browser_tool.py | 4306 | # Check if session exists (under lock), but don't remove yet - | COMMENT |
| LOW | tools/terminal_tool.py | 2287 | # Check if this is an approval_required (gateway ask mode) | COMMENT |
| LOW | tools/skills_tool.py | 1221 | # Read the file once — reused for platform check and main content below | COMMENT |
| LOW | tools/skills_tool.py | 1278 | # Check if the skill is disabled by the user | COMMENT |
| LOW | tools/skills_tool.py | 1366 | # Read the file content | COMMENT |
| LOW | tools/skills_guard.py | 1123 | # Check if source matches any trusted repo exactly, or a skill path inside | COMMENT |
| LOW | tools/mcp_tool.py | 2810 | # Check if shutdown was requested during the sleep | COMMENT |
| LOW | tools/mcp_tool.py | 3998 | # Check if the MCP tool itself returned an error | COMMENT |
| LOW⚡ | tools/file_operations.py | 2079 | # Check if parent directory exists and list similar entries | COMMENT |
| LOW | tools/file_operations.py | 1101 | # Check if file exists and get size (wc -c is POSIX, works on Linux + macOS) | COMMENT |
| LOW | tools/file_operations.py | 1115 | # Check if file is too large | COMMENT |
| LOW | tools/file_operations.py | 1167 | # Check if truncated | COMMENT |
| LOW | hermes_cli/backup.py | 511 | # Check if all entries share a common first directory | COMMENT |
| LOW | hermes_cli/gateway.py | 5836 | # Check if signal-cli is available | COMMENT |
| LOW | hermes_cli/config.py | 1093 | # Set false to keep the evidence nudge terse. | COMMENT |
| LOW | hermes_cli/config.py | 1106 | # Set true to force on everywhere, or false to disable. | COMMENT |
| LOW | hermes_cli/config.py | 1852 | # Set 0 to disable the background refresh if it fights terminal | COMMENT |
| LOW | hermes_cli/config.py | 1969 | # Set this to True to re-enable the surfaces with the understanding | COMMENT |
| LOW | hermes_cli/config.py | 2067 | # Set explicitly to pin a backend: | COMMENT |
| LOW | hermes_cli/config.py | 2136 | # Set false to keep STT for the agent while suppressing that user-facing echo. | COMMENT |
| LOW | hermes_cli/config.py | 3263 | # Set 0 to disable. | COMMENT |
| LOW | hermes_cli/config.py | 5289 | # Check if dict keys look like they should be list-entry fields | COMMENT |
| LOW | hermes_cli/config.py | 8151 | # Check if it's an API key (goes to .env) | COMMENT |
| LOW | hermes_cli/models.py | 1702 | # Check if this provider has credentials available | COMMENT |
| LOW | hermes_cli/skills_hub.py | 539 | # Check if any source hit GitHub API rate limit | COMMENT |
| LOW | hermes_cli/skills_hub.py | 618 | # Check if already installed | COMMENT |
| LOW | hermes_cli/model_switch.py | 1300 | # Check if the requested model matches the entry's model | COMMENT |
| LOW | hermes_cli/model_switch.py | 1718 | # Check if any env var is set | COMMENT |
| LOW | hermes_cli/model_switch.py | 1795 | # Check if credentials exist | COMMENT |
| LOW | hermes_cli/web_server.py | 16693 | # Check if this plugin provides tools that require auth | COMMENT |
| LOW | hermes_cli/cli_commands_mixin.py | 1685 | # Display result in the CLI (thread-safe via patch_stdout). | COMMENT |
| LOW | hermes_cli/cli_commands_mixin.py | 1846 | # Check if a Chromium-family browser is already serving CDP on the debug port | COMMENT |
| LOW | hermes_cli/setup.py | 995 | # Check if already installed | COMMENT |
| LOW | hermes_cli/setup.py | 1141 | # Check if already installed | COMMENT |
| LOW | hermes_cli/setup.py | 1237 | # Check if Docker is available | COMMENT |
| LOW | hermes_cli/setup.py | 1253 | # Check if singularity/apptainer is available | COMMENT |
| LOW | hermes_cli/setup.py | 1312 | # Check if modal SDK is installed | COMMENT |
| 84 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hermes_state.py | 4768 | # Step 2: Strip remaining (unmatched) FTS5-special characters. ``:`` is | COMMENT |
| LOW⚡ | hermes_state.py | 4775 | # Step 3: Collapse repeated * (e.g. "***") into a single one, | COMMENT |
| LOW⚡ | hermes_state.py | 4780 | # Step 4: Remove dangling boolean operators at start/end that would | COMMENT |
| LOW⚡ | hermes_state.py | 4785 | # Step 5: Wrap unquoted dotted and/or hyphenated terms in double | COMMENT |
| LOW⚡ | hermes_state.py | 4793 | # Step 6: Restore preserved quoted phrases | COMMENT |
| LOW | hermes_state.py | 4742 | # Step 1: Extract balanced double-quoted phrases and protect them | COMMENT |
| LOW | tools/skills_hub.py | 1727 | # Step 1: fetch the sitemap index → list of skill-sitemap URLs. | COMMENT |
| LOW | tools/skills_hub.py | 1749 | # Step 2: fetch each skill sitemap and collect canonical "owner/repo/skill" IDs. | COMMENT |
| LOW⚡ | tools/skills_sync.py | 846 | # Step 2: drop the manifest entry so next sync treats it as new | COMMENT |
| LOW⚡ | tools/skills_sync.py | 851 | # Step 3: run sync to re-baseline (or re-copy if we deleted) | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 650 | # Step 1: Did disk change? Picks up external refresh. | COMMENT |
| LOW⚡ | tools/mcp_oauth_manager.py | 659 | # Step 2: No disk change — if the SDK can refresh | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 245 | # Step 1: PRM discovery to learn the authorization_server URL. | COMMENT |
| LOW | tools/mcp_oauth_manager.py | 267 | # 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 | 1872 | # Step 1: Get access token | COMMENT |
| LOW | tools/send_message_tool.py | 1884 | # Step 2: Send message via REST | COMMENT |
| LOW⚡ | tools/computer_use/cua_backend.py | 1253 | # Step 1: enumerate on-screen windows to find target pid/window_id. | COMMENT |
| LOW | tools/computer_use/cua_backend.py | 1366 | # Step 2: capture. | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 7344 | # Step 2: Show user the code | COMMENT |
| LOW⚡ | hermes_cli/auth.py | 7352 | # Step 3: Poll for authorization code | COMMENT |
| LOW | hermes_cli/auth.py | 7275 | # Step 1: Request device code. OpenAI's auth endpoint rate-limits this | COMMENT |
| LOW | hermes_cli/auth.py | 7387 | # Step 4: Exchange authorization code for tokens | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 161 | # Step 1: Select platform | COMMENT |
| LOW⚡ | hermes_cli/skills_config.py | 165 | # 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 | 230 | # Step 1: dotenv | COMMENT |
| LOW⚡ | hermes_cli/send_cmd.py | 254 | # Step 2: bridge top-level config.yaml values into the environment so | COMMENT |
| LOW | hermes_cli/web_server.py | 9442 | # Step 1: request device code | COMMENT |
| LOW | hermes_cli/web_server.py | 9469 | # Step 2: poll until authorized | COMMENT |
| LOW | hermes_cli/web_server.py | 9493 | # Step 3: exchange authorization_code for tokens | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 1909 | # Step 1: Check / prompt for API key | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 1922 | # Step 2: Auto-detect endpoint from key prefix | COMMENT |
| LOW | hermes_cli/model_setup_flows.py | 1935 | # Step 3: Model selection — show appropriate models for the endpoint | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 2971 | # Step 2: Terminal Backend — where commands run is a core decision | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 2974 | # Step 3: Apply defaults for everything else | COMMENT |
| LOW⚡ | hermes_cli/setup.py | 2979 | # Step 4: Offer messaging gateway setup | COMMENT |
| LOW | hermes_cli/setup.py | 2943 | # Step 1: Nous Portal — OAuth login + model selection. | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 1184 | # Step 2: only the local browser provider actually needs Chromium on | COMMENT |
| LOW⚡ | hermes_cli/tools_config.py | 1190 | # Step 3: ensure the Chromium / headless-shell build agent-browser | COMMENT |
| LOW | hermes_cli/tools_config.py | 1158 | # Step 1: install the agent-browser npm package into node_modules/ | COMMENT |
| LOW | hermes_cli/copilot_auth.py | 184 | # Step 1: Request device code | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 217 | # Step 2: Show instructions | COMMENT |
| LOW⚡ | hermes_cli/copilot_auth.py | 224 | # Step 3: Poll for completion | COMMENT |
| LOW | hermes_cli/main.py | 3021 | # Step 1: Provider selection. | COMMENT |
| LOW | hermes_cli/main.py | 3120 | # Step 2: Provider-specific setup + model selection | COMMENT |
| LOW | hermes_cli/main.py | 8151 | # Step 1: root install (no workspace recursion). | COMMENT |
| LOW | hermes_cli/main.py | 8172 | # Step 2: install only the workspaces update needs (ui-tui, web). | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1054 | # Step 1: Create card with STREAM callback type | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1082 | # Step 2: Deliver card to the conversation | COMMENT |
| LOW | plugins/platforms/dingtalk/adapter.py | 1122 | # Step 3: Stream initial content. finalize=True closes the | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 150 | # Step 1: Receive auth_required | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 157 | # Step 2: Send auth | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 163 | # Step 3: Wait for auth_ok | COMMENT |
| LOW⚡ | plugins/platforms/homeassistant/adapter.py | 170 | # 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 |
| 43 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/run_agent/test_stream_stale_breaker_reset.py | 203 | agent.client.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/run_agent/test_run_agent.py | 3754 | sent_msgs = agent.client.chat.completions.create.call_args.kwargs.get("messages", []) | CODE |
| CRITICAL | tests/gateway/test_stream_consumer_thread_routing.py | 219 | mock_client.im.v1.message.create.assert_called_once() | CODE |
| CRITICAL | tests/gateway/test_stream_consumer_thread_routing.py | 273 | mock_client.im.v1.message.create.assert_called_once() | CODE |
| 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 | 386 | Download an image from a URL to a local destination (async) with retry logic. Args: image_url (str | STRING |
| HIGH | tools/vision_tools.py | 1069 | 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 | 620 | Search the web for information using available search API backend. This function provides a generic interface | STRING |
| HIGH | tools/web_tools.py | 748 | Extract content from specific web pages using available extraction API backend. Returns clean page content (ma | STRING |
| HIGH | tools/terminal_tool.py | 2022 | Execute a command in the configured terminal environment. Args: command: The command to execute | STRING |
| HIGH | hermes_cli/model_normalize.py | 248 | 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 | 328 | Translate a model name into the format the target provider's API expects. This is the primary entry point for model | STRING |
| HIGH | agent/auxiliary_client.py | 6470 | Centralized synchronous LLM call. Resolves provider + model (from task config, explicit args, or auto-detect), | STRING |
| HIGH | gateway/platforms/base.py | 697 | Save raw image bytes to the cache and return the absolute file path. Args: data: Raw image bytes. | STRING |
| HIGH | gateway/platforms/base.py | 726 | 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 | 846 | 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 | 1554 | 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 | 1147 | CODE | |
| LOW | batch_runner.py | 532 | CODE | |
| LOW | run_agent.py | 5839 | CODE | |
| LOW | run_agent.py | 416 | CODE | |
| LOW | mini_swe_runner.py | 630 | CODE | |
| LOW | mini_swe_runner.py | 163 | CODE | |
| LOW | cli.py | 15789 | CODE | |
| LOW | cli.py | 3685 | CODE | |
| LOW | hermes_state.py | 1717 | CODE | |
| LOW | hermes_state.py | 2565 | CODE | |
| LOW | hermes_state.py | 3311 | CODE | |
| LOW | hermes_state.py | 3754 | CODE | |
| LOW | hermes_state.py | 6126 | CODE | |
| LOW | model_tools.py | 974 | CODE | |
| LOW | model_tools.py | 1025 | CODE | |
| LOW | tools/web_tools.py | 477 | CODE | |
| LOW | tools/session_search_tool.py | 619 | CODE | |
| LOW | tools/registry.py | 365 | CODE | |
| LOW | tools/cronjob_tools.py | 659 | CODE | |
| LOW | tools/file_tools.py | 1750 | CODE | |
| LOW | tools/file_tools.py | 1944 | CODE | |
| LOW | tools/terminal_tool.py | 1896 | CODE | |
| LOW | tools/terminal_tool.py | 2010 | CODE | |
| LOW | tools/skill_manager_tool.py | 1320 | CODE | |
| LOW | tools/image_generation_tool.py | 838 | CODE | |
| LOW | tools/file_operations.py | 1702 | CODE | |
| LOW | tools/delegate_tool.py | 1044 | CODE | |
| LOW | tools/discord_tool.py | 987 | CODE | |
| LOW | tools/environments/docker.py | 580 | CODE | |
| LOW | hermes_cli/auth.py | 5355 | CODE | |
| LOW | hermes_cli/auth.py | 6715 | CODE | |
| LOW | hermes_cli/auth.py | 7899 | CODE | |
| LOW | hermes_cli/model_switch.py | 1471 | CODE | |
| LOW | hermes_cli/web_server.py | 4001 | CODE | |
| LOW | hermes_cli/web_server.py | 4100 | CODE | |
| LOW | hermes_cli/kanban_swarm.py | 77 | CODE | |
| LOW | hermes_cli/kanban_db.py | 2387 | CODE | |
| LOW | hermes_cli/kanban_db.py | 2725 | CODE | |
| LOW | hermes_cli/kanban_db.py | 7174 | CODE | |
| LOW | hermes_cli/kanban_db.py | 7240 | CODE | |
| LOW | hermes_cli/main.py | 2000 | CODE | |
| LOW | hermes_cli/inventory.py | 111 | CODE | |
| LOW | plugins/platforms/matrix/adapter.py | 662 | CODE | |
| LOW | plugins/memory/honcho/__init__.py | 778 | CODE | |
| LOW | plugins/google_meet/process_manager.py | 84 | CODE | |
| LOW | plugins/video_gen/fal/__init__.py | 477 | CODE | |
| LOW | plugins/video_gen/xai/__init__.py | 429 | CODE | |
| LOW | plugins/observability/langfuse/__init__.py | 777 | CODE | |
| LOW | plugins/observability/langfuse/__init__.py | 826 | CODE | |
| LOW | plugins/observability/langfuse/__init__.py | 908 | CODE | |
| LOW | plugins/observability/langfuse/__init__.py | 1074 | CODE | |
| LOW | …tional-skills/security/godmode/scripts/godmode_race.py | 300 | CODE | |
| LOW | optional-skills/security/unbroker/scripts/emailer.py | 170 | CODE | |
| LOW | optional-skills/blockchain/evm/scripts/evm_client.py | 490 | CODE | |
| LOW | …anban-video-orchestrator/scripts/bootstrap_pipeline.py | 201 | CODE | |
| LOW | …anban-video-orchestrator/scripts/bootstrap_pipeline.py | 400 | CODE | |
| LOW | …anban-video-orchestrator/scripts/bootstrap_pipeline.py | 459 | CODE | |
| LOW | tests/tools/test_mcp_preflight_content_type.py | 57 | CODE | |
| LOW | tests/tools/test_mcp_tool.py | 2743 | CODE | |
| LOW | …ts/plugins/dashboard_auth/test_self_hosted_provider.py | 91 | CODE | |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ve/kanban-video-orchestrator/references/tool-matrix.md | 166 | # - comfyui (AI-generated visuals) | COMMENT |
| HIGH | …er-guide/skills/bundled/creative/creative-humanizer.md | 590 | 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 | 574 | 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 | 775 | # Usage: | COMMENT |
| LOW | scripts/kill_modal.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/dev-sandbox.sh | 10 | # Usage: | COMMENT |
| LOW⚡ | scripts/install.sh | 8 | # Usage: | COMMENT |
| LOW | scripts/run_tests.sh | 16 | # Usage: | COMMENT |
| LOW⚡ | scripts/lib/node-bootstrap.sh | 15 | # 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 |
|---|---|---|---|---|
| HIGH | optional-skills/mlops/pytorch-fsdp/SKILL.md | 38 | **Pattern 2:** Distributed communication package - torch.distributed# Created On: Jul 12, 2017 | Last Updated On: Sep 04 | CODE |
| HIGH | …user-guide/skills/optional/mlops/mlops-pytorch-fsdp.md | 55 | **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 | …/run_agent/test_28161_anthropic_stream_pool_cleanup.py | 128 | CODE | |
| MEDIUM | tests/run_agent/test_stream_stale_circuit_breaker.py | 107 | 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 | 752 | CODE | |
| MEDIUM | tests/gateway/test_discord_slash_commands.py | 771 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apps/desktop/src/lib/remend-tail.test.ts | 16 | print(f"total: $\{cost}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | tests/tools/test_patch_parser.py | 199 | +def helper(): | CODE |
| LOW | tests/tools/test_patch_parser.py | 226 | assert "def helper():" in file_ops.written | CODE |
| LOW | tui_gateway/server.py | 1246 | def handle_request(req: dict) -> dict | None: | 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 |