"OpenHarness: Open Agent Harness with a Built-in Personal Agent--Ohmo!"
This report summarizes scanner evidence for HKUDS/OpenHarness, a Python project with 15,961 GitHub stars. SynthScan examined 93,823 lines of code across 460 source files, recording 2948 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 50.1 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1530 finding(s).
Are imports declared and package/API names verified? 534 finding(s).
Are wrappers, guards, and repeated structures necessary? 2250 finding(s).
Which changes need focused human review? 2948 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2948 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| 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 |
|---|---|---|---|---|
| HIGH | ohmo/gateway/service.py | 389 | except ValueError: | CODE |
| HIGH | ohmo/gateway/bridge.py | 244 | except (asyncio.CancelledError, asyncio.TimeoutError): | CODE |
| HIGH | tests/test_ohmo/test_gateway.py | 1810 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_ohmo/test_gateway.py | 1840 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_ohmo/test_gateway.py | 1871 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_ohmo/test_gateway.py | 2133 | except asyncio.CancelledError: | CODE |
| HIGH | scripts/test_docker_sandbox_e2e.py | 49 | except (subprocess.CalledProcessError, subprocess.TimeoutExpired, OSError): | CODE |
| HIGH | src/openharness/cli.py | 1743 | except Exception: | CODE |
| HIGH | src/openharness/ui/runtime.py | 87 | except Exception: | CODE |
| HIGH | src/openharness/ui/runtime.py | 491 | except Exception: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 413 | except ValueError: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 442 | except ValueError: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 716 | except OSError: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 737 | except OSError: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 771 | except OSError: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 665 | except Exception: | CODE |
| HIGH | src/openharness/swarm/team_lifecycle.py | 732 | except (subprocess.SubprocessError, OSError): | CODE |
| HIGH | src/openharness/swarm/in_process.py | 312 | except Exception: | CODE |
| HIGH | src/openharness/swarm/permission_sync.py | 540 | except OSError: | CODE |
| HIGH | src/openharness/swarm/permission_sync.py | 591 | except OSError: | CODE |
| HIGH | src/openharness/swarm/mailbox.py | 505 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | src/openharness/swarm/mailbox.py | 414 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | src/openharness/swarm/mailbox.py | 429 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | src/openharness/swarm/mailbox.py | 444 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | src/openharness/swarm/mailbox.py | 459 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | src/openharness/swarm/mailbox.py | 224 | except OSError: | CODE |
| HIGH | src/openharness/swarm/worktree.py | 116 | except OSError: | CODE |
| HIGH | src/openharness/swarm/worktree.py | 127 | except OSError: | CODE |
| HIGH | src/openharness/tasks/manager.py | 474 | except (BrokenPipeError, ConnectionResetError): | CODE |
| HIGH | src/openharness/tasks/manager.py | 386 | except RuntimeError: | CODE |
| HIGH | src/openharness/tasks/manager.py | 391 | except (ProcessLookupError, RuntimeError): | CODE |
| HIGH | src/openharness/tasks/manager.py | 404 | except ProcessLookupError: | CODE |
| HIGH | src/openharness/tasks/manager.py | 412 | except ProcessLookupError: | CODE |
| HIGH | src/openharness/tools/glob_tool.py | 150 | except asyncio.TimeoutError: | CODE |
| HIGH | src/openharness/tools/glob_tool.py | 156 | except ProcessLookupError: | CODE |
| HIGH | src/openharness/tools/glob_tool.py | 163 | except ProcessLookupError: | CODE |
| HIGH | src/openharness/coordinator/agent_definitions.py | 942 | except Exception: | CODE |
| HIGH | src/openharness/auth/storage.py | 182 | except ImportError: | CODE |
| HIGH | src/openharness/auth/storage.py | 180 | except (PasswordDeleteError, Exception): | CODE |
| HIGH | src/openharness/utils/fs.py | 95 | except OSError: | CODE |
| HIGH | src/openharness/sandbox/docker_backend.py | 193 | except (subprocess.TimeoutExpired, OSError): | CODE |
| HIGH | src/openharness/sandbox/path_validator.py | 25 | except ValueError: | CODE |
| HIGH | src/openharness/hooks/executor.py | 237 | except json.JSONDecodeError: | CODE |
| HIGH | src/openharness/prompts/context.py | 183 | except OSError: | CODE |
| HIGH | src/openharness/api/client.py | 110 | except (ValueError, TypeError): | CODE |
| HIGH | src/openharness/autopilot/service.py | 1306 | except (TypeError, ValueError): | CODE |
| HIGH | src/openharness/services/session_storage.py | 186 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | src/openharness/services/cron_scheduler.py | 148 | except OSError: | CODE |
| HIGH | src/openharness/services/cron_scheduler.py | 351 | except Exception: | CODE |
| HIGH | src/openharness/services/cron_scheduler.py | 474 | except asyncio.TimeoutError: | CODE |
| HIGH | src/openharness/services/autodream/service.py | 201 | except Exception: | CODE |
| HIGH | src/openharness/services/autodream/backup.py | 21 | except ValueError: | CODE |
| HIGH | src/openharness/services/autodream/lock.py | 130 | except (OSError, json.JSONDecodeError): | CODE |
| HIGH | src/openharness/channels/adapter.py | 61 | except asyncio.CancelledError: | CODE |
| HIGH | src/openharness/channels/impl/matrix.py | 418 | except Exception: | CODE |
| HIGH | src/openharness/channels/impl/matrix.py | 433 | except asyncio.CancelledError: | CODE |
| HIGH | src/openharness/channels/impl/matrix.py | 443 | except asyncio.CancelledError: | CODE |
| HIGH | src/openharness/channels/impl/matrix.py | 210 | except asyncio.CancelledError: | CODE |
| HIGH | src/openharness/channels/impl/telegram.py | 504 | except asyncio.CancelledError: | CODE |
| HIGH | src/openharness/channels/impl/mochat.py | 286 | except Exception: | CODE |
| 4 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 |