"OpenHarness: Open Agent Harness with a Built-in Personal Agent--Ohmo!"
This report presents the forensic synthetic code analysis of HKUDS/OpenHarness, a Python project with 14,778 GitHub stars. SynthScan v2.0 examined 93,823 lines of code across 460 source files, recording 2884 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 47.0 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 2884 distinct pattern matches across 18 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⚡ | tests/test_hooks_skills_plugins_real.py | 53 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 59 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 136 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 142 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 230 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 235 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 333 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 339 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 486 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_hooks_skills_plugins_real.py | 491 | # ==================================================================== | STRING |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 603 | # ==================================================================== | STRING |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 605 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 85 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 91 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 161 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 167 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 289 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 295 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 410 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 416 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_real_large_tasks.py | 33 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_real_large_tasks.py | 35 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 508 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 515 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 658 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 663 | # ==================================================================== | STRING |
| MEDIUM | tests/test_real_large_tasks.py | 758 | # ==================================================================== | STRING |
| MEDIUM | tests/test_real_large_tasks.py | 760 | # ==================================================================== | STRING |
| MEDIUM⚡ | tests/test_untested_features.py | 101 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 103 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 562 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 564 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 646 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 648 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 718 | # ==================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_untested_features.py | 720 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 39 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 41 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 146 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 148 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 179 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 181 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 239 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 241 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 390 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 392 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 443 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 445 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 492 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 494 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 540 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 542 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 598 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 600 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 620 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 622 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 806 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 808 | # ==================================================================== | COMMENT |
| MEDIUM | tests/test_untested_features.py | 294 | # ==================================================================== | STRING |
| MEDIUM | tests/test_untested_features.py | 296 | # ==================================================================== | STRING |
| 469 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ohmo/session_storage.py | 95 | def load_latest_for_session_key(workspace: str | Path | None, session_key: str) -> dict[str, Any] | None: | CODE |
| LOW | ohmo/session_storage.py | 193 | def load_latest_for_session_key(self, session_key: str) -> dict[str, Any] | None: | CODE |
| LOW | ohmo/memory.py | 179 | def create_memory_command_backend(workspace: str | Path | None = None) -> MemoryCommandBackend: | CODE |
| LOW | ohmo/runtime.py | 69 | def build_ohmo_backend_command( | CODE |
| LOW | ohmo/cli.py | 141 | def _format_provider_profile_label(info: dict[str, object]) -> str: | CODE |
| LOW | ohmo/cli.py | 328 | def _run_gateway_config_wizard(workspace: str | Path) -> GatewayConfig: | CODE |
| LOW | ohmo/cli.py | 372 | def _print_gateway_config_summary(config: GatewayConfig) -> None: | CODE |
| LOW | ohmo/cli.py | 411 | def _configure_gateway_logging( | CODE |
| LOW | ohmo/cli.py | 430 | def _build_gateway_logging_handlers( | CODE |
| LOW | ohmo/group_registry.py | 50 | def save_managed_group_record( | CODE |
| LOW | ohmo/group_registry.py | 80 | def load_managed_group_record( | CODE |
| LOW | ohmo/workspace.py | 234 | def get_gateway_restart_notice_path(workspace: str | Path | None = None) -> Path: | STRING |
| LOW | ohmo/gateway/service.py | 168 | async def _publish_pending_restart_notice(self) -> None: | CODE |
| LOW | ohmo/gateway/service.py | 322 | def _iter_workspace_gateway_pids(workspace: str | Path | None = None) -> list[int]: | CODE |
| LOW | ohmo/gateway/config.py | 29 | def build_channel_manager_config(config: GatewayConfig) -> Config: | CODE |
| LOW | ohmo/gateway/provider_commands.py | 13 | def handle_gateway_provider_command(args: str, *, workspace: str | Path | None) -> tuple[str, bool]: | CODE |
| LOW | ohmo/gateway/provider_commands.py | 55 | def handle_gateway_model_command(args: str, *, workspace: str | Path | None) -> tuple[str, bool]: | CODE |
| LOW | ohmo/gateway/bridge.py | 176 | async def _prepare_group_prompt_message( | CODE |
| LOW | ohmo/gateway/bridge.py | 377 | def _build_group_agent_prompt(raw_request: str) -> str: | CODE |
| LOW | ohmo/gateway/bridge.py | 391 | def _normalize_feishu_group_policy(value: str | None) -> str: | CODE |
| LOW⚡ | ohmo/gateway/runtime.py | 1100 | def _history_has_image_blocks(messages: list[ConversationMessage]) -> bool: | CODE |
| LOW⚡ | ohmo/gateway/runtime.py | 1104 | def _strip_image_blocks_from_engine_history(engine) -> None: | CODE |
| LOW⚡ | ohmo/gateway/runtime.py | 1112 | def _strip_image_blocks_from_messages(messages: list[ConversationMessage]) -> list[ConversationMessage]: | CODE |
| LOW⚡ | ohmo/gateway/runtime.py | 1116 | def _strip_image_blocks_from_message(message: ConversationMessage) -> ConversationMessage: | CODE |
| LOW | ohmo/gateway/runtime.py | 139 | def _handle_gateway_scoped_command(self, command_name: str, args: str) -> tuple[str, bool] | None: | CODE |
| LOW | ohmo/gateway/runtime.py | 753 | def _set_group_request_context( | CODE |
| LOW | ohmo/gateway/runtime.py | 781 | def _restore_group_request_context(bundle: RuntimeBundle, previous: object) -> None: | CODE |
| LOW | ohmo/gateway/runtime.py | 797 | def _sanitize_snapshot_messages(raw_messages: object) -> list[dict[str, object]] | None: | CODE |
| LOW | ohmo/gateway/runtime.py | 855 | def _extract_final_reply_media(reply: str, emitted_media: set[str]) -> list[str]: | CODE |
| LOW | ohmo/gateway/runtime.py | 876 | def _format_tool_media_caption(event: ToolExecutionCompleted, media: list[str]) -> str: | CODE |
| LOW | ohmo/gateway/runtime.py | 889 | def _sanitize_group_command_prompts(messages: list[ConversationMessage]) -> list[ConversationMessage]: | CODE |
| LOW | ohmo/gateway/runtime.py | 894 | def _sanitize_group_command_prompt(message: ConversationMessage) -> ConversationMessage: | CODE |
| LOW | ohmo/gateway/runtime.py | 908 | def _format_group_command_history_note(prompt: str) -> str: | CODE |
| LOW | ohmo/gateway/runtime.py | 916 | def _sanitize_group_command_metadata(raw_metadata: object) -> object: | CODE |
| LOW | ohmo/gateway/runtime.py | 927 | def _sanitize_group_command_metadata_value(value: object) -> object: | CODE |
| LOW | ohmo/gateway/runtime.py | 1045 | def _build_inbound_user_message(message: InboundMessage) -> ConversationMessage: | CODE |
| LOW | ohmo/gateway/runtime.py | 1071 | def _should_retry_without_image_input(error_message: str, messages: list[ConversationMessage]) -> bool: | CODE |
| LOW | ohmo/gateway/runtime.py | 1233 | def _prefers_chinese_progress(content: str) -> bool: | CODE |
| LOW | frontend/terminal/src/clipboardImage.ts | 90 | async function readWindowsClipboardImage(): Promise<ClipboardImageRead | null> { | CODE |
| LOW | tests/conftest.py | 11 | async def _reset_background_task_manager(): | CODE |
| LOW⚡ | tests/test_hooks_skills_plugins_real.py | 61 | async def task_hook_blocks_model_adapts(): | CODE |
| LOW⚡ | tests/test_hooks_skills_plugins_real.py | 144 | async def task_model_invokes_skill_tool(): | CODE |
| LOW⚡ | tests/test_hooks_skills_plugins_real.py | 237 | async def task_plugin_skill_in_agent_loop(): | STRING |
| LOW⚡ | tests/test_hooks_skills_plugins_real.py | 341 | async def task_hook_gates_writes_skill_guides(): | STRING |
| LOW⚡ | tests/test_hooks_skills_plugins_real.py | 493 | async def task_swarm_teammates_use_skills(): | STRING |
| LOW⚡ | tests/test_real_large_tasks.py | 93 | async def task_security_audit_with_hooks(): | CODE |
| LOW⚡ | tests/test_real_large_tasks.py | 169 | async def task_coordinator_code_review(): | CODE |
| LOW⚡ | tests/test_real_large_tasks.py | 297 | async def task_migration_plan_with_memory(): | CODE |
| LOW⚡ | tests/test_real_large_tasks.py | 665 | async def task_refactor_with_session(): | STRING |
| LOW⚡ | tests/test_untested_features.py | 650 | async def test_combined_hooks_skills_agent(): | CODE |
| LOW⚡ | tests/test_untested_features.py | 722 | async def test_full_swarm_autoagent(): | CODE |
| LOW⚡ | tests/test_platforms.py | 8 | def test_detect_platform_recognizes_wsl(): | CODE |
| LOW⚡ | tests/test_platforms.py | 17 | def test_detect_platform_recognizes_windows(): | CODE |
| LOW⚡ | tests/test_platforms.py | 25 | def test_windows_capabilities_disable_swarm_mailbox_and_sandbox(): | CODE |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 153 | async def task_memory_research_autoagent(): | CODE |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 327 | async def task_session_resume_autoagent(): | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 412 | async def task_cron_autoagent_maintenance(): | STRING |
| LOW | tests/test_bridge/test_session_flow.py | 14 | async def test_bridge_session_writes_output_in_cwd(tmp_path: Path): | CODE |
| LOW | tests/test_bridge/test_session_flow.py | 25 | def test_bridge_secret_and_url_flow(): | CODE |
| LOW | tests/test_bridge/test_core.py | 13 | def test_work_secret_roundtrip(): | CODE |
| 1288 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ohmo/session_storage.py | 3 | CODE | |
| LOW | ohmo/memory.py | 3 | CODE | |
| LOW | ohmo/runtime.py | 3 | CODE | |
| LOW | ohmo/prompts.py | 3 | CODE | |
| LOW | ohmo/cli.py | 3 | CODE | |
| LOW | ohmo/group_registry.py | 3 | CODE | |
| LOW | ohmo/workspace.py | 3 | CODE | |
| LOW | ohmo/gateway/service.py | 3 | CODE | |
| LOW | ohmo/gateway/config.py | 3 | CODE | |
| LOW | ohmo/gateway/models.py | 3 | CODE | |
| LOW | ohmo/gateway/provider_commands.py | 3 | CODE | |
| LOW | ohmo/gateway/bridge.py | 3 | CODE | |
| LOW | ohmo/gateway/notify.py | 3 | CODE | |
| LOW | ohmo/gateway/runtime.py | 3 | CODE | |
| LOW | ohmo/gateway/router.py | 3 | CODE | |
| LOW | ohmo/gateway/group_tool.py | 3 | CODE | |
| LOW | tests/conftest.py | 3 | CODE | |
| LOW | tests/test_hooks_skills_plugins_real.py | 9 | CODE | |
| LOW | tests/test_real_large_tasks.py | 9 | CODE | |
| LOW | tests/test_untested_features.py | 10 | CODE | |
| LOW | tests/test_platforms.py | 3 | CODE | |
| LOW | tests/test_merged_prs_on_autoagent.py | 9 | CODE | |
| LOW | tests/test_bridge/test_session_flow.py | 3 | CODE | |
| LOW | tests/test_bridge/test_core.py | 3 | CODE | |
| LOW | tests/test_install/test_windows_alias.py | 3 | CODE | |
| LOW | tests/test_tasks/test_manager.py | 3 | CODE | |
| LOW | tests/test_tools/test_image_generation_tool.py | 3 | CODE | |
| LOW | tests/test_tools/test_web_fetch_tool.py | 3 | CODE | |
| LOW | tests/test_tools/test_mcp_auth_tool.py | 3 | CODE | |
| LOW | tests/test_tools/test_integration_flows.py | 3 | CODE | |
| LOW | tests/test_tools/test_core_tools.py | 3 | CODE | |
| LOW | tests/test_tools/test_image_to_text_tool.py | 3 | CODE | |
| LOW | tests/test_tools/test_task_tools.py | 3 | CODE | |
| LOW | tests/test_swarm/test_registry.py | 3 | CODE | |
| LOW | tests/test_swarm/test_permission_sync.py | 3 | CODE | |
| LOW | tests/test_swarm/test_imports.py | 3 | CODE | |
| LOW | tests/test_swarm/test_lockfile.py | 3 | CODE | |
| LOW | tests/test_swarm/test_mailbox.py | 3 | CODE | |
| LOW | tests/test_swarm/test_spawn_utils.py | 3 | CODE | |
| LOW | tests/test_swarm/test_subprocess_backend.py | 3 | CODE | |
| LOW | tests/test_swarm/test_in_process.py | 3 | CODE | |
| LOW | tests/test_swarm/test_team_lifecycle.py | 3 | CODE | |
| LOW | tests/test_swarm/test_worktree.py | 3 | CODE | |
| LOW | tests/test_swarm/test_types.py | 3 | CODE | |
| LOW | tests/test_utils/test_fs.py | 3 | CODE | |
| LOW | tests/test_utils/test_helpers.py | 3 | CODE | |
| LOW | tests/test_utils/test_shell.py | 3 | CODE | |
| LOW | tests/test_utils/test_network_guard.py | 3 | CODE | |
| LOW | tests/test_commands/test_registry.py | 3 | CODE | |
| LOW | tests/test_commands/test_command_flows.py | 3 | CODE | |
| LOW | tests/test_autopilot/test_verification.py | 3 | CODE | |
| LOW | tests/test_memory/test_memdir.py | 3 | CODE | |
| LOW | tests/test_memory/test_claude_runtime_memory.py | 3 | CODE | |
| LOW | tests/test_coordinator/test_coordinator_mode.py | 3 | CODE | |
| LOW | tests/test_coordinator/test_agent_definitions.py | 3 | CODE | |
| LOW | tests/test_channels/test_telegram_security.py | 1 | CODE | |
| LOW | tests/test_channels/test_base.py | 1 | CODE | |
| LOW | tests/test_channels/test_feishu_security.py | 3 | CODE | |
| LOW | tests/test_plugins/test_lifecycle_flow.py | 3 | CODE | |
| LOW | tests/test_plugins/test_loader.py | 3 | CODE | |
| 430 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ohmo/gateway/service.py | 228 | except Exception as exc: | CODE |
| LOW | ohmo/gateway/service.py | 332 | except Exception: | CODE |
| LOW | ohmo/gateway/service.py | 357 | except Exception: | CODE |
| LOW | ohmo/gateway/bridge.py | 296 | except Exception as exc: # pragma: no cover - gateway failure path | CODE |
| LOW | ohmo/gateway/bridge.py | 362 | except Exception: | CODE |
| LOW | ohmo/gateway/runtime.py | 481 | except Exception: | CODE |
| LOW | ohmo/gateway/runtime.py | 805 | except Exception: | CODE |
| LOW | ohmo/gateway/runtime.py | 851 | except Exception: | CODE |
| LOW | ohmo/gateway/runtime.py | 1065 | except Exception: | CODE |
| LOW | ohmo/gateway/group_tool.py | 95 | except Exception as exc: | CODE |
| LOW | ohmo/gateway/group_tool.py | 121 | except Exception as exc: | CODE |
| LOW | tests/test_hooks_skills_plugins_real.py | 620 | except Exception as e: | STRING |
| LOW | tests/test_real_large_tasks.py | 781 | except Exception as e: | STRING |
| LOW⚡ | tests/test_untested_features.py | 94 | except Exception as e: | CODE |
| LOW | tests/test_merged_prs_on_autoagent.py | 649 | except Exception as e: | STRING |
| LOW | scripts/test_harness_features.py | 229 | except Exception as exc: | CODE |
| LOW | scripts/test_real_skills_plugins.py | 336 | except Exception as exc: | CODE |
| LOW | scripts/test_react_tui_redesign.py | 177 | except Exception as exc: | CODE |
| LOW | scripts/test_tui_interactions.py | 192 | except Exception as exc: | CODE |
| LOW | scripts/test_cli_flags.py | 147 | except Exception as exc: | CODE |
| LOW | scripts/test_docker_sandbox_e2e.py | 639 | except Exception as exc: | CODE |
| LOW | scripts/test_headless_rendering.py | 133 | except Exception as exc: | CODE |
| LOW | scripts/test_headless_rendering.py | 156 | except Exception as exc: | CODE |
| MEDIUM⚡ | src/openharness/cli.py | 1896 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM⚡ | src/openharness/cli.py | 2172 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 1638 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 1692 | print(f"Error: {exc}", file=sys.stderr, flush=True) | CODE |
| MEDIUM | src/openharness/cli.py | 1738 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 1923 | print("Error: domain cannot be empty.", file=sys.stderr, flush=True) | CODE |
| MEDIUM | src/openharness/cli.py | 1933 | print(f"Error: {exc}", file=sys.stderr, flush=True) | CODE |
| MEDIUM | src/openharness/cli.py | 2031 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 2066 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 2153 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 2400 | print("Error: --dry-run does not support --continue/--resume yet.", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 2406 | print("Error: -p/--print requires a prompt value, e.g. -p 'your prompt'", file=sys.stderr) | CODE |
| MEDIUM | src/openharness/cli.py | 2501 | print("Error: -p/--print requires a prompt value, e.g. -p 'your prompt'", file=sys.stderr) | CODE |
| LOW | src/openharness/cli.py | 465 | except Exception as exc: # pragma: no cover - defensive diagnostic path | CODE |
| LOW | src/openharness/cli.py | 1743 | except Exception: | CODE |
| LOW | src/openharness/ui/runtime.py | 87 | except Exception: | CODE |
| LOW | src/openharness/ui/runtime.py | 201 | except Exception as exc: | CODE |
| LOW | src/openharness/ui/runtime.py | 246 | except Exception: | CODE |
| LOW | src/openharness/ui/runtime.py | 491 | except Exception: | CODE |
| MEDIUM | src/openharness/ui/runtime.py | 198 | def _safe_resolve_auth(): | CODE |
| LOW | src/openharness/ui/backend_host.py | 201 | except Exception as exc: # pragma: no cover - defensive protocol handling | CODE |
| LOW | src/openharness/ui/react_launcher.py | 18 | except Exception: | CODE |
| LOW | src/openharness/swarm/team_lifecycle.py | 665 | except Exception: | CODE |
| LOW | src/openharness/swarm/subprocess_backend.py | 99 | except Exception as exc: | CODE |
| LOW | src/openharness/swarm/in_process.py | 273 | except Exception: | CODE |
| LOW | src/openharness/swarm/in_process.py | 306 | except Exception: | CODE |
| LOW | src/openharness/swarm/in_process.py | 312 | except Exception: | CODE |
| LOW | src/openharness/tasks/manager.py | 372 | except Exception: | CODE |
| LOW | src/openharness/tools/agent_tool.py | 83 | except Exception as exc: | CODE |
| LOW | src/openharness/tools/mcp_auth_tool.py | 65 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | src/openharness/tools/image_to_text_tool.py | 119 | except Exception as exc: | CODE |
| LOW | src/openharness/tools/image_generation_tool.py | 114 | except Exception as exc: | CODE |
| LOW | src/openharness/tools/send_message_tool.py | 55 | except Exception as exc: | CODE |
| LOW⚡ | src/openharness/coordinator/agent_definitions.py | 888 | except Exception: | CODE |
| LOW | src/openharness/coordinator/agent_definitions.py | 942 | except Exception: | CODE |
| LOW⚡ | src/openharness/auth/storage.py | 107 | except Exception as exc: | CODE |
| LOW | src/openharness/auth/storage.py | 137 | except Exception as exc: | CODE |
| 137 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/test_utils/test_helpers.py | 5 | from openharness.utils.helpers import get_data_path, safe_filename, split_message | CODE |
| CRITICAL | src/openharness/channels/impl/matrix.py | 41 | from openharness.utils.helpers import safe_filename | CODE |
| CRITICAL⚡ | src/openharness/channels/impl/telegram.py | 17 | from openharness.utils.helpers import split_message | CODE |
| CRITICAL | src/openharness/channels/impl/discord.py | 15 | from openharness.utils.helpers import split_message | CODE |
| CRITICAL | src/openharness/channels/impl/mochat.py | 19 | from openharness.utils.helpers import get_data_path | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 18 | from openharness.utils.helpers import safe_filename | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 545 | response = self._client.im.v1.message_reaction.create(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 806 | response = self._client.im.v1.image.create(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 834 | response = self._client.im.v1.file.create(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 855 | response = self._client.im.v1.message_resource.get(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 888 | response = self._client.im.v1.message_resource.get(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 975 | response = self._client.im.v1.message.reply(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 986 | response = self._client.im.v1.message.create(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1027 | response = self._client.im.v1.chat.create(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1054 | response = self._client.im.v1.chat.update(request) | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1180 | lark.api.contact.v3.GetUserRequest.builder() | CODE |
| CRITICAL | src/openharness/channels/impl/feishu.py | 1185 | response = self._client.contact.v3.user.get(request) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_hooks_skills_plugins_real.py | 413 | command='echo "$TOOL_INPUT" | grep -q "config.py" && exit 1 || exit 0', | STRING |
| HIGH | tests/test_hooks_skills_plugins_real.py | 420 | command='echo "$TOOL_INPUT" | grep -q "config.py" && exit 1 || exit 0', | STRING |
| HIGH⚡ | tests/test_real_large_tasks.py | 427 | os.system(f"cd {repo} && git init -q && git checkout -b main 2>/dev/null") | CODE |
| HIGH | tests/test_real_large_tasks.py | 461 | os.system(f"cd {repo} && git add -A && git commit -q -m 'initial commit'") | STRING |
| HIGH⚡ | tests/test_untested_features.py | 574 | os.system(f"cd {repo} && git init && git commit --allow-empty -m 'init' 2>/dev/null") | CODE |
| HIGH | tests/test_untested_features.py | 205 | command='echo "$TOOL_INPUT" | grep -q "rm " && exit 1 || exit 0', | CODE |
| HIGH⚡ | tests/test_merged_prs_on_autoagent.py | 433 | "command": "cd /home/tangjiabin/AutoAgent && ruff check autoagent/"}, | STRING |
| HIGH⚡ | tests/test_merged_prs_on_autoagent.py | 435 | "command": "cd /home/tangjiabin/AutoAgent && python -m pytest tests/ -q"}, | STRING |
| HIGH⚡ | tests/test_merged_prs_on_autoagent.py | 437 | "command": "cd /home/tangjiabin/AutoAgent && grep -r TODO autoagent/ | wc -l"}, | STRING |
| HIGH⚡ | tests/test_merged_prs_on_autoagent.py | 585 | "command": "cd /home/tangjiabin/AutoAgent && ruff check autoagent/", | STRING |
| HIGH⚡ | tests/test_permissions/test_checker.py | 32 | command="npm init -y && npm install next react react-dom", | CODE |
| HIGH⚡ | tests/test_autopilot/test_verification.py | 37 | "pytest && evil", | CODE |
| HIGH⚡ | tests/test_autopilot/test_verification.py | 38 | "pytest || evil", | CODE |
| HIGH⚡ | tests/test_autopilot/test_verification.py | 56 | {"command": "cd frontend && npm ci && tsc --noEmit", "shell": True}, | CODE |
| HIGH⚡ | tests/test_autopilot/test_verification.py | 60 | assert cmd.raw == "cd frontend && npm ci && tsc --noEmit" | CODE |
| HIGH⚡ | tests/test_autopilot/test_verification.py | 185 | "commands": [{"command": "cd x && y", "shell": True}], | CODE |
| HIGH⚡ | tests/test_autopilot/test_verification.py | 191 | assert seen["target"] == "cd x && y" | CODE |
| HIGH⚡ | tests/test_prompts/test_environment.py | 42 | # Create a git repo (cross-platform: use subprocess, not os.system with /dev/null) | COMMENT |
| HIGH | scripts/test_docker_sandbox_e2e.py | 417 | ["bash", "-c", "timeout 3 bash -c 'echo > /dev/tcp/8.8.8.8/53' 2>&1 || exit 1"], | CODE |
| HIGH | scripts/test_docker_sandbox_e2e.py | 439 | ["bash", "-c", "getent hosts github.com 2>/dev/null && echo DNS_OK || echo DNS_FAIL"], | CODE |
| HIGH | scripts/test_docker_sandbox_e2e.py | 439 | ["bash", "-c", "getent hosts github.com 2>/dev/null && echo DNS_OK || echo DNS_FAIL"], | CODE |
| HIGH | src/openharness/coordinator/coordinator_mode.py | 419 | {_AGENT_TOOL_NAME}({{ prompt: "Fix the null pointer in src/auth/validate.ts:42. The user field on Session (src/auth/type | CODE |
| HIGH | src/openharness/coordinator/coordinator_mode.py | 452 | {_SEND_MESSAGE_TOOL_NAME}({{ to: "xyz-456", message: "Fix the null pointer in src/auth/validate.ts:42. The user field is | CODE |
| HIGH | src/openharness/coordinator/coordinator_mode.py | 512 | {_SEND_MESSAGE_TOOL_NAME}({{ to: "agent-a1b", message: "Fix the null pointer in src/auth/validate.ts:42. Add a null ch | CODE |
| HIGH | src/openharness/coordinator/agent_definitions.py | 425 | "current_usage": null, | CODE |
| HIGH | src/openharness/coordinator/agent_definitions.py | 426 | "used_percentage": null, | CODE |
| HIGH | src/openharness/sandbox/docker_image.py | 16 | RUN apt-get update && apt-get install -y --no-install-recommends \\ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ohmo/__init__.py | 3 | __all__ = ["__version__"] | CODE |
| LOW | ohmo/gateway/service.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | ohmo/gateway/bridge.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | ohmo/gateway/notify.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | ohmo/gateway/runtime.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/test_tools/test_mcp_auth_tool.py | 22 | def update_server_config(self, name: str, config: object) -> None: | CODE |
| LOW | scripts/e2e_smoke.py | 142 | def _setup_skill_flow(_: Path, config_dir: Path) -> None: | CODE |
| LOW | scripts/e2e_smoke.py | 161 | def _setup_context_flow(cwd: Path, _: Path) -> None: | CODE |
| LOW | scripts/e2e_smoke.py | 170 | def _setup_plugin_combo_flow(cwd: Path, _: Path) -> None: | CODE |
| LOW | scripts/e2e_smoke.py | 191 | def _setup_worktree_flow(cwd: Path, _: Path) -> None: | CODE |
| LOW | scripts/e2e_smoke.py | 215 | def _setup_issue_pr_context_flow(cwd: Path, _: Path) -> None: | CODE |
| LOW | scripts/e2e_smoke.py | 341 | def _setup_lsp_flow(cwd: Path, _: Path) -> None: | CODE |
| LOW | src/openharness/personalization/__init__.py | 6 | __all__ = ["extract_local_rules", "load_local_rules", "save_local_rules"] | CODE |
| LOW | src/openharness/vim/__init__.py | 5 | __all__ = ["toggle_vim_mode"] | CODE |
| LOW | src/openharness/ui/protocol.py | 241 | __all__ = [ | CODE |
| LOW | src/openharness/ui/__init__.py | 5 | __all__ = ["run_repl", "run_print_mode"] | CODE |
| LOW | src/openharness/ui/backend_host.py | 934 | __all__ = ["run_backend_host", "ReactBackendHost", "BackendHostConfig"] | CODE |
| LOW | src/openharness/ui/input.py | 15 | def set_modes(self, *, vim_enabled: bool, voice_enabled: bool) -> None: | CODE |
| LOW | src/openharness/ui/react_launcher.py | 179 | __all__ = ["build_backend_command", "get_frontend_dir", "launch_react_tui"] | CODE |
| LOW | src/openharness/ui/textual_app.py | 430 | def _set_current_response(self, message: str) -> None: | STRING |
| LOW | src/openharness/ui/output.py | 31 | def set_style(self, style_name: str) -> None: | CODE |
| LOW | src/openharness/swarm/lockfile.py | 18 | __all__ = [ | CODE |
| LOW⚡ | src/openharness/swarm/registry.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/swarm/subprocess_backend.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/swarm/__init__.py | 35 | __all__ = [ | CODE |
| LOW⚡ | src/openharness/swarm/in_process.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | src/openharness/swarm/in_process.py | 186 | def set_teammate_context(ctx: TeammateContext) -> None: | CODE |
| LOW | src/openharness/tasks/__init__.py | 9 | __all__ = [ | CODE |
| LOW | src/openharness/tools/agent_tool.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/tools/__init__.py | 101 | __all__ = [ | CODE |
| LOW | src/openharness/tools/send_message_tool.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/coordinator/__init__.py | 6 | __all__ = [ | CODE |
| LOW⚡ | src/openharness/coordinator/agent_definitions.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/memory/__init__.py | 12 | __all__ = [ | CODE |
| LOW | src/openharness/keybindings/__init__.py | 8 | __all__ = [ | CODE |
| LOW | src/openharness/config/__init__.py | 22 | __all__ = [ | CODE |
| LOW | src/openharness/auth/__init__.py | 15 | __all__ = [ | CODE |
| LOW | src/openharness/plugins/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/openharness/plugins/loader.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/bridge/__init__.py | 8 | __all__ = [ | CODE |
| LOW | src/openharness/utils/fs.py | 36 | __all__ = ["atomic_write_bytes", "atomic_write_text"] | CODE |
| LOW | src/openharness/utils/helpers.py | 16 | __all__ = ["get_data_path", "safe_filename", "split_message"] | CODE |
| LOW | src/openharness/mcp/client.py | 70 | def update_server_config(self, name: str, config: object) -> None: | CODE |
| LOW | src/openharness/mcp/__init__.py | 20 | __all__ = [ | CODE |
| LOW | src/openharness/state/__init__.py | 6 | __all__ = ["AppState", "AppStateStore"] | CODE |
| LOW | src/openharness/permissions/__init__.py | 11 | __all__ = ["PermissionChecker", "PermissionDecision", "PermissionMode"] | CODE |
| LOW | src/openharness/voice/__init__.py | 7 | __all__ = ["VoiceDiagnostics", "extract_keyterms", "inspect_voice_capabilities", "toggle_voice_mode", "transcribe_stream | CODE |
| LOW | src/openharness/sandbox/docker_backend.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/sandbox/docker_image.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/sandbox/session.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/sandbox/__init__.py | 19 | __all__ = [ | CODE |
| LOW | src/openharness/hooks/__init__.py | 13 | __all__ = [ | CODE |
| LOW | src/openharness/hooks/executor.py | 48 | def update_registry(self, registry: HookRegistry) -> None: | CODE |
| LOW | src/openharness/prompts/__init__.py | 8 | __all__ = [ | CODE |
| LOW | src/openharness/api/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/openharness/commands/__init__.py | 13 | __all__ = [ | CODE |
| LOW | src/openharness/skills/_frontmatter.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/skills/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/openharness/skills/loader.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/openharness/output_styles/__init__.py | 5 | __all__ = ["OutputStyle", "get_output_styles_dir", "load_output_styles"] | CODE |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ohmo/runtime.py | 147 | CODE | |
| LOW | ohmo/runtime.py | 188 | CODE | |
| LOW | ohmo/cli.py | 148 | CODE | |
| LOW | ohmo/cli.py | 195 | CODE | |
| LOW | ohmo/gateway/runtime.py | 954 | CODE | |
| LOW | tests/test_hooks_skills_plugins_real.py | 34 | CODE | |
| LOW | tests/test_real_large_tasks.py | 65 | CODE | |
| LOW | tests/test_untested_features.py | 68 | CODE | |
| LOW | tests/test_untested_features.py | 183 | CODE | |
| LOW | tests/test_merged_prs_on_autoagent.py | 82 | CODE | |
| LOW | scripts/local_system_scenarios.py | 222 | CODE | |
| LOW | scripts/e2e_smoke.py | 694 | CODE | |
| LOW | scripts/e2e_smoke.py | 759 | CODE | |
| LOW | scripts/test_docker_sandbox_e2e.py | 588 | CODE | |
| LOW | src/openharness/cli.py | 333 | CODE | |
| LOW | src/openharness/cli.py | 1404 | CODE | |
| LOW | src/openharness/cli.py | 2181 | CODE | |
| LOW | src/openharness/personalization/rules.py | 49 | CODE | |
| LOW | src/openharness/personalization/extractor.py | 78 | CODE | |
| LOW | src/openharness/ui/runtime.py | 621 | CODE | |
| LOW | src/openharness/ui/runtime.py | 777 | CODE | |
| LOW | src/openharness/ui/backend_host.py | 92 | CODE | |
| LOW | src/openharness/ui/backend_host.py | 250 | CODE | |
| LOW | src/openharness/ui/backend_host.py | 682 | CODE | |
| LOW | src/openharness/ui/backend_host.py | 274 | CODE | |
| LOW | src/openharness/ui/app.py | 92 | CODE | |
| LOW | src/openharness/ui/app.py | 177 | CODE | |
| LOW | src/openharness/ui/app.py | 121 | CODE | |
| LOW | src/openharness/ui/app.py | 240 | CODE | |
| LOW | src/openharness/ui/textual_app.py | 327 | CODE | |
| LOW | src/openharness/ui/textual_app.py | 436 | CODE | |
| LOW | src/openharness/ui/output.py | 56 | CODE | |
| LOW | src/openharness/swarm/in_process.py | 196 | CODE | |
| LOW | src/openharness/swarm/permission_sync.py | 1035 | CODE | |
| LOW | src/openharness/tools/grep_tool.py | 105 | CODE | |
| LOW | src/openharness/tools/config_tool.py | 28 | CODE | |
| LOW | src/openharness/tools/glob_tool.py | 98 | CODE | |
| LOW | src/openharness/tools/image_generation_tool.py | 318 | CODE | |
| LOW | src/openharness/coordinator/agent_definitions.py | 695 | CODE | |
| LOW | src/openharness/coordinator/agent_definitions.py | 905 | CODE | |
| LOW | src/openharness/auth/storage.py | 166 | CODE | |
| LOW | src/openharness/auth/manager.py | 116 | CODE | |
| LOW | src/openharness/auth/manager.py | 186 | CODE | |
| LOW | src/openharness/plugins/loader.py | 320 | CODE | |
| LOW | src/openharness/plugins/loader.py | 479 | CODE | |
| LOW | src/openharness/plugins/loader.py | 621 | CODE | |
| LOW | src/openharness/plugins/loader.py | 691 | CODE | |
| LOW | src/openharness/permissions/checker.py | 75 | CODE | |
| LOW | src/openharness/hooks/executor.py | 64 | CODE | |
| LOW | src/openharness/prompts/claudemd.py | 8 | CODE | |
| LOW | src/openharness/prompts/context.py | 102 | CODE | |
| LOW | src/openharness/api/provider.py | 97 | CODE | |
| LOW | src/openharness/api/client.py | 98 | CODE | |
| LOW | src/openharness/api/client.py | 165 | CODE | |
| LOW | src/openharness/api/codex_client.py | 77 | CODE | |
| LOW | src/openharness/api/codex_client.py | 253 | CODE | |
| LOW | src/openharness/api/codex_client.py | 358 | CODE | |
| LOW | src/openharness/api/openai_client.py | 81 | CODE | |
| LOW | src/openharness/api/openai_client.py | 315 | CODE | |
| LOW | src/openharness/commands/registry.py | 445 | CODE | |
| 41 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 163 | # Create a skill file that gives specific instructions | COMMENT |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 256 | # Create a plugin with a skill | STRING |
| MEDIUM | tests/test_hooks_skills_plugins_real.py | 384 | # Create a file to refactor | STRING |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 424 | # Create a test repo with a "buggy" file | COMMENT |
| MEDIUM⚡ | tests/test_real_large_tasks.py | 673 | # Create a file to refactor | STRING |
| MEDIUM | tests/test_tools/test_image_to_text_tool.py | 174 | # Create a minimal valid PNG file | COMMENT |
| MEDIUM⚡ | tests/test_prompts/test_environment.py | 42 | # Create a git repo (cross-platform: use subprocess, not os.system with /dev/null) | COMMENT |
| MEDIUM⚡ | scripts/install.sh | 192 | # Create a virtual environment to avoid PEP 668 externally-managed errors | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 556 | # Step 3: Use diagnose skill on AutoAgent (PR #17) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 565 | # Step 4: Track costs (PR #16) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 570 | # Step 5: Save session (PR #16) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 579 | # Step 6: Create cron job for ongoing monitoring (PR #16) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 590 | # Step 7: Resume session in Anthropic client and continue (PR #16 + #14) | STRING |
| LOW | tests/test_merged_prs_on_autoagent.py | 529 | # Step 1: OpenAI client researches AutoAgent (PR #14) | STRING |
| LOW | tests/test_merged_prs_on_autoagent.py | 542 | # Step 2: Save research to memory with frontmatter (PR #12) | STRING |
| LOW⚡ | scripts/install.sh | 67 | # Step 1: Detect OS | COMMENT |
| LOW⚡ | scripts/install.sh | 88 | # Step 2: Check Python >= 3.10 | COMMENT |
| LOW⚡ | scripts/install.sh | 151 | # Step 3: Check Node.js >= 18 | COMMENT |
| LOW⚡ | scripts/install.sh | 182 | # Step 4: Install OpenHarness | COMMENT |
| LOW⚡ | scripts/install.sh | 241 | # Step 5: Channel dependencies | COMMENT |
| LOW⚡ | scripts/install.sh | 249 | # Step 6: Install frontend/terminal npm dependencies | COMMENT |
| LOW⚡ | scripts/install.sh | 270 | # Step 7: Create OpenHarness config directory | COMMENT |
| LOW⚡ | scripts/install.sh | 281 | # Step 8: Register global commands | COMMENT |
| LOW⚡ | scripts/install.sh | 292 | # Step 9: Verify installation | COMMENT |
| LOW⚡ | scripts/install.sh | 316 | # Step 10: Add command directory to shell profile | COMMENT |
| LOW⚡ | src/openharness/services/compact/__init__.py | 1163 | # Step 1: microcompact to reduce tokens cheaply | COMMENT |
| LOW⚡ | src/openharness/services/compact/__init__.py | 1169 | # Step 2: split into older (summarize) and newer (preserve) | COMMENT |
| LOW⚡ | src/openharness/services/compact/__init__.py | 1172 | # Step 3: build compact request — send older messages + compact prompt | COMMENT |
| LOW | src/openharness/services/compact/__init__.py | 1375 | # Step 4: build the new message list | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 556 | # Step 3: Use diagnose skill on AutoAgent (PR #17) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 565 | # Step 4: Track costs (PR #16) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 570 | # Step 5: Save session (PR #16) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 579 | # Step 6: Create cron job for ongoing monitoring (PR #16) | STRING |
| LOW⚡ | tests/test_merged_prs_on_autoagent.py | 590 | # Step 7: Resume session in Anthropic client and continue (PR #16 + #14) | STRING |
| LOW | tests/test_merged_prs_on_autoagent.py | 529 | # Step 1: OpenAI client researches AutoAgent (PR #14) | STRING |
| LOW | tests/test_merged_prs_on_autoagent.py | 542 | # Step 2: Save research to memory with frontmatter (PR #12) | STRING |
| LOW⚡ | scripts/install.sh | 67 | # Step 1: Detect OS | COMMENT |
| LOW⚡ | scripts/install.sh | 88 | # Step 2: Check Python >= 3.10 | COMMENT |
| LOW⚡ | scripts/install.sh | 151 | # Step 3: Check Node.js >= 18 | COMMENT |
| LOW⚡ | scripts/install.sh | 182 | # Step 4: Install OpenHarness | COMMENT |
| LOW⚡ | scripts/install.sh | 241 | # Step 5: Channel dependencies | COMMENT |
| LOW⚡ | scripts/install.sh | 249 | # Step 6: Install frontend/terminal npm dependencies | COMMENT |
| LOW⚡ | scripts/install.sh | 270 | # Step 7: Create OpenHarness config directory | COMMENT |
| LOW⚡ | scripts/install.sh | 281 | # Step 8: Register global commands | COMMENT |
| LOW⚡ | scripts/install.sh | 292 | # Step 9: Verify installation | COMMENT |
| LOW⚡ | scripts/install.sh | 316 | # Step 10: Add command directory to shell profile | COMMENT |
| LOW⚡ | src/openharness/services/compact/__init__.py | 1163 | # Step 1: microcompact to reduce tokens cheaply | COMMENT |
| LOW⚡ | src/openharness/services/compact/__init__.py | 1169 | # Step 2: split into older (summarize) and newer (preserve) | COMMENT |
| LOW⚡ | src/openharness/services/compact/__init__.py | 1172 | # Step 3: build compact request — send older messages + compact prompt | COMMENT |
| LOW | src/openharness/services/compact/__init__.py | 1375 | # Step 4: build the new message list | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ohmo/runtime.py | 28 | CODE | |
| LOW | ohmo/cli.py | 448 | CODE | |
| LOW | src/openharness/cli.py | 2072 | CODE | |
| LOW | src/openharness/cli.py | 2116 | CODE | |
| LOW | src/openharness/cli.py | 2181 | CODE | |
| LOW | src/openharness/ui/runtime.py | 274 | CODE | |
| LOW | src/openharness/ui/backend_host.py | 883 | CODE | |
| LOW | src/openharness/ui/react_launcher.py | 81 | CODE | |
| LOW | src/openharness/ui/react_launcher.py | 116 | CODE | |
| LOW | src/openharness/ui/app.py | 40 | CODE | |
| LOW | src/openharness/ui/app.py | 92 | CODE | |
| LOW | src/openharness/ui/app.py | 177 | CODE | |
| LOW | src/openharness/swarm/spawn_utils.py | 109 | CODE | |
| LOW | src/openharness/auth/manager.py | 344 | CODE | |
| LOW | src/openharness/engine/query_engine.py | 24 | CODE | |
| LOW | src/openharness/services/compact/__init__.py | 1119 | CODE | |
| LOW | src/openharness/services/compact/__init__.py | 1482 | CODE | |
| LOW | src/openharness/services/autodream/service.py | 97 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/autopilot/assets/index-gQnrxco6.js | 49 | `).replace(hm,"")}function Hd(l,t){return t=Cd(t),Cd(l)===t}function fl(l,t,a,u,e,n){switch(a){case"children":typeof u== | CODE |
| MEDIUM | src/openharness/swarm/in_process.py | 257 | # harness wires up the full engine for in-process teammates. | COMMENT |
| MEDIUM⚡ | src/openharness/coordinator/agent_definitions.py | 133 | subagent_type: str = "general-purpose" # routing key used by the harness | CODE |
| MEDIUM | src/openharness/channels/impl/dingtalk.py | 55 | # Parse using SDK's ChatbotMessage for robust handling | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/openharness/swarm/registry.py | 271 | Return a TeammateExecutor for the given backend type. Args: backend: Explicit backend type to use. | STRING |
| HIGH | src/openharness/swarm/permission_sync.py | 346 | Build a new :class:`SwarmPermissionRequest` with a generated ID. Missing worker/team fields are read from environme | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_real_large_tasks.py | 512 | # Features: coordinator mode (5-turn orchestration), 3 concurrent | STRING |
| MEDIUM | src/openharness/coordinator/agent_definitions.py | 105 | max_turns: int | None = None # maximum agentic turns before stopping; must be > 0 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install_dev.sh | 3 | # Usage: | COMMENT |
| LOW | scripts/sync_nanobot_channels.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/openharness/swarm/spawn_utils.py | 21 | COMMENT | |
| LOW | src/openharness/auth/flows.py | 81 | # Only http(s) URLs are valid here. ShellExecute / xdg-open / `open` | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/openharness/channels/impl/discord.py | 273 | # Check if bot was mentioned in the message | COMMENT |